OpenCV人脸检测的速度

转载 2012年03月25日 18:17:21

OpenCV人脸检测的速度

帖子由 alkmaar » 2012-03-20 10:19

各位大虾好,小弟有一个关于OpenCV人脸检测的问题想请教一下:
我用摄像头打开480x640的窗口,然后使用OpenCV的人脸检测函数cvHaarDetectObjects进行人脸检测。函数配置如下:

faces = cvHaarDetectObjects( detectImg, (CvHaarClassifierCascade*)cascade, storage, search_scale_factor, 3, flags, minFeatureSize ); 

其中, search_scale_factor是1.1, flags = CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH; 也就是说只找一张人脸。 minFeatureSize是(20,20)。
这样的配置在有人脸的情况下可以实时检测,大概就是十几ms的样子。

现在有一个问题是:当窗口没有人脸的时候,这个人脸检测函数貌似要搜索整幅图直至最终确定没有人脸。这种情况下大概需要近一秒的时间。小弟想问一下:这种情况正常吗?我以前看到别人的人脸检测demo程序在有没有人脸的情况下视频窗口都是实时活动的,不会像我的程序这样,在没有人脸的时候,当前帧得卡住,一直等到cvHaarDetectObjects执行完。请问,是不是我的函数配置有问题啊?

烦请大虾不吝赐教,谢谢啊。


我来回复楼下评论各位:(2014-08-06)

search_scale_factor 弄大一点,比如1.3
minFeatureSize是(20,20)弄大一点,比如50 * 50


这个opencv内部检测过程,我武断的推理一下,就是先找大的,先大的套一个框,框内部图像内容通过直方图等方法检测是否可能是脸。


大的找不到咋办,把框弄小一点(我估计那个1.1的参数用在这里),先套在一个位置检查,不行就把框步进移动一下,得到新框范围接着检查。


如果步进完了还没有咋办,再用1.1参数缩小一点。直到小于minFeatureSize终止检测。


所以,如果图像里面有头像,速度比较快,因为很快找到。如果图像里面没有头像,就每次都检测完所有的框,就会很卡。


一些捡的比较快的技术,就是用了历史来检测,例如上一帧在x, y附件有脸,这一帧或几帧后也在x, y附近先找。找不到再适当放大一点,缩小一点啥的。


如果都找不到,就放慢检测速度,比如这帧检测检查大框,下帧检测中框,再下次检测小框。总之就是避免卡。


因为脸首次检测灵敏度慢点没问题的,检测到了后跟踪的好,其用户体验才是真的好。


可惜,opencv流行的用法只会蛮力,没头像时贼卡。


还有一个最简单的方式,把图像缩小,尽可能缩小(就是勉强满足检测灵敏度就行),再给opencv检测(显示时还是大图,小图若检测到脸,需要按比例找到在大图中的位置)。这个方法我用过,好用,配合那个参数调整,基本不会觉得卡的。




怎么把人脸检测的速度做到极致

转载自: 【技术共享】怎么把人脸检测的速度做到极致   http://mp.weixin.qq.com/s?__biz=MzA3NDU3MTc1Ng==&mid=2651165778&idx=1&...

OpenCV实践之路——人脸识别之三识别自己的脸

在之前OpenCV实践之路——人脸识别之一数据收集和预处理和OpenCV实践之路——人脸识别之二模型训练两篇博客中,已经把人脸识别的整个流程全部交代清楚了。包括今天这篇人脸识别方面的内容都已经在上述第...

使用Opencv的dnn模块进行深度学习人脸识别(速度较慢)

这里给出了一个样例,如何使用Opencv的dnn模块进行人脸识别,因为在编译Opencv时似乎没有加上WITH_CUDA,所以导致forward()的传播速度巨慢,但是不影响我们进行实验。准备工作1、...

转:让opencv输出人脸检测的得分(置信率)

让opencv输出人脸检测的得分(置信率) 最近项目略多,其中一个需要找出一些和脸比较像但是不是脸的负样本,想用opencv的人脸检测器检测到的错误脸作为这样的负样本。 但是国内(...
  • hua_007
  • hua_007
  • 2015年04月29日 16:45
  • 3537

Dlib人脸特征点检测(速度优化)

Dlib
  • Leo_812
  • Leo_812
  • 2016年07月18日 21:25
  • 14233

算法优化——如何将人脸检测的速度做到极致

“人脸检测”是从图像中确定人脸的位置和大小,如下图所示;“人脸识别”是识别图像中的人脸是张三还是李四,是身份识别。   人脸检测最经典的方法是Haar+AdaBoost。...

一种改进的快速人脸检测算法

针对AdaBoost人脸检测算法易受到纹理干扰而造成误检的情况,提出了一种结合自适应肤色验证的快速人脸检测算法CMFS。该算法首先用运动检测为前置处理减小人脸检测搜索范围,然后用AdaBoost算法检...

于仕琪的人脸检测算法

于仕琪的人脸检测算法,对Windows下的商业使用也免费。刚更新了一次算法:①正面人脸检测的角度范围从[-40, 40]度提升到[-60,60]度,检测角度变大但计算量不增加;②多视角人脸检测速度提...

学习OpenCV——初始化视频第一帧

在很多视频跟踪或分割中,总是需要初始化第一帧,即在第一帧上画一个框,或者标注前景与背景啊等等,今天就把初始化第一帧,在第一帧上画一个框的代码实现了一下,顺便复习一下OpenCV里面的鼠标召回事件,在此...

Python机器学习实战:我的共享单车被谁骑走了?

專 欄 ❈王莉,Python中文社区专栏作者。985硕士,本科统计专业,迷途知返的统计人,热爱数学,喜欢数据,狂爱钻研,目前转型做数据挖掘工程师,期待与更多同业人交流。❈        ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV人脸检测的速度
举报原因:
原因补充:

(最多只允许输入30个字)