【原】训练自己的haar-like特征分类器并识别物体(3)

在前两篇文章中,我介绍了《训练自己的haar-like特征分类器并识别物体》的前三个步骤:

1.准备训练样本图片,包括正例及反例样本

2.生成样本描述文件

3.训练样本

4.目标识别

==============

本文将着重说明最后一个阶段——目标识别,也即利用前面训练出来的分类器文件(.xml文件)对图片中的物体进行识别,并在图中框出在该物体。由于逻辑比较简单,这里直接上代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

int _tmain(int argc,
_TCHAR* argv[])

{

    char *cascade_name
= CASCADE_HEAD_MY;
//上文最终生成的xml文件命名为"CASCADE_HEAD_MY.xml"

    cascade
= (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
//加载xml文件

 

    if(
!cascade )

    {

        fprintf(
stderr,
"ERROR:
Could not load classifier cascade\n"
 );

        system("pause");

        return -1;

    }

    storage
= cvCreateMemStorage(0);

    cvNamedWindow(
"face",
1 );

 

    const char*
filename =
"(12).bmp";

    IplImage*
image = cvLoadImage( filename, 1 );

 

    if(
image )

    {

        detect_and_draw(
image );
//函数见下方

        cvWaitKey(0);

        cvReleaseImage(
&image );  

    }

    cvDestroyWindow("result");

    return 0;

}

 1 void detect_and_draw(IplImage* img )
 2 {
 3     double scale=1.2;
 4     static CvScalar colors[] = {
 5         {{0,0,255}},{{0,128,255}},{{0,255,255}},{{0,255,0}},
 6         {{255,128,0}},{{255,255,0}},{{255,0,0}},{{255,0,255}}
 7     };//Just some pretty colors to draw with
 8
 9     //Image Preparation
10     //
11     IplImage* gray = cvCreateImage(cvSize(img->width,img->height),8,1);
12     IplImage* small_img=cvCreateImage(cvSize(cvRound(img->width/scale),cvRound(img->height/scale)),8,1);
13     cvCvtColor(img,gray, CV_BGR2GRAY);
14     cvResize(gray, small_img, CV_INTER_LINEAR);
15
16     cvEqualizeHist(small_img,small_img); //直方图均衡
17
18     //Detect objects if any
19     //
20     cvClearMemStorage(storage);
21     double t = (double)cvGetTickCount();
22     CvSeq* objects = cvHaarDetectObjects(small_img,
23         cascade,
24         storage,
25         1.1,
26         2,
27         0/*CV_HAAR_DO_CANNY_PRUNING*/,
28         cvSize(30,30));
29
30     t = (double)cvGetTickCount() - t;
31     printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );
32
33     //Loop through found objects and draw boxes around them
34     for(int i=0;i<(objects? objects->total:0);++i)
35     {
36         CvRect* r=(CvRect*)cvGetSeqElem(objects,i);
37         cvRectangle(img, cvPoint(r->x*scale,r->y*scale), cvPoint((r->x+r->width)*scale,(r->y+r->height)*scale), colors[i%8]);
38     }
39     for( int i = 0; i < (objects? objects->total : 0); i++ )
40     {
41         CvRect* r = (CvRect*)cvGetSeqElem( objects, i );
42         CvPoint center;
43         int radius;
44         center.x = cvRound((r->x + r->width*0.5)*scale);
45         center.y = cvRound((r->y + r->height*0.5)*scale);
46         radius = cvRound((r->width + r->height)*0.25*scale);
47         cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
48     }
49
50     cvShowImage( "result", img );
51     cvReleaseImage(&gray);
52     cvReleaseImage(&small_img);
53 }

===================================

其实上面的代码可以运用于大部分模式识别问题,无论是自己生成的xml文件还是opencv自带的xml文件。在opencv的工程目录opencv\data文件夹下有大量的xml文件,这些都是opencv开源项目中的程序员们自己训练出来的。然而,效果一般不会合你预期,所以才有了本系列文章。天下没有免费的午餐,想要获得更高的查准率与查全率,不付出点努力是不行的!

【原】训练自己的haar-like特征分类器并识别物体(3)

时间: 2024-11-03 02:17:45

【原】训练自己的haar-like特征分类器并识别物体(3)的相关文章

【原】训练自己haar-like特征分类器并识别物体(2)

在上一篇文章中,我介绍了<训练自己的haar-like特征分类器并识别物体>的前两个步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本描述文件 3.训练样本 4.目标识别 ================= 今天我们将着重学习第3步:基于haar特征的adaboost级联分类器的训练.若将本步骤看做一个系统,则输入为正样本的描述文件(.vec)以及负样本的说明文件(.dat):输出为分类器配置参数文件(.xml). 老规矩,先介绍一下这篇文章需要的工具,分别是(1)训练用的open

