首页 理论教育 Python人脸识别编程,OpenCV应用广泛

Python人脸识别编程,OpenCV应用广泛

时间:2023-11-08 理论教育 版权反馈
【摘要】:在引入OpenCV库之后,采用Python编码,只用十几行代码就可以完成一个人脸识别的程序。OpenCV在人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析以及汽车安全驾驶方面获得了广泛应用。级联分类器本节的图像识别采用级联分类器进行。

Python人脸识别编程,OpenCV应用广泛

强大的计算机视觉库OpenCV

如果说从前面的数字识别中,我们窥探到了图像识别的一点奥秘的话,那么通过下面的这个例子,我们将领略到图像识别的有趣之处。在引入OpenCV库之后,采用Python编码,只用十几行代码就可以完成一个人脸识别的程序。

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++类构成,同时提供了Python、Ruby、MATLAB等语言接口,实现了图像处理和计算机视觉方面的很多通用算法

OpenCV在人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析以及汽车安全驾驶方面获得了广泛应用。

级联分类器

本节的图像识别采用级联分类器进行。级联分类器是由Paul Viola在2001年提出的,后经过Rainer Lienhart等人改进。OpenCV实现的级联分类器也是Rainer的改进版本,这种分类器的核心是多个分类器串联起来使用,将某项图像平滑窗(在整个图像上用窗口取得部分图像)检测到的特征值依次送入这些分类器并进行判断,如果判断都为正标签(检测到该目标),则表示在该平滑窗内检测到目标。如果有一个分类器拒绝,则转而处理下一个平滑窗,这样就会有较快的检测速度。

级联分类器

这里所用到的特征中最主要的是Haar-like特征,其可以分为4类:线性特征、边缘特征、点特征(中心特征)、对角线特征。Haar特征值反映了图像的灰度变化情况。脸部的一些特征能由矩形特征简单描述,例如,眼睛比脸颊颜色深,鼻梁两侧比鼻梁颜色深,嘴比其周围皮肤颜色深等。

基于Python的人脸识别

采用Python进行人脸识别程序的设计,包括以下几个步骤:第一步是准备好相应的计算机视觉处理库、科学计算库、图形库、人工智能库等;第二步是准备好数据;第三步是准备好相应模型;第四步是进行训练和预测。这里由于采用了OpenCV中已经训练好的人脸检测模型haarcascade_frontalface_default.xml,因此在下面的例子中,直接就进行图像的目标检测工作。

级联分类器的detectMultiScale()函数用于多尺度检测,即通过不断缩放图片大小,并采用滑动窗搜索方式,使之与搜索目标的模板相匹配,并将不同尺度下的匹配结果进行合并。detectMultiScale()函数的主要参数有:image为待检测图片,采用灰度图像可加快检测速度;scaleFactor为图像的缩放因子,表示在前后两次相继的扫描中搜索窗口的比例系数,默认为1.1,即每次搜索窗口依次扩大10%;minNeighbors表示构成检测目标的相邻矩形的最小个数(默认为3个),可以理解为一个人周边有几个人脸,如果组成检测目标的小矩形的个数和小于 min_neighbors-1,则会被排除;minSize和maxSize用来限制得到的目标区域的范围,minSize用来检测窗口的大小。这些参数都是可以针对图片进行调整的,处理结果为返回一个人脸的矩形对象列表。

本程序参考https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html。

----------------------part 1 导入相关库----------------------

#需要安装OpenCV,可以在cmd窗口通过pip install opencvpython指令进行安装

import cv2

----------------------part 2 导入分类器----------------------

#分类器的路径可以在安装OpenCV的窗口查到,在cv2文件夹下的data文件夹里,采用的是haarcascade_frontalface,使用绝对路径时采用双反斜杠

pathe='C:\\Users\\***\\Lib\\site-packages\\cv2\\data\\haarcascade_eye.xml'#眼睛识别分类器的路径(路径自行设定)(www.xing528.com)

pathf='C:\\Users\\***\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml'#脸部识别分类器的路径(路径自行设定)

face_patterns=cv2.CascadeClassifier(pathf)#导入脸部识别的分类器

eye_cascade=cv2.CascadeClassifier(pathe)#导入眼睛识别的分类器

-----------part 3 建立模型,进行脸部和眼睛识别并标注-----------

sample_image=cv2.imread('D:\\new book\\facestest4.jpg')#导入图像

faces=face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=5,minSize=(3,3))#脸部检测

for(x,y,w,h)in faces:

cv2.rectangle(sample_image,(x,y),(x+w,y+h),(255,255,0),2)#标记脸部位置,调用的是OpenCV的rectangle()方法,每个人脸都画一个框,循环读取人脸的矩形对象列表,获得人脸矩形的坐标和宽高,然后在原图片中画出该矩形框,其中矩形框的颜色等是可调整的

face_re=sample_image[y:y+h,x:x+h]

eyes=eye_cascade.detectMultiScale(face_re)#眼睛检测

for(ex,ey,ew,eh)in eyes:

cv2.rectangle(face_re,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)#标记眼睛

----------------------part 4 输出结果----------------------

cv2.imwrite('D:\\new book\\facestest1_detected.jpg',sample_image)#存储检测后的图片

cv2.imshow('facestest1_detected',sample_image)#显示图片

运行结果如下。

人脸识别效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