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 ...
随机推荐
- Lightoj 1006 Hex-a-bonacci
Given a code (not optimized), and necessary inputs, you have to find the output of the code for the ...
- 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法
四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...
- 04_显示意图打开activity
实际上用显式意图打开一个activity就很简单了.只需要指定你要打开的这个activity的class就可以了. 需要注意一点的是创建了一个ThirdActivity必须要在清单文件里面声明.如果没 ...
- C#基础第一天 VS2013基本设置
1 .net能干什么 桌面应用程序 winform internet应用程序 Asp.net->京东.msdn.招聘银行 手机开发 wp8 unity3D游戏开发或者虚拟现实 2 .net两种交 ...
- Xenocode Postbuild 2010 for .NET 使用
代码混淆工具 参考地址1:http://blog.csdn.net/yanpingsoft/article/details/7997212 参考地址2:http://www.cnblogs.com/w ...
- jQuery入坑指南
前言 Ajax官方文档 爱jQuery jQuery插件库 jQuery中文api input 赋值和取值 记录一下: 在写一个input赋值,二话不说就直接利用了$('#xx').val()来进行取 ...
- 3 Java对象的内存布局以及对象的访问定位
先来看看Java对象在内存中的布局 一 Java对象的内存布局 在HotSpot虚拟机中,对象在内存中的布局分为3个区域 对象头(Header) Mark Word(在32bit和64bit虚拟机 ...
- 洛谷P4344 [SHOI2015]脑洞治疗仪(珂朵莉树)
传送门 看到区间推倒……推平就想到珂朵莉树 挖脑洞直接assign,填坑先数一遍再assign再暴力填,数数的话暴力数 //minamoto #include<iostream> #inc ...
- (8)css表格
用css设置表格样式 *<table></table> 标签定义 HTML 表格. * tr 元素定义表格的行:th 元素定义表格的表头:td 元素定义表格中的单元格:capt ...
- X86 Linux 下 SIGBUS 总结
SIGBUS 在 x86 Linux 上并不多见,但一旦出现,其调用堆栈常常让人摸不着头脑,加之信号问题各平台系统间差异较大,更让人难以理清,这里稍微总结一下 x86 Linux 上大概有哪些情形会触 ...