anomaly-detection / predict.py
KB Teo
Update interface
d866b52
raw
history blame
1.35 kB
from typing import *
from pathlib import Path
import cv2
from inference.openvino import OpenVINOInferencer
import numpy as np
inferencer = None
last_model_path: str = None
def predict_openvino(
image: Union[str, Path, np.ndarray],
model_path: Union[str, Path],
device: str,
threshold: float) -> Dict[str, np.ndarray]:
global inferencer, last_model_path
if not isinstance(inferencer, OpenVINOInferencer) or last_model_path != str(model_path):
inferencer = OpenVINOInferencer(
path = model_path,
device=device.upper()
)
last_model_path = str(model_path)
inferencer.metadata["pixel_threshold"] = threshold
return inferencer(image)
def draw_contour(image, mask, color=(255,0,0), thickness=3):
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
return cv2.drawContours(image.copy(), contours, -1, color, thickness)
def convert_to_heatmap(heatmap):
heatmap = cv2.applyColorMap((heatmap*255).astype("uint8"), cv2.COLORMAP_HSV)
return heatmap
def predict_fn(image, threshold, device, model_dir):
outputs = predict_openvino(image, model_dir, device, threshold)
out_image = draw_contour(image, outputs["pred_mask"])
heatmap = convert_to_heatmap(outputs["anomaly_map"])
return out_image, heatmap