其他分享
首页 > 其他分享> > dlib读取68个人脸特征点

dlib读取68个人脸特征点

作者:互联网

在这里插入图片描述
可以读取到人脸上的68个特征点,可以利用这些特征点做点有意思的事

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 14 16:49:37 2021

@author: yuyanchuan
"""


import dlib
import cv2
import os

predictor_path='shape_predictor_68_face_landmarks.dat'

detector=dlib.get_frontal_face_detector()

sp=dlib.shape_predictor(os.path.join("F:\code\Pythoncode\dlib\shape_predictor_68_face_landmarks",predictor_path))

point_size = 1
point_color = (0, 0, 255) # BGR
thickness = 4 # 可以为 0 、4、8

cap=cv2.VideoCapture(0)

while True:
    #ret,frame=cap.read()
    frame=cv2.imread("gyy1.png")
    #if not cap.isOpened():
        #print("打开摄像头")
    dets=detector(frame,1)
    img=frame.copy()
    print(frame.shape)
    num_faces=len(dets)
    
    if num_faces==0:
        print("没有发现人脸")
    cv2.putText(frame,'faces:{}'.format(num_faces),(10,30),cv2.FONT_HERSHEY_PLAIN,2,(0,0,255),2)
    faces=dlib.full_object_detections()
    for k,d in  enumerate(dets):
        faces.append(sp(frame,d))
        print(d.left())
        #cv2.rectangle(frame,(d.left(),d.top()),(d.right(),d.bottom()),[0,255,0],3)
        shape = sp(frame, d)
        for index, pt in enumerate(shape.parts()):
            pt_pos=(pt.x,pt.y)
            cv2.circle(frame, pt_pos, point_size, point_color, thickness)
            #利用cv2.putText输出1-68
            font = cv2.FONT_HERSHEY_SIMPLEX
            cv2.putText(frame, str(index+1),pt_pos,font, 0.3, (0, 0, 255), 1, cv2.LINE_AA)
    
    
    cv2.putText(frame,'press ESC quit',(10,450),cv2.FONT_HERSHEY_PLAIN,2,(0,0,255),2)    
    cv2.imshow('image',frame)
    

    if cv2.waitKey(10) == 27:
        break
    
cv2.destroyAllWindows()

        

标签:读取,pt,frame,cv2,shape,faces,68,dlib
来源: https://blog.csdn.net/yuyanchuan/article/details/112641304