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 相关文章推荐
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 Python
python万年历实现代码 含运行结果
May 20 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
Django Rest framework三种分页方式详解
Jul 26 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
Python将字典转换为XML的方法
Aug 01 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
Pytorch DataLoader shuffle验证方式
Jun 02 Python
利用Python多线程实现图片下载器
Mar 25 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 curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
js+css在交互上的应用
2010/07/18 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
jQuery remove()过滤被删除的元素(推荐)
2017/07/18 jQuery
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
python解析json实例方法
2013/11/19 Python
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
Python 面向对象部分知识点小结
2020/03/09 Python
Python执行时间的几种计算方法
2020/07/31 Python
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
《三顾茅庐》教学反思
2014/04/10 职场文书
小学清明节活动总结
2014/07/04 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
财务负责人岗位职责
2015/02/03 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS
angular4实现带搜索的下拉框
2022/03/25 Javascript
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js
python和anaconda的区别
2022/05/06 Python