这篇文章将为大家详细讲解有关如何使用python实现人脸识别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一,首先
梳理一下实现人脸识别需要进行的步骤:
流程大致如此,在此之前,要先让人脸被准确的找出来,也就是能准确区分人脸的分类器,在这里我们可以用已经训练好的分类器,网上种类较全,分类准确度也比较高,我们也可以节约在这方面花的时间。
既然用的是python,那自然少不了包的使用了,在看代码之前,我们先将整个项目所需要的包罗列一下:
·CV2 (Opencv):图像识别,摄像头调用
·os:文件操作
·numpy: numpy (Numerical python)是python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库
·公益诉讼:python成像图书馆,python平台事实上是图像处理的标准库
二,接下来
1。对照人脸获取
#——获取人脸样本- - - - - - import cv2 , #调用笔记本内置摄像头,参数为0,如果有其他的摄像头可以调整参数为1,2 时间=cap cv2.VideoCapture (0) #调用人脸分类器,要根据实际路径调整3 时间=face_detector cv2.CascadeClassifier (" # 39; X:/用户/73950/桌面/FaceRec/haarcascade_frontalface_default.xml& # 39;), #待更改 #为即将录入的脸标记一个id 时间=face_id 输入(& # 39;\ n User  data 输入,Look at 从而camera 以及wait ……& # 39;) # sampleNum用来计数样本数目 count =0 , while 真正的:, ,#从摄像头读取图片=,成功,img cap.read (), ,#转为灰度图片,减少程序符合,提高识别度 ,if success  is 真正的:, 时间=gray 才能;cv2.cvtColor (img, cv2.COLOR_BGR2GRAY), 其他:大敌; ,打破 ,#检测人的脸,将每一帧摄像头记录的数据带入OpenCv中,让分类器判断人的脸 ,#其中灰色为要检测的灰度图像,1.3为每次图像尺寸减小的比例,5为minNeighbors=,,faces  face_detector.detectMultiScale(灰色,1.3,,5) , ,#框选人脸,循环保证一个能检测的实时动态视频流 ,for (w, x,, y,, h),拷贝的脸: # xy才能为左上角的坐标,w为宽,h为高,用矩形为人脸标记画框 cv2.rectangle才能(img, (x, y), (x + w,, y + w),, (255, 0, 0)) #才能成功框选则样本数增加 count 才能+=,1, #才能保存图像,把灰度图片看成二维数组来检测人脸区域 #才能(这里是建立了数据的文件夹,当然也可以设置为其他路径或者调用数据库) cv2.imwrite才能(“数据/用户!”+ str (face_id) + & # 39;强生# 39;+ str(数)+ & # 39;jpg # 39;,灰色(y, y + h x: x + w]), #才能显示图片 cv2.imshow才能(& # 39;图像# 39;,img),, #才能保持画面的连续.waitkey方法可以绑定按键保证画面的收放,通过q键退出摄像=,,k  cv2.waitKey (1),,==,if k & # 39; 27 & # 39;: ,,break #才能或者得到800个样本后退出摄像,这里可以根据实际情况修改数据量,实际测试后800张的效果是比较理想的 ,elif count 祝辞=,800: ,打破 , #关闭摄像头,释放资源 cap.realease () cv2.destroyAllWindows ()
经博主测试,在执行
" face_detector=cv2.CascadeClssifier (" # 39; C: \ python用户桌面\ \ admin \ \ data \ haarcascade_frontalface_default.xml& # 39;)”此语句时,实际路径中的目录名尽量不要有中文字符出现,否则容易报错。
这样,你的电脑就能看到你啦!
2。通过算法建立对照模型
本次所用的算法为opencv中所自带的算法,opencv较新版本中(我使用的是2.4.8)提供了一个FaceRecognizer类,里面有相关的一些人脸识别的算法及函数接口,其中包括三种人脸识别算法(我们采用的是第三种)
1. eigenface
2. fisherface
3. lbphfacerecognizer
枸杞多糖是一种特征提取方式,能提取出图像的局部的纹理特征,最开始的枸杞多糖算子是在3 x3窗口中,取中心像素的像素值为阀值,与其周围八个像素点的像素值比较,若像素点的像素值大于阀值,则此像素点被标记为1,否则标记为0。这样就能得到一个八位二进制的码,转换为十进制即LBP码,于是得到了这个窗口的LBP值,用这个值来反映这个窗口内的纹理信息。