python dlib opencv 人脸68点特征检测
不得不感慨,现在现成的东西太多了,直接拿来用就行了
dlib安装(指定版本安装,避免踩坑)
pip install dlib==19.7.0
dlib中训练好的文件http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
下载解压到项目中
代码
1 import numpy as np 2 import cv2 as cv 3 import dlib 4 5 detector = dlib.get_frontal_face_detector() 6 predictor = dlib.shape_predictor('dlib/shape_predictor_68_face_landmarks.dat') 7 8 9 def Detect_face(camera_idx): 10 # camera_idx: 电脑自带摄像头或者usb摄像头 11 cv.namedWindow('detect') 12 cap = cv.VideoCapture(camera_idx) 13 14 while cap.isOpened(): 15 cv.namedWindow('detect', cv.WINDOW_AUTOSIZE) 16 ok, frame = cap.read() 17 # frame = cv.flip(frame, 1, dst=None) 18 if not ok: 19 break 20 gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) 21 rects = detector(gray, 0) 22 for i in range(len(rects)): 23 landmarks = np.matrix([[p.x, p.y] for p in predictor(frame, rects[i]).parts()]) 24 for idx, point in enumerate(landmarks): 25 pos = (point[0, 0], point[0, 1]) 26 # print(idx, pos) 27 cv.circle(frame, pos, 1, color=(0, 255, 0)) 28 font = cv.FONT_HERSHEY_SIMPLEX 29 cv.putText(frame, str(idx + 1), pos, font, 0.4, (0, 255, 255), 1, cv.LINE_AA) 30 cv.imshow('detect', frame) 31 c = cv.waitKey(10) 32 if c & 0xFF == ord('q'): 33 break 34 cap.release() 35 cv.destroyAllWindows() 36 37 38 if __name__ == '__main__': 39 Detect_face(0)
效果图
真好使啊~~~