сохранить изображение с ориентирами лица, используя dlib в python? - PullRequest
0 голосов
/ 04 февраля 2019

Есть ли способ сохранить изображение с наложением лицевых ориентиров с помощью dlib, используя python?Потому что я нашел только функцию draw_rectangle, которая предназначена для c ++!

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вот как это работает для меня.

.....................
shape = predictor(img, d)
vec= np.empty([68,2], dtype=int)
for b in range(68):
    vec[b][0] = shape.part(b).x
    vec[b][1] = shape.part(b).y

 landmarks_img=annotate_landmarks(img,vec)
 cv2.imwrite("landmarked-"+os.path.basename(f),landmarks_img) #save image

, где я внес это изменение в annotate_landmarks ()

pos = (point[0], point[1])

вместо:

pos = (point[0, 0], point[0, 1])
0 голосов
/ 05 февраля 2019

После получения точек на лице, вы можете нарисовать его на исходном изображении, например:

def annotate_landmarks(im, landmarks):
    CIRCLE_SIZE = 1
    FONT_SCALE = 1
    THICKNESS_S = 1
    im = im.copy()
        #0-16: head
    for idx, point in enumerate(landmarks[0:17]):
        pos = (point[0, 0], point[0, 1])
        #cv2.putText(im, str(idx), pos, fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, fontScale=FONT_SCALE, color=(0, 0, 255))
        cv2.circle(im, pos, CIRCLE_SIZE, color=(255, 0, 0), thickness=THICKNESS_S)

    #17-21: left eye brow
    #22-26: right eye brow
    for idx, point in enumerate(landmarks[17:27]):
        pos = (point[0, 0], point[0, 1])
        #cv2.putText(im, str(idx), pos,fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale=FONT_SCALE,color=(0, 0, 255))
        cv2.circle(im, pos, CIRCLE_SIZE, color=(0, 255, 0), thickness=THICKNESS_S)

    #27-35: nose
    for idx, point in enumerate(landmarks[27:36]):
        pos = (point[0, 0], point[0, 1])
        #cv2.putText(im, str(idx), pos,fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale=FONT_SCALE,color=(0, 0, 255))
        cv2.circle(im, pos, CIRCLE_SIZE, color=(0, 0, 255), thickness=THICKNESS_S)

    #36-41: left eye
    #42-47: right eye
    for idx, point in enumerate(landmarks[36:48]):
        pos = (point[0, 0], point[0, 1])
        #cv2.putText(im, str(idx), pos,fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale=FONT_SCALE,color=(0, 0, 255))
        cv2.circle(im, pos, CIRCLE_SIZE, color=(0, 255, 255), thickness=THICKNESS_S)

    #48-68: lips
    for idx, point in enumerate(landmarks[48:68]):
        pos = (point[0, 0], point[0, 1])
        #cv2.putText(im, str(idx), pos,fontFace=cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,fontScale=FONT_SCALE,color=(0, 0, 255))
        cv2.circle(im, pos, CIRCLE_SIZE, color=(255, 0, 255), thickness=THICKNESS_S)
    return im
...