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 相关文章推荐
详解K-means算法在Python中的实现
Dec 05 Python
Python实现简易Web爬虫详解
Jan 03 Python
numpy matrix和array的乘和加实例
Jun 28 Python
python计算无向图节点度的实例代码
Nov 22 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
python 解决Fatal error in launcher:错误问题
May 21 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 Python
容易被忽略的Python内置类型
Sep 03 Python
Python经纬度坐标转换为距离及角度的实现
Nov 01 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 Python
python实现三次密码验证的示例
Apr 29 Python
python操作xlsx格式文件并读取
Jun 02 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
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
PHP静态文件生成类实例
2014/11/29 PHP
php实现zip文件解压操作
2015/11/03 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
Python中的默认参数详解
2015/06/24 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
爱普生美国官网:Epson美国
2018/11/05 全球购物
毕业生如何写自我鉴定
2014/03/15 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
2014年调度员工作总结
2014/11/19 职场文书
交通肇事罪辩护词
2015/05/21 职场文书
家长通知书家长意见
2015/06/03 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
Python 阶乘详解
2021/10/05 Python
图文详解nginx日志切割的实现
2022/01/18 Servers
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript