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 代码性能优化技巧分享
Aug 07 Python
python原始套接字编程示例分享
Feb 21 Python
浅谈Python中range和xrange的区别
Dec 20 Python
基于python中theano库的线性回归
Aug 31 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
python使用递归的方式建立二叉树
Jul 03 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 Python
python中出现invalid syntax报错的几种原因分析
Feb 12 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
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
js实现分割上传大文件
2016/03/09 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
nodejs基础知识
2017/02/03 NodeJs
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
2019/04/29 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
JS实现图片切换特效
2019/12/23 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
python如何基于redis实现ip代理池
2020/01/17 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
Python是如何进行类型转换的
2013/06/09 面试题
毕业纪念册寄语大全
2015/02/26 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
Python+Tkinter制作专属图形化界面
2022/04/01 Python