Skip to content

Commit

Permalink
Merge pull request serengil#801 from AnthraX1/fixyunet
Browse files Browse the repository at this point in the history
Fix yunet return negative coordinates
  • Loading branch information
serengil committed Jul 26, 2023
2 parents 1321435 + 9bf9542 commit 95d0eed
Showing 1 changed file with 21 additions and 14 deletions.
35 changes: 21 additions & 14 deletions deepface/detectors/YunetWrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@


def build_model():
url = (
"https://github.com/opencv/opencv_zoo/raw/main/models/"
+ "face_detection_yunet/face_detection_yunet_2023mar.onnx"
)
# pylint: disable=C0301
url = "https://github.com/opencv/opencv_zoo/raw/main/models/face_detection_yunet/face_detection_yunet_2023mar.onnx"
file_name = "face_detection_yunet_2023mar.onnx"
home = functions.get_deepface_home()
if os.path.isfile(home + f"/.deepface/weights/{file_name}") is False:
Expand Down Expand Up @@ -44,17 +42,26 @@ def detect_face(detector, image, align=True, score_threshold=0.9):
if faces is None:
return resp
for face in faces:
# The detection output faces is a two-dimension array of type CV_32F,
# whose rows are the detected face instances,
# columns are the location of a face and 5 facial landmarks.
# The format of each row is as follows:
# x1, y1, w, h, x_re, y_re, x_le, y_le, x_nt, y_nt, x_rcm, y_rcm, x_lcm, y_lcm,
# where x1, y1, w, h are the top-left coordinates,
# width and height of the face bounding box,
# {x, y}_{re, le, nt, rcm, lcm} stands for the coordinates of
# right eye, left eye, nose tip, the right corner and left corner
# of the mouth respectively.
# pylint: disable=W0105
"""
The detection output faces is a two-dimension array of type CV_32F,
whose rows are the detected face instances, columns are the location
of a face and 5 facial landmarks.
The format of each row is as follows:
x1, y1, w, h, x_re, y_re, x_le, y_le, x_nt, y_nt,
x_rcm, y_rcm, x_lcm, y_lcm,
where x1, y1, w, h are the top-left coordinates, width and height of
the face bounding box,
{x, y}_{re, le, nt, rcm, lcm} stands for the coordinates of right eye,
left eye, nose tip, the right corner and left corner of the mouth respectively.
"""
(x, y, w, h, x_re, y_re, x_le, y_le) = list(map(int, face[:8]))

# Yunet returns negative coordinates if it thinks part of
# the detected face is outside the frame.
# We set the coordinate to 0 if they are negative.
x = max(x, 0)
y = max(y, 0)
if resized:
image = original_image
x, y, w, h = int(x / r), int(y / r), int(w / r), int(h / r)
Expand Down

0 comments on commit 95d0eed

Please sign in to comment.