阅读量:0
新书速览|PyTorch深度学习与企业级项目实战-CSDN博客
人脸检测解决的问题是确定一幅图上有没有人脸,而人脸识别解决的问题是这张脸是谁的。可以说人脸检测是人脸识别的前期工作。这里介绍Dlib库,它提供了Python接口,里面有人脸检测器,有训练好的人脸关键点检测器。
安装OpenCV,可以通过下载OpenCV的.whl文件,使用pip install opencv_python-3.4.0-cp36-
cp36m-win_amd64.whl命令来安装。如果import cv2报错ImportError: numpy.core.multiarray failed to import,出现这个问题的解决方法是下载最新版本的NumPy,解决方法是输入命令pip install numpy -–upgrade,结果如图11-3所示表示成功解决。
图11-3
进行实时图像捕获,首先需要学点OpenCV的基础知识,起码知道如何从摄像头获取当前拍到的图像。本项目使用Dlib库,Dlib库提供的功能十分丰富,它提供了Python接口,里面有人脸检测器,也有训练好的人脸关键点检测器。
程序代码如下:
##########实时检测视频中的人脸############################### import cv2 import dlib predictor_path = ".\shape_predictor_68_face_landmarks.dat" #使用dlib自带的frontal_face_detector作为人脸检测器 detector = dlib.get_frontal_face_detector() # 使用官方提供的模型构建特征提取器 predictor = dlib.shape_predictor(predictor_path) #初始化窗口 win = dlib.image_window() cap = cv2.VideoCapture(0) #获取摄像头 while cap.isOpened(): #读取摄像头的图像,函数 isOpened用于判断摄像头是否开启 ok,cv_img = cap.read() img = cv2.cvtColor(cv_img, cv2.COLOR_RGB2BGR) #转灰度化,简化图像信息 # 与人脸检测程序相同,使用detector进行人脸检测,dets为返回的结果 dets = detector(img, 0) shapes =[] if cv2.waitKey(1) & 0xFF == ord('q'): print("q pressed") break else: # 使用enumerate 函数遍历序列中的元素以及它们的下标 # 下标k即为人脸序号 for k, d in enumerate(dets): # 使用predictor进行人脸关键点识别, shape为返回的结果 shape = predictor(img, d) #绘制特征点 for index, pt in enumerate(shape.parts()): pt_pos = (pt.x, pt.y) cv2.circle(img, pt_pos, 1, (0,225, 0),2) #利用cv2.putText输出1-68 font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img, str(index+1),pt_pos,font, 0.3, (0, 0, 255), 1, cv2.LINE_AA) win.clear_overlay() win.set_image(img) if len(shapes)!= 0 : for i in range(len(shapes)): win.add_overlay(shapes[i]) win.add_overlay(dets) cap.release() cv2.destroyAllWindows()
运行结果如图11-4所示。
图11-4
《PyTorch深度学习与企业级项目实战(人工智能技术丛书)》(宋立桓,宋立林)【摘要 书评 试读】- 京东图书 (jd.com)