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的装饰器的运用
May 05 Python
python字典的常用操作方法小结
May 16 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
python中判断文件编码的chardet(实例讲解)
Dec 21 Python
python模拟事件触发机制详解
Jan 19 Python
Numpy数组的保存与读取方法
Apr 04 Python
python开启摄像头以及深度学习实现目标检测方法
Aug 03 Python
python调用摄像头显示图像的实例
Aug 03 Python
在Python中实现函数重载的示例代码
Dec 12 Python
Python如何使用字符打印照片
Jan 03 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
Apr 02 Python
Python初识逻辑与if语句及用法大全
Aug 07 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
PHP 编写的 25个游戏脚本
2009/05/11 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
Python中AND、OR的一个使用小技巧
2015/02/18 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
食堂厨师岗位职责
2014/08/25 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python
vue组件vue-esign实现电子签名
2022/04/21 Vue.js
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android