引言
Python之父Guido
他的个人页面:Guido's Personal Home Page
本次课开始学习利用OpenCV、Dlib、Face-Recognition进行人脸识别
三步:定位,对齐,识别
1.使用OpenCV定位多个人脸
import cv2
import os
import matplotlib.pyplot as plt
os.chdir('D:\python\Lib\site-packages\cv2') #改变当前工作目录到指定的路径(分类器文件夹位置)
def detect(filename):
face_cascade = cv2.CascadeClassifier('D:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')
img = cv2.imread(filename) #图片放在和.py一个文件夹里,即cv2文件夹
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将BGR图片转换为灰度图像再用已有的分类器模型识别人脸
faces = face_cascade.detectMultiScale(gray,1.3,5)
for (x, y, w, h) in faces:
img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
plt.imshow(img)
plt.axis('off')
plt.show()
detect('face.jpg')
①关于os.getcwd()和os.chdir()
os.getcwd() 获得当前的路径
需要说明的是,当前目录并不是指脚本所在的目录,而是所运行脚本的目录。
>>>import os
>>>print os.getcwd()
D:\Program Files\Python27
这里的目录即是python的安装目录。若把上面的两行语句保存为getcwd.py,保存于E:\python\盘,运行后显示是E:\python
os.chdir() 修改当前工作目录到指定的路径
os.chdir( path )
path – 要切换到的新路径
②生成结果
2.使用Face-recognition提高精确度
face_recognition依赖于dlib,dlib依赖于openCV
安装包下载链接: https://pypi.org/project
Built using dlib’s state-of-the-art face recognition built with deep learning. The model has an accuracy of 99.38% on the Labeled Faces in the Wild benchmark.
import face_recognition
image=face_recognition.load_image_file("photo.jpg")
face_locations=face_recognition.face_locations(image)
face_num2=len(face_locations)
print(face_num2)#The number of faces
org=cv2.imread("photo.jpg")
for i in range(0,face_num2):
top=face_locations[i][0]
right=face_locations[i][1]
bottom=face_locations[i][2]
left=face_locations[i][3]
start=(left,top)
end=(right,bottom)
color=(255,0,0)
thickness=5
img=cv2.rectangle(org,start,end,color,thickness) # opencv 里面画矩形的函数
plt.imshow(img)
plt.axis('off')
plt.show()
生成结果
3.使用深度学习更加精确的CNN(卷积神经网络)
人脸检测模型默认使用HOG算法,也可以使用CNN。
hog在cpu上的准确性较低,但速度更快。cnn是一个更精确的深度学习模型。
import face_recognition
import cv2
import matplotlib.pyplot as plt
image = face_recognition.load_image_file("photo.jpg")
face_locations_useCNN = face_recognition.face_locations(image,model='cnn')
face_num1=len(face_locations_useCNN)
print(face_num1) # The number of faces
org = cv2.imread("photo.jpg")
for i in range(0,face_num1):
top = face_locations_useCNN[i][0]
right = face_locations_useCNN[i][1]
bottom = face_locations_useCNN[i][2]
left = face_locations_useCNN[i][3]
start = (left, top)
end = (right, bottom)
color = (0,255,255)
thickness = 2
img=cv2.rectangle(org, start, end, color, thickness)
plt.imshow(img)
plt.axis('off')
plt.show()
①理解HOG和CNN
HOG是目前计算机视觉、模式识别领域很常用的一种描述图像局部纹理的特征。在一副图像中,局部目标的表象和形状能够被梯度或边缘的方向密度分布很好地描述。
CNN(卷积神经网络)是所有深度学习课程、书籍必教的模型,CNN在影像识别方面的为例特别强大,许多影像识别的模型也都是以CNN的架构为基础去做延伸。
②生成结果