opencv实现人脸,人眼,微笑检测
1.首先实现人脸检测
import cv2
img = cv2.imread("people.jpg",1) #读入图像
#导入人脸级联分类器引擎,“.xml”文件里包含了训练出来的人脸特征
face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
#用人脸级联分类器引擎进行人脸识别,返回的faces为人脸的坐标列表
#scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
#minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。
#如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
#这种设定值一般用在用户自定义对检测结果的组合程序上;
faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=3)
# 对每一张脸,进行如下操作
for (x,y,w,h) in faces:
#画人脸框,bgr ,width
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#在“output”窗口中展示效果图
cv2.imshow("output",img)
# 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("output1.jpg",img)
输入:

输出:

2.对单张图片进行人脸和人眼检测
import cv2
img = cv2.imread("img4.jpg",1) #读入图像
face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_eye.xml')
faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=3)
# 对每一张脸,进行如下操作
for (x,y,w,h) in faces:
#画人脸框,bgr ,width
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#在框选出人脸的区域进行人眼的检测,节省计算资源,
faces_area = img[y:y+h,x:x+w]
#scaleFactor默认1.1,minNeighbors默认3
eyes = eye_engine.detectMultiScale(faces_area,1.0132,1)
for (ex,ey,ew,eh) in eyes:
#画出人眼的框
cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)
#在“output”窗口中展示效果图
cv2.imshow("output",img)
# 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("output_1.jpg",img)
输入一样
输出:

3.加入微笑识别
import cv2
img = cv2.imread("img4.jpg",1) #读入图像
face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_eye.xml')
smile_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_smile.xml')
faces = face_engine.detectMultiScale(img,scaleFactor=1.1,minNeighbors=5)
# 对每一张脸,进行如下操作
for (x,y,w,h) in faces:
#画人脸框,bgr ,width
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#在框选出人脸的区域进行人眼的检测,节省计算资源,
faces_area = img[y:y+h,x:x+w]
# 人眼检测
#scaleFactor默认1.1,minNeighbors默认3
eyes = eye_engine.detectMultiScale(faces_area,1.3,6)
for (ex,ey,ew,eh) in eyes:
#画出人眼的框
cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,255,0),1)
# 微笑检测
smiles = smile_engine.detectMultiScale(faces_area,1.3,2)
for (ex,ey,ew,eh) in smiles:
cv2.rectangle(faces_area,(ex,ey),(ex+ew,ey+eh),(0,0,255),1)
cv2.putText(img,'Smile',(x,y-3),1,1.5,(0,0,255),2,cv2.LINE_8)
#在“output”窗口中展示效果图
cv2.imshow("output",img)
# 监听键盘上的任何按键,如果有按键即退出并且关闭窗口,并将图片保存为output.jpg
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("output4_2.jpg",img)
输出:

opencv实现人脸,人眼,微笑检测的更多相关文章
- opencv+opencv_contrib 人脸识别和检测 python开发环境快速搭建(30分钟)图文教程
很多朋友为了学习python.ML(机器学习).DL(深度学习).opencv等花费了大量时间配置安装环境(一个朋友花了4天时间才配置好)各种搜索.下载.安装配置,出问题等. 市面上的配置资料很多,选 ...
- SmileyFace——基于OpenCV的人脸人眼检测、面部识别程序
项目地址 https://github.com/guoyaohua/SmileyFace 开发环境 Visual Studio 2010 MFC + OpenCV 功能描述 静态图像人脸检测 视频人脸 ...
- 【图像处理】使用OpenCV实现人脸和行人检测
OpenCV全称是Open source Computer Vision Library(开放源代码计算机视觉库),是一个用于图像处理.分析.机器视觉方面的开源函数库,提供了很多图像处理的工具和可 ...
- Python 3 利用 Dlib 19.7 和 sklearn机器学习模型 实现人脸微笑检测
0.引言 利用机器学习的方法训练微笑检测模型,给一张人脸照片,判断是否微笑: 使用的数据集中69张没笑脸,65张有笑脸,训练结果识别精度在95%附近: 效果: 图1 示例效果 工程利用pytho ...
- 【AdaBoost算法】基于OpenCV实现人脸检测Demo
一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...
- Python学习--使用dlib、opencv进行人脸检测标注
参考自https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/ 在原有基础上有一部分的修改(image ...
- OpenCV + Python 人脸检测
必备知识 Haar-like opencv api 读取图片 灰度转换 画图 显示图像 获取人脸识别训练数据 探测人脸 处理人脸探测的结果 实例 图片素材 人脸检测代码 人脸检测结果 总结 下午的时候 ...
- 【转载】opencv实现人脸检测
全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...
- Java+opencv实现人脸检测
版本 Java1.8 opencv3.4 代码: import java.awt.Graphics; import java.awt.image.BufferedImage; import javax ...
随机推荐
- linux下的git安装及配置
一.yum安装方式 1.安装 $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel $ yum -y ...
- 在 Ubuntu 16.04 中安装支持 CPU 和 GPU 的 Google TensorFlow 神经网络软件
TensorFlow 是用于机器学习任务的开源软件.它的创建者 Google 希望提供一个强大的工具以帮助开发者探索和建立基于机器学习的应用,所以他们在去年作为开源项目发布了它.TensorFlow ...
- AutoIT: 对数据库的访问,数据提取操作
#include<array.au3> $conn= ObjCreate("ADODB.Connection") $RS= ObjCreate("ADODB. ...
- Struts Filter告警:FilterDispatcher <<< is deprecated! Please use the new filters!
在struts2.3.14下,web.xml中使用 <filter> <filter-name>struts2</filter-name> <!-- < ...
- sqlsugar的sum的用法
通过论坛的检索 查到三篇文章是关于sum的 http://www.codeisbug.com/Ask/9/4531 http://www.codeisbug.com/Ask/14/4128 文章1:2 ...
- Log4j日志等级
Log4j根据日志信息的重要程度,分OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL 当然再细分的话 还有 FATAL(严重错误), 但是Log4j官方建议实际实用的话,Log4 ...
- bzoj 3105: [cqoi2013]新Nim游戏【线性基+贪心】
nim游戏的先手必胜条件是所有堆的火柴个数异或和为0,也就是找一个剩下火柴堆数没有异或和为0的子集的方案,且这个方案保证剩下的火柴个数总和最大 然后我就不会了,其实我到现在也不知道拟阵是个什么玩意-- ...
- P3308 [SDOI2014]LIS(最小割+退流)
传送门 设\(f[i]\)为以\(i\)结尾的最长上升子序列.可以考虑建这样一张图,对于所有的\(i<j,f[j]=f[i+1]\)连边\((i,j)\),\(f[i]=1\)的话连边\((S, ...
- [Swift通天遁地]一、超级工具-(2)制作美观大方的环形进度条
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- Oracle异机恢复
RMAN异机恢复注意事项:1.RMAN 异机恢复的时候,db_name必须相同. 如果说要想改成其他的实例名,可以在恢复成功后,用nid 命令修改. 实例名的信息会记录到控制文件里,所以如果在恢复的时 ...