From 5603d5f44a700cc3037f7bf8d24c24000dbd3f50 Mon Sep 17 00:00:00 2001 From: Sefik Ilkin Serengil Date: Tue, 16 Apr 2024 20:01:51 +0100 Subject: [PATCH 1/2] face coordinate values casted to int --- deepface/detectors/CenterFace.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deepface/detectors/CenterFace.py b/deepface/detectors/CenterFace.py index a0da43eb..84db3345 100644 --- a/deepface/detectors/CenterFace.py +++ b/deepface/detectors/CenterFace.py @@ -82,10 +82,10 @@ def detect_faces(self, img: np.ndarray) -> List["FacialAreaRegion"]: # mouth_left = (int(landmark[8]), int(landmark [9])) facial_area = FacialAreaRegion( - x=x, - y=y, - w=w, - h=h, + x=int(x), + y=int(y), + w=int(w), + h=int(h), left_eye=left_eye, right_eye=right_eye, confidence=min(max(0, float(confidence)), 1.0), From f6a226eb4c14ee80f51c75aced1b973453ebbe29 Mon Sep 17 00:00:00 2001 From: Sefik Ilkin Serengil Date: Tue, 16 Apr 2024 20:02:08 +0100 Subject: [PATCH 2/2] validate projected coordinates are in the boundaries --- deepface/detectors/DetectorWrapper.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/deepface/detectors/DetectorWrapper.py b/deepface/detectors/DetectorWrapper.py index 33238e64..9a5c11b2 100644 --- a/deepface/detectors/DetectorWrapper.py +++ b/deepface/detectors/DetectorWrapper.py @@ -175,22 +175,30 @@ def rotate_facial_area( # Angle in radians angle = angle * np.pi / 180 + height, weight = size + # Translate the facial area to the center of the image - x = (facial_area[0] + facial_area[2]) / 2 - size[1] / 2 - y = (facial_area[1] + facial_area[3]) / 2 - size[0] / 2 + x = (facial_area[0] + facial_area[2]) / 2 - weight / 2 + y = (facial_area[1] + facial_area[3]) / 2 - height / 2 # Rotate the facial area x_new = x * np.cos(angle) + y * direction * np.sin(angle) y_new = -x * direction * np.sin(angle) + y * np.cos(angle) # Translate the facial area back to the original position - x_new = x_new + size[1] / 2 - y_new = y_new + size[0] / 2 + x_new = x_new + weight / 2 + y_new = y_new + height / 2 - # Calculate the new facial area + # Calculate projected coordinates after alignment x1 = x_new - (facial_area[2] - facial_area[0]) / 2 y1 = y_new - (facial_area[3] - facial_area[1]) / 2 x2 = x_new + (facial_area[2] - facial_area[0]) / 2 y2 = y_new + (facial_area[3] - facial_area[1]) / 2 - return (int(x1), int(y1), int(x2), int(y2)) + # validate projected coordinates are in image's boundaries + x1 = max(int(x1), 0) + y1 = max(int(y1), 0) + x2 = min(int(x2), weight) + y2 = min(int(y2), height) + + return (x1, y1, x2, y2)