20行python代码实现人脸识别

yipeiwu_com6年前Python基础

OpenCV 是最流行的计算机视觉库,原本用 C 和 C++ 开发,现在也支持 Python。

它使用机器学习算法在图像中搜索人的面部。对于人脸这么复杂的东西,并没有一个简单的检测能对是否存在人脸下结论,而需要成千上万的特征匹配。算法把人脸识别任务分解成数千个小任务,每个都不难处理。这些任务也被称为分类器。

对于类似于人脸的对象,你或许需要不少于 6000 个分类器,每一个都需要成功匹配(当然,有容错率),才能检测出人脸。但这有一个问题:对于人脸识别,算法从左上角开始计算一个个数据块,不停问“这是张脸吗”。每个数据块有超过 6000 个检测,加起来的计算量会达到数百万级别,计算机很可能会让你等得花儿都谢了。

OpenCV 使用 cascades 来避免这种情况。Cascade 是什么?最佳答案已经在字典里了:一条瀑布或者连续瀑布。

好比连续瀑布,OpenCV cascade 把人脸检测问题分解为好几步。对于每个数据块,它都进行一个粗略、快速的检测。若通过,会再进行一个更仔细的检测,以此不断类推。该算法有 30 到 50 个这样的阶段,或者说 cascade。

只有通过全部阶段,算法才会判断检测到人脸。这样做的好处是:大多数图形都会在头几步就产生否定反馈,算法因而不需要在它上面测试所有 6000 个特征,大大节省了时间。相对于“正常流程”耗费数个小时,这可以实时实现人脸检测。

软件环境:

python3+openCV

代码:

#encoding:utf-8
import cv2
filename = "/users/Downloads/20181102142518.png"
def detect(filename):
 # haarcascade_frontalface_default.xml存储在package安装的位置
face_cascade = cv2.CascadeClassifier("/usr/local/lib/python3.6/site-packages/cv2/data/haarcascade_frontalface_default.xml")
 img = cv2.imread(filename)
 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 #传递参数是scaleFactor和minNeighbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及每个人脸矩形保留近邻数目的最小值
 #检测结果返回人脸矩形数组
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)
 cv2.namedWindow("Human Face Result!")
 cv2.imshow("Human Face Result!", img)
 cv2.imwrite("images/Face.jpg", img)
 cv2.waitKey(0)
 cv2.destroyAllWindows()
detect(filename)

识别后:

以上所述是小编给大家介绍的python人脸识别详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对【听图阁-专注于Python设计】网站的支持!

相关文章

python学习开发mock接口

本文实例为大家分享了python学习开发mock接口的具体步骤,供大家参考,具体内容如下 #1.测试为什么要开发接口? 1)在别的接口没有开发好的时候, mock接口(模拟接口) 2)...

怎样使用Python脚本日志功能

怎样使用Python脚本日志功能

  假设要开发一个自动化脚本工具,工程结构如下,Common这个package是框架功能的实现,Scripts目录是我们编写的测试用例脚本(请忽略其他不相关的目录)。   我们对日志功能...

简单了解python中对象的取反运算符

简单了解python中对象的取反运算符

取反运算符的原理: 1.对3取反:(取4位二进制) ①化为二进制: 3→0011 ②对二进制结果取反: 0011→1100 ③对结果先取反再加1: 1100→(~1100+...

python中使用print输出中文的方法

python中使用print输出中文的方法

看Python简明教程,学习使用print打印字符串,试了下打印中文,不行。 编辑环境:IDLE 上网搜了下解决办法,各种说法,试了两种: print u"学习" print (un...

Python使用自带的ConfigParser模块读写ini配置文件

Python使用自带的ConfigParser模块读写ini配置文件

在用Python做开发的时候经常会用到数据库或者其他需要动态配置的东西,硬编码在里面每次去改会很麻烦。Python自带有读取配置文件的模块ConfigParser,使用起来非常方便。 i...