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实现web方式logview的方法
Aug 10 Python
python使用wmi模块获取windows下的系统信息 监控系统
Oct 27 Python
Python按行读取文件的简单实现方法
Jun 22 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
详解Python里使用正则表达式的ASCII模式
Nov 02 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
简单了解python关系(比较)运算符
Jul 08 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
pygame用blit()实现动画效果的示例代码
May 28 Python
详解Python设计模式之策略模式
Jun 15 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 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和ACCESS写聊天室(九)
2006/10/09 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
详解用node.js实现简单的反向代理
2017/06/26 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
Python的pycurl包用法简介
2015/11/13 Python
python直接访问私有属性的简单方法
2016/07/25 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
python入门之基础语法学习笔记
2020/02/08 Python
如何用Python绘制3D柱形图
2020/09/16 Python
20岁生日感言
2014/01/13 职场文书
公务员诚信承诺书
2014/05/26 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
单位工作证明书格式
2014/10/04 职场文书
试用期自我评价范文
2015/03/10 职场文书
消防验收申请报告
2015/05/15 职场文书
2015入党自传书范文
2015/06/26 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python