Python下应用opencv 实现人脸检测功能


Posted in Python onOctober 24, 2019

使用OpenCV's Haar cascades作为人脸检测,因为他做好了库,我们只管使用。

代码简单,除去注释,总共有效代码只有10多行。

所谓库就是一个检测人脸的xml 文件,可以网上查找,下面是一个地址:

https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml

如何构造这个库,学习完本文后可以参考:

http://note.sonots.com/SciSoftware/haartraining.html

https://www.instructables.com/id/Create-OpenCV-Image-Classifiers-Using-Python/

知道构造库,就可以检测各种你想要检测的东西了。

人脸检测不是人脸识别,但是人脸识别的前提。

运行效果如下:

Python下应用opencv 实现人脸检测功能

前提:

这个原始代码来自 https://www.pyimagesearch.com/2016/11/21/raspbian-opencv-pre-configured-and-pre-installed/ 的一个教学讲稿。

你需要下载haarcascade_frontalface_default.xml 以及准备你要检测的文件,我这里是family.jpg,放在python 文件detect_faces.py 所在目录(工作目录)的子目录images下。haarcascade_frontalface_default.xml是放在工作目录。

如果加上摄像头连接程序,也可实时检测,另文介绍。

代码1介绍

导入库,并做命令行参数处理。你在命令行可以输入如下:

python detect_faces.py --image image/family.jpg  --detector haarcascade_frontalface_default.xml

我在程序中都有缺省参数处理,你如果集成测试或命令行不输参数的话,就要修改好你的缺省值。

这样命令行就是python detect_faces.py ,同时也可以输入命令行输入参数。

# USAGE 使用方法是:
# python detect_faces.py --image images/family.jpg \
# --detector haarcascade_frontalface_default.xml
# import the necessary packages 输入包
# import imutils 
import argparse
import cv2
# construct the argument parser and parse the arguments //构造命令行参数分析
# 为了集成测试,或者命令行输入的简单,这里都有缺省参数
#image 是 images/family.jpg
#detector 是 haarcascade_frontalface_default.xml
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", default='images/family.jpg',
 help="path to the input image")
ap.add_argument("-d", "--detector", default='haarcascade_frontalface_default.xml',
 help="path to Haar cacscade face detector")
args = vars(ap.parse_args())
 导入图形文件,并灰度处理
# load our image and convert it to grayscale 导入图形文件,并灰度化
image = cv2.imread(args["image"])
#image =imutils.resize(image,width=800)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
导入检测文件,检测图中人脸,显示检测到的人脸数
# load the face detector and detect faces in the image
# 导入脸部检测文件
detector = cv2.CascadeClassifier(args["detector"])
#检测图形中的脸部
rects = detector.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=9,
 minSize=(40, 40), flags=cv2.CASCADE_SCALE_IMAGE)
#显示检测到的人脸数目
print("[INFO] detected {} faces".format(len(rects)))
 循环,绘图每个检测到的人脸框,并图形显示
# load the face detector and detect faces in the image
# 导入脸部检测
detector = cv2.CascadeClassifier(args["detector"])
#检测图形中的脸部
rects = detector.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=9,
 minSize=(40, 40), flags=cv2.CASCADE_SCALE_IMAGE)
#显示检测到的人脸数目
print("[INFO] detected {} faces".format(len(rects)))

最后串接所有代码如下:

# USAGE 使用方法是:
# python detect_faces.py --image images/family.jpg \
# --detector haarcascade_frontalface_default.xml
# import the necessary packages 输入包
# import imutils 如果需要成比例缩放图形才需要,这里不需要
import argparse
import cv2
# construct the argument parser and parse the arguments //构造命令行参数分析
# 为了集成测试,或者命令行输入的简单,这里都有缺省参数
#image 是 images/family.jpg
#detector 是 haarcascade_frontalface_default.xml
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", default='images/family.jpg',
 help="path to the input image")
ap.add_argument("-d", "--detector", default='haarcascade_frontalface_default.xml',
 help="path to Haar cacscade face detector")
args = vars(ap.parse_args())
# load our image and convert it to grayscale 导入图形文件,并灰度化
image = cv2.imread(args["image"])
#image =imutils.resize(image,width=800)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# load the face detector and detect faces in the image
# 导入脸部检测文件
detector = cv2.CascadeClassifier(args["detector"])
#检测图形中的脸部
rects = detector.detectMultiScale(gray, scaleFactor=1.05, minNeighbors=9,
 minSize=(40, 40), flags=cv2.CASCADE_SCALE_IMAGE)
#显示检测到的人脸数目
print("[INFO] detected {} faces".format(len(rects)))
# loop over the bounding boxes and draw a rectangle around each face
# 循环rects,绘图每个检测到的人脸框
for (x, y, w, h) in rects:
 cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
# show the detected faces
cv2.imshow("Faces", image)
cv2.waitKey(0)

总结

以上所述是小编给大家介绍的Python下应用opencv 实现人脸检测功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
使用Python获取Linux系统的各种信息
Jul 10 Python
浅析Python中的多条件排序实现
Jun 07 Python
Sanic框架路由用法实例分析
Jul 16 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
python自动发邮件总结及实例说明【推荐】
May 31 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 Python
python flappy bird小游戏分步实现流程
Feb 15 Python
Python迭代器iterator生成器generator使用解析
Oct 24 #Python
Python 取numpy数组的某几行某几列方法
Oct 24 #Python
Django和Flask框架优缺点对比
Oct 24 #Python
python命令 -u参数用法解析
Oct 24 #Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 #Python
用Python解数独的方法示例
Oct 24 #Python
Python3 sys.argv[ ]用法详解
Oct 24 #Python
You might like
在PWS上安装PHP4.0正式版
2006/10/09 PHP
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
php生成excel列序号代码实例
2013/12/24 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
如何用js控制css中的float的代码
2007/08/16 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
2017/02/14 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
Python中__init__和__new__的区别详解
2014/07/09 Python
python实现简单多人聊天室
2018/12/11 Python
python 阶乘累加和的实例
2019/02/01 Python
python logging模块的使用总结
2019/07/09 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
python3 反射的四种基本方法解析
2019/08/26 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
大专毕业生自我鉴定
2013/11/21 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
综合实践活动总结
2014/05/05 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
黄埔军校观后感
2015/06/10 职场文书
贷款收入证明格式
2015/06/24 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android