Skip to content

Commit a3efd50

Browse files
authored
Merge pull request #1275 from roflcoopter/feature/dlib-reload
feat(dlib): support config reload
2 parents 22e3949 + e99135e commit a3efd50

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

viseron/components/dlib/__init__.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""Dlib face recognition."""
2+
23
import logging
34
import os
5+
from typing import Any
46

57
import voluptuous as vol
68

@@ -54,18 +56,18 @@ def get_default_model() -> str:
5456
)
5557

5658

57-
def setup(vis: Viseron, _config) -> bool:
59+
def setup(vis: Viseron, _config: dict[str, Any]) -> bool:
5860
"""Set up the dlib component."""
5961
vis.data[COMPONENT] = {}
6062
return True
6163

6264

63-
def setup_domains(vis: Viseron, config) -> None:
65+
def setup_domains(vis: Viseron, config: dict[str, Any]) -> None:
6466
"""Set up dlib domains."""
6567
config = config[COMPONENT]
6668

6769
if config.get(CONFIG_FACE_RECOGNITION, None):
68-
for camera_identifier in config[CONFIG_FACE_RECOGNITION][CONFIG_CAMERAS].keys():
70+
for camera_identifier in config[CONFIG_FACE_RECOGNITION][CONFIG_CAMERAS]:
6971
setup_domain(
7072
vis,
7173
COMPONENT,
@@ -83,3 +85,9 @@ def setup_domains(vis: Viseron, config) -> None:
8385
),
8486
],
8587
)
88+
89+
90+
def unload(vis: Viseron) -> None:
91+
"""Unload dlib component."""
92+
if COMPONENT in vis.data:
93+
del vis.data[COMPONENT]

viseron/components/dlib/face_recognition.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
"""dlib face recognition."""
2+
23
from __future__ import annotations
34

45
import logging
56
import threading
6-
from typing import TYPE_CHECKING
7-
8-
import numpy as np
7+
from typing import TYPE_CHECKING, Any
98

109
from viseron.domains.face_recognition import AbstractFaceRecognition
1110
from viseron.domains.face_recognition.const import CONFIG_FACE_RECOGNITION_PATH
@@ -16,6 +15,9 @@
1615
from .train import train
1716

1817
if TYPE_CHECKING:
18+
import numpy as np
19+
from sklearn.neighbors import KNeighborsClassifier
20+
1921
from viseron import Viseron
2022
from viseron.domains.object_detector.detected_object import DetectedObject
2123
from viseron.domains.post_processor import PostProcessorFrame
@@ -25,7 +27,7 @@
2527
TRAIN_LOCK = threading.Lock()
2628

2729

28-
def setup(vis: Viseron, config, identifier) -> bool:
30+
def setup(vis: Viseron, config: dict[str, Any], identifier: str) -> bool:
2931
"""Set up the dlib face_recognition domain."""
3032
with TRAIN_LOCK:
3133
if not vis.data[COMPONENT].get(CLASSIFIER, None):
@@ -45,13 +47,19 @@ def setup(vis: Viseron, config, identifier) -> bool:
4547
class FaceRecognition(AbstractFaceRecognition):
4648
"""dlib face recognition processor."""
4749

48-
def __init__(self, vis: Viseron, config, camera_identifier, classifier) -> None:
50+
def __init__(
51+
self,
52+
vis: Viseron,
53+
config: dict[str, Any],
54+
camera_identifier: str,
55+
classifier: KNeighborsClassifier,
56+
) -> None:
4957
super().__init__(
5058
vis, COMPONENT, config[CONFIG_FACE_RECOGNITION], camera_identifier
5159
)
5260
self._classifier = classifier
5361

54-
def preprocess(self, frame) -> np.ndarray:
62+
def preprocess(self, frame: np.ndarray) -> np.ndarray:
5563
"""Preprocess frame."""
5664
return frame
5765

0 commit comments

Comments
 (0)