人脸识别实战
使用Python进行人脸识别
人脸图片数据收集
Olivetti Faces人脸数据集
我以纽约大学提供的一个非常小的人脸数据集举例,每人的人脸图片为10张,清晰度还算不错,且图片为经过剪裁和对齐的灰度人脸图片,下载网址
想要收集数据,我们首先要做的就是对每个人的人脸图片进行切分。代码实例如下:
1 | import cv2 |
LFW人脸数据集
由马萨诸塞大学提供,LFW人脸数据集
YouTube Faces人脸数据集
这个一般是用来做人脸对比的,该网站包含1595个不同的人,来自于3425个在YouTube上下载的视频,网址地址:YouTube Faces
使用OpenCV的人脸检测
OpenCV的安装
在Python中直接用pip下载
pip install opencv-python
如果是在anaconda环境中安装OpenCV,可以通过以下方法:
conda install opencv
OpenCV的检测
#查看引入OpenCV库时会不会报错
import cv2
#查看安装版本
cv2.__version__
Haar级联分类器
在此之前需要先下载两个训练好的xml文件
,可以在GitHub中下载将下载的文件放到和运行脚本同一个文件就可以了。
如果你没有放对xml,就会出现以下错误提示:errror:(-215)!......
获得训练好的模型之后,就可以根据这个模型进行人脸识别了,完整代码如下:
import cv2
#创建人脸检测级联分类器对象实例
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#或采用lbp特征进行检测
#face_cascade = cv2.CascadeClassifier('lbpcascade_frontalface.xml')
#创建人眼检测级联分类的实例
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
#载入图片
img = cv2.imread('lena.jpg')
#图片颜色意义不大,灰度化处理即可
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#调用级联分类器进行多尺度检测
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#遍历检测到的结果
for (x,y,w,h) in faces:
#检测矩形框,颜色值的顺序为BGR,即矩阵的颜色为蓝色
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#roi即region of interest, 意思是感兴趣的领域
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
#在检测到的人脸区域内检测眼睛
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
#写出图片
cv2.imwrite('detected_face.jpg',img)
使用Dlib的人脸检测
Dlib自带了基于Hog特征的人脸检测器,同时在较新版本的Dlib 中,也自带了基于最大边界对象检测器 (Maximum-Margin Object Detector,MMOD)的人脸检测方法。
基于Hog-SVM的人脸检测
下面示范一下使用 Dlib 自带的 Hog-SVM 人脸检测器的使用方法:
import dlib
import cv2
img = cv2 .imread('lena.jpg')
# 加载检测模型
hog_face_detector = dlib.get_frontal_face_detector()
faceRects = hog_face_detector(img,0)
for faceRect in faceRects:
xl = faceRect.left ()
y1 = faceRect.top()
x2 = faceRect.right ()
y2 = faceRect.bottom()
上述代码需要下载Dlib训练好的检测模型,[官方地址](htp://dlib. net/files/data/dlib_face_detector_training_data. tar. gz)