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按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
Python如何定义接口和抽象类
Jul 28 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 Python
Python matplotlib可视化之绘制韦恩图
Feb 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
Memcached常用命令以及使用说明详解
2013/06/27 PHP
Yii2使用swiftmailer发送邮件的方法
2016/05/03 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
2015/02/13 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
【python】matplotlib动态显示详解
2019/04/11 Python
python:动态路由的Flask程序代码
2019/11/22 Python
使用Python实现分别输出每个数组
2019/12/06 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
法国房车租赁网站:Yescapa
2019/08/26 全球购物
公司人力资源的自我评价
2014/01/02 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
司仪主持词两篇
2014/03/22 职场文书
篝火晚会主持词
2014/03/25 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
广播体操口号
2014/06/18 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
Python3的进程和线程你了解吗
2022/03/16 Python
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android
java中如何截取字符串最后一位
2022/07/07 Java/Android