PyImageSearch / imutils

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.
MIT License
4.51k stars 1.03k forks source link

fix 5-landmark dlib eye points #249

Open goigle opened 3 years ago

goigle commented 3 years ago

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]

Here's a chart showing the proper indexes for dlib's 5 and 68 face landmark models

ariG23498 commented 2 years ago

Hey @goigle

Thanks for the PR! We are looking into this 😄