1 """Component that will help set the Dlib face detect processing."""
3 from __future__
import annotations
8 import face_recognition
9 import voluptuous
as vol
13 PLATFORM_SCHEMA
as IMAGE_PROCESSING_PLATFORM_SCHEMA,
14 ImageProcessingFaceEntity,
22 _LOGGER = logging.getLogger(__name__)
26 PLATFORM_SCHEMA = IMAGE_PROCESSING_PLATFORM_SCHEMA.extend(
28 vol.Required(CONF_FACES): {cv.string: cv.isfile},
29 vol.Optional(CONF_CONFIDENCE, default=0.6): vol.Coerce(float),
37 add_entities: AddEntitiesCallback,
38 discovery_info: DiscoveryInfoType |
None =
None,
40 """Set up the Dlib Face detection platform."""
43 camera[CONF_ENTITY_ID],
45 camera.get(CONF_NAME),
46 config[CONF_CONFIDENCE],
48 for camera
in config[CONF_SOURCE]
53 """Dlib Face API entity for identify."""
55 def __init__(self, camera_entity, faces, name, tolerance):
56 """Initialize Dlib face identify entry."""
65 self.
_name_name = f
"Dlib Face {split_entity_id(camera_entity)[1]}"
68 for face_name, face_file
in faces.items():
70 image = face_recognition.load_image_file(face_file)
71 self.
_faces_faces[face_name] = face_recognition.face_encodings(image)[0]
72 except IndexError
as err:
73 _LOGGER.error(
"Failed to parse %s. Error: %s", face_file, err)
79 """Return camera entity id from process pictures."""
84 """Return the name of the entity."""
85 return self.
_name_name
90 fak_file = io.BytesIO(image)
91 fak_file.name =
"snapshot.jpg"
94 image = face_recognition.load_image_file(fak_file)
95 unknowns = face_recognition.face_encodings(image)
98 for unknown_face
in unknowns:
99 for name, face
in self.
_faces_faces.items():
100 result = face_recognition.compare_faces(
101 [face], unknown_face, tolerance=self.
_tolerance_tolerance
104 found.append({ATTR_NAME: name})
def __init__(self, camera_entity, faces, name, tolerance)
def process_image(self, image)
None process_faces(self, list[FaceInformation] faces, int total)
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)