与图片中的人脸特征点提取差别不大,只需要对摄像头采集到的每一帧图像缓存后进行特征点检测并显示即可。
import cv2
import dlib
#读入摄像头数据
cap=cv2.VideoCapture(0)
#源程序是用sys.argv从命令行参数去获取训练模型,精简版我直接把路径写在程序中了
predictor_path = "shape_predictor_68_face_landmarks.dat"
#使用官方提供的模型构建特征提取器
predictor = dlib.shape_predictor(predictor_path)
#使用dlib自带的frontal_face_detector作为人脸检测器
detector = dlib.get_frontal_face_detector()
while True:
_,frame=cap.read()
dets = detector(frame, 1)
if len(dets) != 0:
shape = predictor(frame, dets[0])
for p in shape.parts():
cv2.circle(frame, (p.x, p.y), 3, (0,0,0), -1)
cv2.imshow('video',frame)
if cv2.waitKey(1)&0xFF==27:
break
cap.release()
cv2.destroyAllWindows()
此程序只能够识别一个人脸,如果要识别多个,则将代码if len(dets) != 0:
改为for i in range(len(dets)):
即可。