Spaces:
Sleeping
Sleeping
| import cv2 | |
| import numpy as np | |
| from ml_utils.confidence import EDGE_MAX | |
| def edge_inconsistency_score(image_bgr: np.ndarray) -> tuple[float, list[str]]: | |
| flags = [] | |
| gray = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2GRAY) | |
| h, w = gray.shape | |
| block = 48 | |
| densities = [] | |
| for y in range(0, h - block, block): | |
| for x in range(0, w - block, block): | |
| patch = gray[y : y + block, x : x + block] | |
| edges = cv2.Canny(patch, 50, 150) | |
| densities.append(float(np.mean(edges > 0))) | |
| if len(densities) < 2: | |
| return EDGE_MAX * 0.5, flags | |
| std_d = float(np.std(densities)) | |
| if std_d > 0.12: | |
| flags.append("EDGE_INCONSISTENCY") | |
| score = max(5.0, EDGE_MAX - std_d * 100) | |
| else: | |
| score = (EDGE_MAX - 5.0) + (0.12 - std_d) * 33 | |
| return float(np.clip(score, 0, EDGE_MAX)), flags | |