一:相关依赖文件下载

https://github.com/opencv/opencv

 

二:实现步骤(图片检测)

(一)读取图片

image= cv.imread("./d.png")  #读取图片

(二)灰度转换

gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #在灰度图像基础上实现的

(三)获取人脸识别训练数据

face_detector = cv.CascadeClassifier("./haarcascade_frontalface_alt_tree.xml")  #级联检测器获取文件

这个xml文件,就是opencv在GitHub上共享出来的具有普适的训练好的数据。我们可以直接的拿来使用

(四)探测人脸,获取相关数据

faces = face_detector.detectMultiScale(gray,1.1,)
#第一个参数是灰度图像
#第二个参数是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍
#第三个参数是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要适当降低

(五)根据相关数据在原图像上画出人脸位置

    for x,y,w,h in faces:
cv.rectangle(image,(x,y),(x+w,y+h),(,,),)
cv.imshow("face_detection",image)

(六)全部代码

import cv2 as cv
import numpy as np def face_detect_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #在灰度图像基础上实现的
face_detector = cv.CascadeClassifier("./haarcascade_frontalface_alt_tree.xml") #级联检测器获取文件
faces = face_detector.detectMultiScale(gray,1.1,) #在多个尺度空间上进行人脸检测
#第一个参数是灰度图像
#第二个参数是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍
#第三个参数是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要试单降低
for x,y,w,h in faces:
cv.rectangle(image,(x,y),(x+w,y+h),(,,),)
cv.imshow("face_detection",image) src = cv.imread("./d.png") #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建GUI窗口,形式为自适应
cv.imshow("input image",src) #通过名字将图像和窗口联系 face_detect_demo(src) cv.waitKey() #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口

三:实现视频检测人脸

步骤相同,我们只需要将视频中每一帧图像进行处理,调用上面的图像人脸检测即可

import cv2 as cv
import numpy as np def face_detect_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #在灰度图像基础上实现的
face_detector = cv.CascadeClassifier("./haarcascade_frontalface_default.xml") #级联检测器获取文件
faces = face_detector.detectMultiScale(gray,1.1,) #在多个尺度空间上进行人脸检测
#第一个参数是灰度图像
#第二个参数是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍
#第三个参数是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要试单降低
for x,y,w,h in faces:
cv.rectangle(image,(x,y),(x+w,y+h),(,,),)
cv.imshow("face_detection",image) def video_face_detect():
capture = cv.VideoCapture()
while True:
ret,frame = capture.read() #frame是每一帧图像,ret是返回值,为0是表示图像读取完毕
frame = cv.flip(frame,)
if ret == False:
break
face_detect_demo(frame)
c = cv.waitKey()
if c == :
break video_face_detect() cv.waitKey() #等待用户操作,里面等待参数是毫秒,我们填写0,代表是永远,等待用户操作
cv.destroyAllWindows() #销毁所有窗口

相关知识补充:

(一)CascadeClassifier级联分类器

是Opencv中做人脸检测的时候的一个级联分类器
有两种选择:一是使用老版本的CvHaarClassifierCascade函数,一是使用新版本的CascadeClassifier类。
老版本的分类器只支持类Haar特征,而新版本的分类器既可以使用Haar,也可以使用LBP特征。

基本原理

xml中存放的是训练后的特征池,特征size大小根据训练时的参数而定,检测的时候可以简单理解为就是将每个固定size特征(检测窗口)与输入图像的同样大小区域比较,如果匹配那么就记录这个矩形区域的位置,然后滑动窗口,检测图像的另一个区域,重复操作。
由于输入的图像中特征大小不定,比如在输入图像中眼睛是50x50的区域,而训练时的是25x25,那么只有当输入图像缩小到一半的时候,才能匹配上,所以这里还有一个逐步缩小图像,也就是制作图像金字塔的流程。
cascPath = "./haarcascade_frontalface_default.xml"
cv2.CascadeClassifier(cascPath)  #构造方法加载入xml特征文件

detectMultiScale方法

faces = faceCascade.detectMultiScale(gray,1.1,,)
def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None): # real signature unknown; restored from __doc__
#第一个参数image:是灰度图像
#第二个参数scaleFactor:是尺度变换,就是向上或者向下每次是原来的多少倍,这里是1.02倍
#第三个参数minNeighbors:是人脸检测次数,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要适当降低
#第四个参数flags:
  CASCADE_DO_CANNY_PRUNING=1, 利用canny边缘检测来排除一些边缘很少或者很多的图像区域
  CASCADE_SCALE_IMAGE=2, 正常比例检测 CASCADE_FIND_BIGGEST_OBJECT=4, 只检测最大的物体
  CASCADE_DO_ROUGH_SEARCH=8 初略的检测
#最后两个参数用来限制得到的目标区域的范围

注意:

flags对于新的分类器没有用

