基于AdaBoost的人脸检测
原地址:http://blog.csdn.net/celerychen2009/article/details/8839097
人脸检测和人脸识别都是属于典型的机器学习的方法,但是他们使用的方法却相差很大。
对于人脸检测而言,目前最有效的方法仍然是基于Adaboost的方法。在网上可以找到很多关于Adaboost方法的资料,但基本上是千篇一律,没有任何新意。给初学者带了很多不便。建议初学者只需要认真阅读:北京大学 赵楠 的本科毕业论文 :基于 AdaBoost算法的人脸检测 这篇毕业论文就够了。作者详细分析了Adaboost算法在人脸检测中的具体执行过程,尤其是关于弱分类器的Haar特征选取过程,描述的相当清晰。
至于人脸检测的代码,网上基本上是关于如何用openCV去做人脸检测的代码。如果不需要对性能做更高的要求的话,直接用openCV就可以了。
根据对openCV代码的理解,我重新提取了openCV人脸检测的代码,采用纯C语言实现了人脸检测,与openCV的代码项目相比,有一下几点不同:
1. 使用内存少。
1.1 原始openCV在检测初始化的时候分配一个很大的buffer,在人脸检测当中使用这个buffer,这个是由openCV的内存管理机制决定的。但在很多时候,图像大小一般都没有想象的那么大,这个大buffer只使用了其中的一小部分,内存空闲很大。在我的人脸检测中,根据图像大小分配2张图片大小内存,分别存放积分图和平方积分图。其它的内存是结构体占用的内存,一般比较小。
1.2 原始openCv分类器文件是XML文本文件,而在我的人脸检测之中是二进制文件。所以分类器文件比openCV小至少5倍以上。
2. 运行效率高
删除了Canny边缘检测的代码,针对具体的应用重新修改了算法执行中的部分参数。由于分类器是基于openCv改的,所以对人脸检测的准确率没有任何下降。
目前算法的代码虽然是纯C语言,但还没有做定点优化。目前的性能在iPod4上面,对于640x480的图片,检测单张人脸的时间是60ms左右。
如果对adaBoost算法本身感兴趣,除了可以阅读openCv中的代码之外,还有一个官方的代码,实现了各种AdaBoost算法。
部分人脸检测图片的结果如下:


另外一张图片:


测试图片来自网络,如涉及到版权问题,请告知!
基于AdaBoost的人脸检测的更多相关文章
- 基于Adaboost的人脸检测算法
AdaBoost算法是一种自适应的Boosting算法,基本思想是选取若干弱分类器,组合成强分类器.根据人脸的灰度分布特征,AdaBoost选用了Haar特征[38].AdaBoost分类器的构造过程 ...
- 基于Haar特征的Adaboost级联人脸检测分类器
基于Haar特征的Adaboost级联人脸检测分类器基于Haar特征的Adaboost级联人脸检测分类器,简称haar分类器.通过这个算法的名字,我们可以看到这个算法其实包含了几个关键点:Haar特征 ...
- 照片美妆---基于Haar特征的Adaboost级联人脸检测分类器
原文:照片美妆---基于Haar特征的Adaboost级联人脸检测分类器 本文转载自张雨石http://blog.csdn.net/stdcoutzyx/article/details/3484223 ...
- 使用Dlib来运行基于CNN的人脸检测
检测结果如下 这个示例程序需要使用较大的内存,请保证内存足够.本程序运行速度比较慢,远不及OpenCV中的人脸检测. 注释中提到的几个文件下载地址如下 http://dlib.net/face_det ...
- 【AdaBoost算法】基于OpenCV实现人脸检测Demo
一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...
- 基于OpenCv的人脸检测、识别系统学习制作笔记之二
在网上找到了一个博客,里面有大量内容适合初学者接触和了解人脸检测的博文,正好符合我目前的学习方面,故将链接放上来,后续将分类原博客的博文并加上学习笔记. 传送门: http://blog.sina.c ...
- 基于OpenCv的人脸检测、识别系统学习制作笔记之一
基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...
- 基于OpenCv的人脸检测、识别系统学习制作笔记之三
1.在windows下编写人脸检测.识别系统.目前已完成:可利用摄像头提取图像,并将人脸检测出来,未进行识别. 2.在linux下进行编译在windows环境下已经能运行的代码. 为此进行了linux ...
- 基于opencv的人脸检测的web应用
参考资料 https://github.com/bsdnoobz/web-based-face-detect http://opencv-code.com/projects/web-based-int ...
随机推荐
- Eclipse用法和技巧二十六:浅谈快捷键
网络上到处都是eclipse有哪些常用的快捷键,其中还有很多讲得着实不错,这里就不再狗尾续貂而是谈谈别的这段时间的一些思考.最近加入了开发团队,代码量突突的上去了,同时也发现关于快捷键还是有很多细节, ...
- BZOJ 3357: [Usaco2004]等差数列( dp )
dp(x, p) 表示序列中第x个数, 上一个数是p构成的等差数列的最长. 转移时从[1, x)中枚举p = seq[] 就行了.时间复杂度O(n²logn) -------------------- ...
- jquery遍历筛选数组的几种方法和遍历解析json对象
jquery grep()筛选遍历数组 $().ready( function(){ var array = [1,2,3,4,5,6,7,8,9]; var fil ...
- HDU 4544 湫湫系列故事――消灭兔子
HDU 4544 Tags: 数据结构,贪心 Analysis: 将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量, 将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每 ...
- Swift - 闭包的介绍及用法(以数组排序为例)
闭包(即一些小的匿名代码块),可以像函数一样使用.可以很方便的将闭包传给其他函数,告诉它们应当如何执行某一个任务. 1,使用sort方法和闭包进行数组排序 sort方法返回一个数组的有序版本.(sor ...
- 控件风格19种,必须倒背如流——其实就是控件所拥有的能力,即有条件使用VCL框架所提供的(功能)代码
{ New TControlStyles: csNeedsBorderPaint and csParentBackground. These two ControlStyles are only ap ...
- 在webx.ml中 配置struts2 后 welcome-file-list 失效的解决办法
struts2 <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.a ...
- Eclipse ADT 更换主题
如果Eclipse 版本3.6以上 在 Help→Eclipse Marketplace 搜索 Theme 之后安装即可 如果Eclipse版本3.5 一下, 通过地址安装插件: http://ecl ...
- 使用SetLocaleInfo设置时间后必须调用广播WM_SETTINGCHANGE,通知其他程序格式已经更改
uses messages; Procedure SetDateFormat; //设置系统日期格式var buf:pchar; i:integer; p:DWORD;begin getmem(buf ...
- 自绘ListBox的两种效果
本文利用Listbox自绘实现了两种特殊效果(见图),左边的风格是自己突然灵感触发想到的,右边的风格来自"C++ Builder 研究"的一个帖子,老妖用BCB实现了,这里则用Delphi实现它. 演 ...