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 相关文章推荐
在Linux中通过Python脚本访问mdb数据库的方法
May 06 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
基于Python中capitalize()与title()的区别详解
Dec 09 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
Jun 11 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
如何用Python绘制3D柱形图
Sep 16 Python
python 下载m3u8视频的示例代码
Nov 11 Python
详解python的变量缓存机制
Jan 24 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 快速排序算法详解
2014/11/10 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
在Django中限制已登录用户的访问的方法
2015/07/23 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
python的unittest测试类代码实例
2017/12/07 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
详解Python的三种可变参数
2019/05/08 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
雅诗兰黛(Estee Lauder)英国官方网站:世界顶级化妆品牌
2016/12/29 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
开水果连锁店创业计划书
2013/12/29 职场文书
创业资金计划书
2014/02/06 职场文书
《小池塘》教学反思
2014/02/28 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
离婚协议书的范本
2015/01/27 职场文书
承诺书范本大全
2015/05/04 职场文书
三八妇女节主持词
2015/07/04 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL