feat: fully working face detection

ref: N25B-397
This commit is contained in:
JobvAlewijk
2026-01-07 17:56:21 +01:00
parent b8f71f6bee
commit 3b470c8f29
4 changed files with 75 additions and 63 deletions

View File

@@ -4,6 +4,7 @@ from robot_interface.endpoints.receiver_base import ReceiverBase
from robot_interface.state import state
from robot_interface.core.config import settings
from robot_interface.endpoints.face_detector import FaceDetectionSender
class MainReceiver(ReceiverBase):
@@ -36,6 +37,29 @@ class MainReceiver(ReceiverBase):
:rtype: dict[str, str | list[dict]]
"""
return {"endpoint": "ping", "data": message.get("data")}
@staticmethod
def _handle_face(message):
"""
Handles sending face data to the cb
Sends if it sees a face or not
:param message: face data.
:type message: int
:return: A response to CB containing the amount of faces
:rtype: int
"""
# Poll the FaceDetectionSender status
face_sender = next(
(s for s in state.sockets if isinstance(s, FaceDetectionSender)),
None
)
if face_sender:
return {"endpoint": "face", "data": face_sender.face_detected}
else:
return {"endpoint": "face", "data": False}
@staticmethod
def _handle_port_negotiation(message):
@@ -86,6 +110,8 @@ class MainReceiver(ReceiverBase):
"""
if message["endpoint"] == "ping":
return self._handle_ping(message)
elif message["endpoint"] == "face":
return self._handle_face(message)
elif message["endpoint"].startswith("negotiate"):
return self._handle_negotiation(message)