A series of convenience functions to make basic image processing operations such as translation, rotation, resizing, skeletonization, and displaying Matplotlib images easier with OpenCV and Python.
Currently, the points for the 5 landmark dlib model are wrong. The range uses 1 point for each eye, when it should be two points. The range for dlib 68 for the eyes are 36-42 (6 pts) and 42-48 (6pts). For dlib 5, it's 0-1 (1pt) and 2-3 (1pt) respectively. Changing the range to 0-2 and 2-4 correctly gives 2 pts for each eye and allows properly calculating the centerpoint of the eye.
This fix makes the face aligner work identically for both dlib models, like intended:
if (len(shape)==68):
# extract the left and right eye (x, y)-coordinates
(lStart, lEnd) = FACIAL_LANDMARKS_68_IDXS["left_eye"]
(rStart, rEnd) = FACIAL_LANDMARKS_68_IDXS["right_eye"]
else:
(lStart, lEnd) = FACIAL_LANDMARKS_5_IDXS["left_eye"]
(rStart, rEnd) = FACIAL_LANDMARKS_5_IDXS["right_eye"]
leftEyePts = shape[lStart:lEnd]
rightEyePts = shape[rStart:rEnd]
Currently, the points for the 5 landmark dlib model are wrong. The range uses 1 point for each eye, when it should be two points. The range for dlib 68 for the eyes are 36-42 (6 pts) and 42-48 (6pts). For dlib 5, it's 0-1 (1pt) and 2-3 (1pt) respectively. Changing the range to 0-2 and 2-4 correctly gives 2 pts for each eye and allows properly calculating the centerpoint of the eye.
This fix makes the face aligner work identically for both dlib models, like intended:
Here's a chart showing the proper indexes for dlib's 5 and 68 face landmark models