Implement multi-model detection in HVideoTool: updated the detection system to support multiple YOLO models simultaneously, enhancing detection capabilities. Reflected changes in the UI with a new model selection menu and updated documentation in README and CLAUDE.md to guide users on model management and configuration.

This commit is contained in:
Leonid Pershin
2026-06-07 07:05:50 +03:00
parent ac02ca27a8
commit 0996ca7bb9
14 changed files with 353 additions and 156 deletions
+9 -3
View File
@@ -34,8 +34,11 @@ def _name_to_type(name: str) -> CensorType:
class YoloDetector(Detector):
def __init__(self, model_path: str, config: DetectionConfig | None = None) -> None:
def __init__(
self, model_path: str, config: DetectionConfig | None = None, label: str = ""
) -> None:
self.cfg = config or DetectionConfig()
self._label = label # category (models/yolo/<label>) tagged onto every detection
if not os.path.isfile(model_path):
raise FileNotFoundError(
f"Файл весов не найден: {model_path}\n"
@@ -71,7 +74,8 @@ class YoloDetector(Detector):
@property
def name(self) -> str:
return f"YoloDetector(device={self._device})"
tag = f", {self._label}" if self._label else ""
return f"YoloDetector(device={self._device}{tag})"
def detect(self, frame: Frame) -> list[Detection]:
results = self._model.predict(
@@ -103,5 +107,7 @@ class YoloDetector(Detector):
if polygons is not None and i < len(polygons):
poly = [(int(px), int(py)) for px, py in polygons[i]]
ctype = _name_to_type(names.get(int(classes[i]), ""))
out.append(Detection(type=ctype, score=float(confs[i]), bbox=bbox, polygon=poly))
out.append(Detection(
type=ctype, score=float(confs[i]), bbox=bbox, polygon=poly, label=self._label
))
return out