add full pipeline including tests

This commit is contained in:
2025-10-23 10:25:30 +02:00
parent bdf6456111
commit a9f9ffc5e7
4 changed files with 1834 additions and 1686 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,24 +1,20 @@
import csv
import warnings
from os import path
from pathlib import Path
from typing import Any, Final, cast
# Image.MAX_IMAGE_PIXELS = None
import cv2
import imutils
import matplotlib.pyplot as plt
import numpy as np
import numpy.typing as npt
import torch
# from anomalib.engine import Engine
from anomalib.models import Patchcore
from dopt_basics import result_pattern
from imutils import contours, perspective
from pandas import DataFrame
from PIL import Image
from scipy.spatial import distance as dist
from torchvision.transforms.v2.functional import to_dtype, to_image
import dopt_sensor_anomalies._find_paths
from dopt_sensor_anomalies import constants as const
@@ -67,14 +63,14 @@ def check_box_redundancy(
# ** main function
def measure_length(
file_path: Path,
img_path: Path,
pixels_per_metric_X: float,
pixels_per_metric_Y: float,
) -> tuple[t.CsvData, t.SensorImages]:
data_csv: list[str | int] = []
image = cv2.imread(str(file_path))
image = cv2.imread(str(img_path))
if image is None:
raise errors.ImageNotReadError(f"Image could not be read from: >{file_path}<")
raise errors.ImageNotReadError(f"Image could not be read from: >{img_path}<")
cropped = image[500:1500, 100 : image.shape[1] - 100]
orig = cropped.copy()
@@ -229,13 +225,13 @@ def infer_image(
# ** main function
def anomaly_detection(
file_path: Path,
img_path: Path,
detection_models: t.DetectionModels,
data_csv: t.CsvData,
sensor_images: t.SensorImages,
) -> None:
file_stem = file_path.stem
folder_path = file_path.parent
file_stem = img_path.stem
folder_path = img_path.parent
# reconstruct the model and initialize the engine
model = Patchcore(
@@ -277,12 +273,13 @@ def anomaly_detection(
)
@result_pattern.wrap_result(100)
def pipeline(
user_file_path: str,
user_img_path: str,
pixels_per_metric_X: float,
pixels_per_metric_Y: float,
) -> None:
file_path = Path(user_file_path)
file_path = Path(user_img_path)
if not file_path.exists():
raise FileNotFoundError("The provided path seems not to exist")
@@ -295,7 +292,7 @@ def pipeline(
file_path, pixels_per_metric_X, pixels_per_metric_Y
)
anomaly_detection(
file_path=file_path,
img_path=file_path,
detection_models=DETECTION_MODELS,
data_csv=data_csv,
sensor_images=sensor_images,

View File

@@ -3,6 +3,7 @@ from pathlib import Path
import numpy as np
import numpy.typing as npt
from anomalib.models import Patchcore
from dopt_basics import result_pattern
from dopt_sensor_anomalies import types as t
@@ -50,7 +51,7 @@ def check_box_redundancy(
...
def measure_length(
file_path: Path,
img_path: Path,
pixels_per_metric_X: float,
pixels_per_metric_Y: float,
) -> tuple[t.CsvData, t.SensorImages]:
@@ -58,7 +59,7 @@ def measure_length(
Parameters
----------
file_path : Path
img_path : Path
path to file to analyse
pixels_per_metric_X : float
scaling parameter x dimension, Pixels per micrometer in image
@@ -108,7 +109,7 @@ def infer_image(
...
def anomaly_detection(
file_path: Path,
img_path: Path,
detection_models: t.DetectionModels,
data_csv: t.CsvData,
sensor_images: t.SensorImages,
@@ -117,7 +118,7 @@ def anomaly_detection(
Parameters
----------
file_path : Path
img_path : Path
path to file to analyse
detection_models : t.DetectionModels
collection of model paths for the left and right sensor
@@ -128,8 +129,26 @@ def anomaly_detection(
"""
...
@result_pattern.wrap_result(100)
def pipeline(
user_file_path: str,
user_img_path: str,
pixels_per_metric_X: float,
pixels_per_metric_Y: float,
) -> None: ...
) -> None:
"""full pipeline defined by the agreed requirements
wrapped as result pattern, handle errors on higher abstraction level
Parameters
----------
user_img_path : str
file path to the image which is to be analysed
pixels_per_metric_X : float
calibration value for the x axis to measure the size of the electrodes
pixels_per_metric_Y : float
calibration value for the y axis to measure the size of the electrodes
Raises
------
FileNotFoundError
provided image path was not found
"""