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中设置变量作为默认值时容易遇到的错误
Apr 03 Python
基于python实现微信模板消息
Dec 21 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
Python 基础教程之str和repr的详解
Aug 20 Python
Python实现进程同步和通信的方法
Jan 02 Python
python实现决策树分类(2)
Aug 30 Python
Python3 max()函数基础用法
Feb 19 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
Apr 15 Python
Django上线部署之IIS的配置方法
Aug 22 Python
Python数学形态学实例分析
Sep 06 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 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不用正则采集速度探究总结
2008/03/24 PHP
黑夜路人出的几道php笔试题
2009/08/04 PHP
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
详谈js模块化规范
2017/07/07 Javascript
js精确的加减乘除实例
2017/11/14 Javascript
利用node实现一个批量重命名文件的函数
2017/12/21 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
对python 自定义协议的方法详解
2019/02/13 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
python如何从文件读取数据及解析
2019/09/19 Python
Django 请求Request的具体使用方法
2019/11/11 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
消防战士优秀事迹材料
2014/02/13 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs
Html5生成验证码的示例代码
2021/05/10 Javascript
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL