申明:本系列专栏相关说明与镜像包、源码等:
塔图:Page00-本系列实验记录说明一、人脸检测(后续有时间再补录个操作视频吧)
人脸识别的先决在于先进行人脸检测。
先按本文档的前置章节在Python3.7环境下的安装”完成了环境的搭建工作;
本文主要讲述如何使用 USB-PiCam 实现实时人脸识别:
最常见的人脸检测方式是使用“Haar 级联分类器”。使用基于 Haar 特征的级联分类器的目标检测是 Paul Viola 和 Michael Jones 2001 年在论文《Rapid Object Detection using a Boosted Cascade of Simple Features》中提出的一种高效目标检测方法。这种机器学习方法基于大量正面、负面图像训练级联函数,然后用于检测其他图像中的对象。这里,我们将用它进行人脸识别。最初,该算法需要大量正类图像(人脸图像)和负类图像(不带人脸的图像)来训练分类器。然后我们需要从中提取特征。好消息是 OpenCV 具备训练器和检测器。如果你想要训练自己的对象分类器,如汽车、飞机等,你可以使用 OpenCV 创建一个。
如果不想创建自己的分类器,OpenCV 也包含很多预训练分类器,可用于人脸、眼睛、笑容等的检测。相关的 XML 文件可从该目录下载:haarcascades(在opencv的安装包里data目录下就有,当然下载地址为:/opencv/opencv/tree/master/data/haarcascades)
即要检测一张图片需要扫描大于120万个窗口
运行以下代码:
import numpy as npimport cv2faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')cap = cv2.VideoCapture(0)cap.set(3,640) # set Widthcap.set(4,480) # set Heightwhile True:ret, img = cap.read()img = cv2.flip(img, -1)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = faceCascade.detectMultiScale(gray, scaleFactor=1.2,minNeighbors=5, minSize=(20, 20))for (x,y,w,h) in faces:cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)roi_gray = gray[y:y+h, x:x+w]roi_color = img[y:y+h, x:x+w]cv2.imshow('video',img)k = cv2.waitKey(30) & 0xffif k == 27: # press 'ESC' to quitbreakcap.release()cv2.destroyAllWindows()
可以进行人脸检测了:
使用 Python 和 OpenCV 执行人脸检测,上面的几行代码就足够了。但务必要注意下面的代码:
faceCascade = cv2.CascadeClassifier(‘Cascades/haarcascade_frontalface_default.xml’) #找对目录
我们也可以加入诸如“眼睛检测”甚至“微笑检测”这样的检测器。在那些用例中,需要把分类器函数和矩形框内加入原有的面部识别区域中,因为在区域外进行识别没有意义。
注意,在树莓派上,分类方法(HaarCascades)会消耗大量算力,所以在同一代码中使用多个分类器将会显著减慢处理速度。在台式机上运行这些算法则非常容易。
在 GitHub(/Mjrovai/OpenCV-Face-Recognition/tree/master/FaceDetection)上你可以看到其他的例子:
faceEyeDetection.pyfaceSmileDetection.pyfaceSmileEyeDetection.py
(运行速度太慢,非常的卡顿)
二、人脸识别(后续有时间再补录个操作视频吧)
参考文档:/archives/1435 (从第5步开始,完全正确,亲测可用)
这里我训练时,用了赵丽颖与杨紫,总地来说,开源库的分辨能力,尚可吧。
如果是真人出镜,效果会明显好得很多。