第三节基于深度学习的人脸识别
现在读者对图片的数据表示方式以及人脸识别的基本原理已经有所了解。本节利用开源工具来具体实现人脸检测和人脸识别,所用数据可在教材资源平台下载。人脸识别是一个复杂的问题,为了达到一定的准确率,所需的工程量远远不是本教材这一节的内容所能描述的,读者可在实践过程中继续探索。
上一节简单介绍了人脸检测背后的原理,下面首先通过OpenCV来实现人脸检测。
使用以下命令在Python环境中加载OpenCV模块。
In[1]:importcv2
#引入OpenCV模块
In[2]:faceClassifier=cv2。CascadeClassifier('haarcast
alface_default。xml')
#构建OpenCV模块提供的脸部分类器,它用Harr特征检测脸部
In[3]:objImage=cv2。imread('facedetect。jpg')
#读取要进行人脸检测的图片
In[4]:cvtImage=age,cv2。CRAY)
#将图片转化为灰度图像(Gray)
In[5]:foundFaces=faceClassifier。detectMultiSage,sca
&or=1。3,minNeighbors=9,minSize=(50,50),fl
ags=cv2。cv。CV_HAAR_SCALE_IMAGE)
#该命令返回检测到的脸部,每一张检测到的脸都会给出左上角的坐标和脸部
#区域的长和宽。相当于描述了一个方框,将脸部圈起来
In[6]:faumbers=len(foundFaces)
#该命令给出检测到的人脸数量
In[7]:for(x,y,w,h)infoundFaces:
gle(objImage,(x,y),(x+w,y+h),(0,0,255),2)
#该命令按照返回结果画出红框
In[8]:age)
#显示标注脸部识别结果的图片
读者可以灵活运用以上命令,进一步拓展应用场景。例如,利用摄像头实时捕捉人脸并检测,同时还可以将检测到的人脸,利用返回的红框进行截图保留,并使用这些图片进行人脸识别。
人脸识别有很多实现方式,可以完全通过自己编写代码实现识别的全过程,也可以利用已经开源的模块。本书将使用开源的faition模块来实现人脸识别。首先使用如下命令行进行安装。
pipinstallfaition
其实通过如下代码,faition也可以在一张图片中检测人脸个数并圈出人脸,从而实现人脸检测的任务。读者可以对比两种检测方法的性能。
In[1]:impnition
#引入faition模块
fromskimageimportdraw,io
#和前面不同,这里用skimage来显示图像存储图像
In[2]:image=faition。load_image_file('facedetect。
jpg')
#读取要进行人脸检测的图片
Iinitioions(image)
#确定每个人脸的位置,为框出人脸做准备