【原】训练自己haar-like特征分类器并识别物体(1)

本系列文章旨在学习如何在opencv中基于haar-like特征训练自己的分类器,并且用该分类器用于模式识别.该过程大致可以分为一下几个大步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本描述文件 3.训练样本 4.目标识别 ================= 本文主要对步骤1.步骤2进行说明. 1.准备训练样本图片,包括正例及反例样本 1)正样本的采集: 所谓正样本,是指只包含待识别的物体的图片,一般是一些局部的图片,且最好能转化为灰度图.比如,若你想识别人脸,则正样本应尽可能只包

机器学习_基于adaboost和haar like特征的人脸识别

基于adaboost做人脸识别的一篇论文         PAUL VIOLA  的 Robust Real-Time Face Detection      Rapid object detection using a boosted cascade of simple features 其中谈到使用haar like特征,参考这篇论文        Rainer Lienhart and Jochen Maydt 的 An Extended Set of Haar-like Features

脸部识别-急求!在线等!问一个关于特征脸人脸识别的问题!

问题描述 急求!在线等!问一个关于特征脸人脸识别的问题! 我想问一个问题,比如说,A 和B长的很像,有罪犯的照片C,如何确定A B那个是罪犯?这个问题是关于特征维度的取法提高信息数量还是改进特征提取方法选取A B的最大差异部分匹配 或者是 关于不同距离分类器的识别效果呢? 解决方案 可以两个都做,然后打分,取加权分.哪个分高哪个就是 解决方案二: 这个题目的要求就是提高准确度吗?

北大团队研发“车脸”识别系统,不看车牌看外观特征实现精确识别

北京大学信息科学技术学院田永鸿等三名研究人员研发了根据汽车外观特征,而非扫描车牌号来精确识别摄像头拍摄的车辆的新技术.研究人员称该项技术也能用于人脸识别和行人检测,能为侦破盗窃车辆等案件提供帮助. 论文:https://arxiv.org/pdf/1708.02386.pdf 据<参考消息>8月30日引西媒报道,北京大学信息科学技术学院田永鸿等三名研究人员研发了根据汽车外观特征精确识别摄像头拍摄的车辆的新技术.该系统不再依靠扫描车牌号,而是基于对车辆外观特征的记录和分析,如轮廓线条.碰撞损伤或

未来改变企业安全体系形态的几种安全产品

众所周知,云计算.SaaS等在很大程度上的改变现在企业的IT架构.新型的安全问题层出不穷,敏感数据泄露.数据绑架勒索等安全风险,更成为越来越严重的安全问题.企业在治理自己的信息安全的时候,依然只能选择IPS.WAF.IDS,防火墙等安全产品来解决问题,但安全产品的世界是否仅限于此? 不然,其实还有很多创新型产品从更多的新角度帮我们全面解决信息安全问题.本文带大家一起来检视一下这些新型的安全产品. 1.关键词:欺骗防御 (云蜜网) 代表产品: 国内:默安科技(幻盾) 国外:Illusive Net

浅析人脸检测之Haar分类器方法

很久没有看到这么精彩的博客了,必须转  [补充] 这是我时隔差不多两年后, 回来编辑这篇文章加的这段补充, 说实话看到这么多评论很是惊讶, 有很多评论不是我不想回复, 真的是时间久了, 很多细节我都忘记了, 无力回复, 非常抱歉.  我本人并非做CV的, 这两年也都没有再接触CV, 作为一个本科毕业的苦逼码工, 很多理论基础都不扎实, 回顾这篇文章的时候, 我知道其实有很多地方都是写的模棱两可, 加这个补充, 也是希望看这篇文章同学要带着批判的眼光来看, 要想透彻的理解算法, 一是要看透算法原作

《Arduino家居安全系统构建实战》——2.5 训练第一个分类器

2.5 训练第一个分类器 实现通用算法之后,我们最终可以回到手上的问题--识别哪些消息是非垃圾短信,哪些是垃圾短信.Train函数的签名提供了目标的清晰概况:要获得分类器,需要一个示例训练集.一个标记化程序和选用的标记.我们已经得到了训练集,现在的目标是使用交叉验证指导分析,确定标记化程序和标记的最佳组合. 2.5.1 实现第一个标记化程序 考虑到上述情况,我们先完成可行的最简单工作,首先是标记化.我们所要做的是取得一个字符串,将其分解为单词,忽略大小写. 这项工作需要正则表达式:\w+模式匹配

级联分类器 训练-级联分类器的具体训练过程

问题描述 级联分类器的具体训练过程 级联分类器的识别过程是十分清楚地,一级一级的. 但是训练过程是如何做的呢? 如何确定每一级的阈值? 如何保证后面的分类器比前面的分类器效果好?