设置minNeighbors:是在人脸附近进行指定次数的检测,获取最准确的范围,设置越高,误检率越低,但是对于迷糊图片,我们设置越高,越不易检测出来,要适当降低

OpenCV---人脸检测的更多相关文章

  1. keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72885715 人脸识别热门,表情识别更加.但是表情识别很难,因为人脸的微表情很多,本节 ...

  2. opencv人脸检测分类器训练小结

    这两天在初学目标检测的算法及步骤,其中人脸检测作为最经典的算法,于是进行了重点研究.该算法最重要的是建立人脸检测分类器,因此我用了一天的时间来学习分类器的训练.这方面的资料很多,但是能按照一个资料运行 ...

  3. Android+openCV人脸检测2(静态图片)

    前几篇文章中有提到对openCV环境配置,这里再重新梳理导入和使用openCV进行简单的人脸检测(包括使用级联分类器) 一 首先导入openCVLibrary320 二 设置gradle的sdk版本号 ...

  4. opencv人脸检测,旋转处理

    年会签到,拍自己的大头照,有的人可能会拍成横向的,需要旋转,用人脸检测并修正它(图片). 1. 无脑检测步骤为: 1. opencv 读取图片,灰度转换 2. 使用CascadeClassifier( ...

  5. OpenCV人脸检测并把图片写成avi视频

    读出某一个文件夹下“jpg”后缀的全部图片后,用的OpenCV自带的人脸检测检测图片中的人脸,调整图片的大小写成一个avi视频. 主要是要记录一下CvVideoWriter的用法和如何从文件夹中读取某 ...

  6. 人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&OpenCV人脸检测方法及对比)

    1.Easily Create High Quality Object Detectors with Deep Learning 2016/10/11 http://blog.dlib.net/201 ...

  7. OpenCV——人脸检测

    OpenCV支持的目标检测的方法: 利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification) 1.加载级联分类器 CascadeClass ...

  8. OpenCV: OpenCV人脸检测框可信度排序

    参考文章:http://blog.csdn.net/hua_007/article/details/45368607 使用OpenCV进行人脸识别时,使用 casecade.detectMultiSc ...

  9. OpenCV人脸检测demo--facedetect

    &1 问题来源 在运行官网的facedetect这个demo的时候,总是不会出来result的图形,电脑右下角提示的错误是“显示器驱动程序已停止响应,而且已恢复 windows 8(R)”. ...

  10. android opencv 人脸检测

    转载自http://blog.csdn.net/jesse__zhong/article/details/24889709 .......省略包 public class Staticdetectio ...

随机推荐

  1. tomcat 最大并发连接数设置

    转自: http://blog.csdn.net/qysh123/article/details/11678903 这是个很简单的问题,但是搜了一圈,发现大家都写错了.所以这里总结一下: 几乎所有的中 ...

  2. AJAX学习2

    作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正. 本文学习内容:https://www. ...

  3. 寒假c++学习计划

    课程选择 概览 清华大学 C++语言程序设计基础 深入学习 清华大学 C++语言程序设计进阶 (2015年秋) 理由 清华大学郑莉老师的课浅显易懂,很适合我这种小白,再加上学习过c语言理解c++基础并 ...

  4. Codeforces Round #245 (Div. 1) B. Working out dp

    题目链接: http://codeforces.com/contest/429/problem/B B. Working out time limit per test2 secondsmemory ...

  5. 周总结<8>

    周次 学习时间 新编代码行数 博客量 学到知识点 15 15 100 1 Html页面设计:虚拟机:(C语言)排序 Html案例: <!DOCTYPE html PUBLIC "-// ...

  6. vs快捷键代码格式化或代码对齐名字

    开发人员,换个电脑后环境要重装,vs的环境也需要重新设置. 快捷键需要重新设置,插件也需要重装,在这里备注下,换个环境就可以直接用了. 由于vs不同版本,代码对齐或者代码格式化的快捷键都不一样,所以导 ...

  7. lintcode-512-解码方法

    512-解码方法 有一个消息包含A-Z通过以下规则编码 'A' -> 1 'B' -> 2 ... 'Z' -> 26 现在给你一个加密过后的消息,问有几种解码的方式 样例 给你的消 ...

  8. this & super

    /* 当本类的成员和局部变量同名用this区分. 当子父类中的成员变量同名用super区分父类.   this和super的用法很相似.   this:代表一个本类对象的引用. super:代表一个父 ...

  9. virsh 命令行管理虚拟机

    重用命令和选项 1:查看运行的虚拟机 virsh list   2:查看所有的虚拟机(关闭和运行的虚拟机) virsh list --all   3:连接虚拟机 virsh console +域名(虚 ...

  10. 【php】header下载文件后,文件变大的问题;(ob_clean()清空缓存)

    事由: 按照常理,为了下载一个生产的文件,都是使用header函数,指定下文件信息,然后开始下载,但是下载后发现,文件体积总是比源文件要大2个字节,源文件是24字节,下载后是26字节,查看服务器返回的 ...