OpenCV之使用Haar Cascade进行对象检测

Haar Cascade常用来做人脸检测,其实它可以检测任何对象。OpenCV项目源码中有很多训练好的Haar分类器。

OpenCV之使用Haar Cascade进行对象检测
OpenCV自带的haarcascade文件

本帖开始先了解怎么使用这些现成的分类器,最后再训练自己的Haar分类器。如果你要检测什么物体,先Google,也许已经有训练好的Haar分类器了(像汽车、猫,狗之类的)。

如果你没有安装OpenCV,参考:Ubuntu编译安装OpenCV 3.1(Python)

使用OpenCV自带的Haar分类器检测脸和眼睛,代码:

OpenCV之使用Haar Cascade进行对象检测

使用摄像头做为输入,实时检测:

上面我们使用的是训练好的分类器文件,如果你要检测的物体没有现成的Haar分类器,我们只能自己训练了,其中最费事的部分就是制作训练样本。

训练Haar分类器的主要步骤:

  1. 搜集制作成千上万张”消极”图像,什么图片都行,但是确保要检测的对象不在图像中
  2. 搜集制作成千上万张”积极”图像,确保这些图像中包含要检测的对象
  3. http://image-net.org是不错的图像资源站
  4. 创建”积极”向量文件
  5. 使用OpenCV训练Haar分类器

为了简单,我使用一张图片制作”积极”图像:

OpenCV之使用Haar Cascade进行对象识别
做一个能检测我鼠标的Haar分类器

这是我的鼠标,我就使用这一张图片制作”积极”图像,没错,最后训练出来的Haar分类器只能识别这个特定鼠标。如果你想要识别各种各样的鼠标,你需要搜集整理包含各种鼠标的图片(标记出图片中鼠标所在位置-ROI),即使有工具的帮助,这个工作也是相当痛苦的。

下载”消极”图像

找点和鼠标不想干的图片:image-net

OpenCV之使用Haar Cascade进行对象识别

Downloads中包含图像地址:

OpenCV之使用Haar Cascade进行对象识别

写一个简单的Python脚本下载图片:

  • 很多url被墙,你可能需要使用代理。(参考:使用Tor的匿名Python爬虫)
  • 下载的文件很多,为了提速,你可以把上面代码改为多线程。

OpenCV之使用Haar Cascade进行对象识别

创建消极图片列表:

创建的neg.txt内容如下:

OpenCV之使用Haar Cascade进行对象识别
我下载了2000+图片

制作”积极”图像

我使用OpenCV提供的opencv_createsamples命令创建pos.txt文件。它会把要识别的图片嵌入到消极图像中,允许我们快速创建”积极”图像:

生成的pos.txt文件:

OpenCV之使用Haar Cascade进行对象识别
第一列代表“积极”图像路径;后面数字代表图像中有几个要识别对象和对象所在位置

你可以看看生成的“积极”图像,这些图像中嵌入了要识别的鼠标。

上面的”积极图像”是自动生成的,这要是手工制作,那工作量可想而知。

创建向量文件

不管你用什么方法制作”积极”图像,都需要把它转换为向量格式:

开始训练

大概需要几个小时,我电脑不给力,上面参数设置的都比较小。

OpenCV之使用Haar Cascade进行对象识别

训练完成之后生成的haar分类器(cascade.xml)保存在data目录。

测试生成的haar分类器

OpenCV之使用Haar Cascade进行对象识别

相关文章

《OpenCV之使用Haar Cascade进行对象检测》有2个想法

  1. 请问下我想做一个图片主题的分类器(给机器一张照片,他会返回这种图片的主题,如丝袜,美腿,大xiong )
    我应该怎么做啊。。。。。。。
    求指导一条路

发表评论

电子邮件地址不会被公开。 必填项已用*标注