下午搭建了OpenCV的Python环境和OpenCV的Python环境。所以迫不及待想体验opencv的人脸识别,如下。
基本知识
哈尔样的
哈尔式百科解读。一般来说,它可以作为面部特征。
哈尔特征值反映了图像灰度的变化。比如脸部的一些特征可以简单地用矩形特征来描述,比如:眼睛比脸颊深,鼻梁两侧比鼻梁深,嘴巴比周围的颜色深。
opencv api
要使用opencv,你必须首先知道它能做什么以及如何做。所以API的重要性就体现出来了。就本例而言,使用的功能很少,即普通的图像读取、灰度转换、图像显示和简单的图像编辑。
如下所示:
阅读图片
只需给出要操作的图片的路径。
导入cv2
image=cv2.imread(imagepath)
灰度转换
灰度转换的作用是降低转换成灰度的图像的计算强度。
导入cv2
gray=cv2.cvtColor(图像,cv2。颜色_BGR2GRAY)
绘制设计
opencv的优势之一是可以随意编辑和处理图片。
下面这个函数的最后一个参数指定了画笔的大小。
导入cv2
cv2 .矩形(图像,(x,y),(x w,y w),(0,255,0),2)
显示图像
编辑后的图像或者直接显示,或者保存到物理存储介质。
导入cv2
cv2.imshow('图像标题',图像)
获取人脸识别训练数据
看似复杂,其实是对面部特征的描述,这样在读取数据后,opencv就可以根据训练中的样本数据感知到读取图片上的特征,进而对图片进行人脸识别。
导入cv2
face_cascade=cv2。级联分类器。/haarcscade _ frontal face _ default . XML ')
网站中显示的xml文件是opencv在GitHub上共享的通用训练数据。我们可以直接使用。
培训数据参考地址:
https://github.com/opencv/opencv/tree/master/data/haarcascades
人脸检测
说白了,就是根据训练数据识别新图片的过程。
导入cv2
#检测图片中的人脸
faces=face _ cascade.detectMultiScale多尺度(
格雷,
比例因子=1.15,
minNeighbors=5,
minSize=(5,5),
flags=cv2 . cv . cv _ HAAR _ SCALE _ IMAGE
)
我们可以任意指定内部参数的值,以实现不同精度的识别。返回值是opencv检测结果对图片的体现。
处理人脸检测的结果
在完成了刚才的人脸检测后,我们可以得到返回值进行进一步的处理。但这并不是说它会有多复杂,只是增加了一些特征值。
导入cv2
打印“找到{0}张脸!”。格式(镜头(面))
对于面:中的(x,y,w,h)
cv2 .矩形(图像,(x,y),(x w,y w),(0,255,0),2)
例子
有了刚才的基础,我们就可以完成一个简单的人脸识别的小例子。
图片材料
下图将作为我们的测试依据。
人脸检测码
# coding:utf-8
导入系统
重新加载(系统)
sys.setdefaultencoding('utf8 ')
# _ _作者__='真诚的香水'
# _ _日期__='2016/9/5 '
# __Desc__=人脸检测的小例子,圈出人脸。
导入cv2
#要检测的图像路径
imagepath=r '。/heat.jpg '
#获取训练好的人脸的参数数据,直接从GitHub使用默认值。
face_cascade=cv2。级联分类器。/haarcscade _ frontal face _ default . XML ')
#阅读图片
image=cv2.imread(imagepath)
gray=cv2.cvtColor(图像,cv2。颜色_BGR2GRAY)
#检测图片中的人脸
faces=face _ cascade.detectMultiScale多尺度(
格雷,
比例因子=1.15,
minNeighbors=5,
minSize=(5,5),
flags=cv2 . cv . cv _ HAAR _ SCALE _ IMAGE
)
打印“找到{0}张脸!”。格式(镜头(面))
对于面:中的(x,y,w,h)
# cv2 .矩形(图像,(x,y),(x w,y w),(0,255,0),2)
cv2.circle(image,((x x w)/2,(y y h)/2),w/2,(0,255,0),2)
cv2.imshow('查找面孔!',图像)
cv2.waitKey(0)
人脸检测结果
输出图片:
输出:
D:SoftwarePython2python.exe e :/代码/Python/数据构建器/opencv/演示版
找到了三张脸!
详情见案例参考:
https://my.oschina.net/chinesezhx/blog/520917
摘要
回过头来看,这个实验是对opencv的常用api的简单使用,重点是训练数据的使用和人脸检测的处理。
-结束-