分类器的训练进行目标识别,以车辆识别为例

简介: 这是我对简单分类器的制作,对车辆的正面进行识别,因为用的素材较少,所有效果并不是很好。

一、从网络上下载或者自己找到的图片中裁剪挑选出合适的图片。
图片的大小和格式都要相同,准备好两个文件夹,分别命名为posdata(正样本)和negdata(负样本),所有样本的尺寸必须一致,如果不一致的或者尺寸较大的,可以先将所有样本统一缩放到100*40。posdata中的图片为车辆样本。给分类器展示的是正确的样本。
20180924141706767

negdata中的图片为一些背景样本,里面不包含车辆,是用来告诉分类器哪些是错误的样本。虽然负样本就是样本中不存在正样本的内容,但最好是根据不同的项目选择不同的负样本,比如一个项目是做机场的人脸检测,那么就最好从现场拍摄一些图片数据回来,从中采集负样本。 
20180924153308877

二、在negdata和posdata文件夹准备好之后,使用命令提示符(win + r),输入cmd,把位置切换到posdata文件夹的位置。

20180924153952871

20180924154259915

然后在里面输入“ dir /b/s/p/w *.jpg > pos.txt ”,将会在posdata文件夹中产生一个pos.txt的文档。打开pos.txt,选择编辑-替换,在查找中搜索jpg,替换为jpg 1 0 0 100 40,之后保存,将pos.txt复制到上一级目录中。
20180924154852839
20180924155358852

2018092415541760

 之后对negdata文件夹进行相同的操作,在cmd中输入的语句为“ dir /b/s/p/w *.jpg > neg.txt ”。

三、找到自己下载的OpenCV文件夹,打开opencv,打开build,打开x64,打开vc14,打开bin文件夹。
2018092415582922

选择opencv_createsamples.exe和opencv_traincascade.exe两项,将其复制到需要的文件夹中,与negdata、posdata并列。 

20180924160139734

四、打开cmd,在该文件目录下输入“ opencv_createsamples.exe -vec pos.vec -info pos.txt -num 32 -w 100 -h 40 ” 。
        pos.txt 表明这是正样本;

        num 32 代表正样本照片数量;

       w 100  h40表示图片分辨率(宽和高)

20180924160709338

之后在该文件夹中会出现pos.vec

20180924160839820

之后重复该步骤,cmd输入的语句换为“ opencv_createsamples.exe -vec neg.vec -info neg.txt -num 100 -w 100 -h 40 ”,产生neg.vec。

五、在主文件夹下创建一个txt文档,命名为“traincascade”。
在该txt中输入


opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 32 -numNeg 100 -numStages 20 -w 100 -h 40 -mode ALL


pause

”

numPos 32 代表正样本照片数量   numNeg100 表示负样本照片数量     numStage 20表示检测次数   pause为暂停

对“traincascade.txt”进行重命名,将后缀名改为bat。

 之后双击“traincascade.bat”。会产生如下效果

20180924162116220

 训练分类器时占用CPU空间多,电脑运行将会变卡,处理时间较长。处理完成之后将会在文件夹下生成一个cascade.xml。

六、 之后可以运行VS,新建一个VC++项目。输入一下代码之后进行测试。
代码为:

#include<opencv2\opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

String filename = "F:/车辆样本2/cascade.xml";  //之前cascade.xml放置的位置
CascadeClassifier car_classifier;

int main(int argc, char**argv)
{
    if (!car_classifier.load(filename))
    {
        printf("could not laod car feature data..\n");
        return -1;
    }

    Mat src = imread("D:/图片/15.jpg"); //需要检测的图片
    if (src.empty())
    {
        printf("could not laod image...\n");
        return -1;
    }
    imshow("inupt image", src);
    Mat gray;
    cvtColor(src, gray, COLOR_BGR2GRAY);
    equalizeHist(gray, gray);

    vector<Rect>cars;
    car_classifier.detectMultiScale(gray, cars, 1.1, 3, 0, Size(50, 50));
    for (size_t t = 0; t < cars.size(); t++)
    {
        rectangle(src, cars[static_cast<int>(t)], Scalar(0, 0, 255), 2, 8, 0);
    }

    imshow("detect cars", src);
    waitKey(0);
    return 0;

}

20180924222311508

 之后点击运行,因为设置的正负样本过少的原因,效果不是很明显。出现效果如下:

20180924222517730

目录
相关文章
|
7月前
|
机器学习/深度学习 编解码 监控
手把手改进yolo训练自己的数据(坑洼路面识别)
手把手改进yolo训练自己的数据(坑洼路面识别)
|
11天前
|
机器学习/深度学习 运维 安全
图神经网络在欺诈检测与蛋白质功能预测中的应用概述
金融交易网络与蛋白质结构的共同特点是它们无法通过简单的欧几里得空间模型来准确描述,而是需要复杂的图结构来捕捉实体间的交互模式。传统深度学习方法在处理这类数据时效果不佳,图神经网络(GNNs)因此成为解决此类问题的关键技术。GNNs通过消息传递机制,能有效提取图结构中的深层特征,适用于欺诈检测和蛋白质功能预测等复杂网络建模任务。
31 2
图神经网络在欺诈检测与蛋白质功能预测中的应用概述
|
24天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的地面垃圾识别分类技术
AI垃圾分类系统结合深度学习和计算机视觉技术,实现高效、精准的垃圾识别与自动分类。系统集成高精度图像识别、多模态数据分析和实时处理技术,适用于市政环卫、垃圾处理厂和智能回收设备,显著提升管理效率,降低人工成本。
基于深度学习的地面垃圾识别分类技术
|
机器学习/深度学习 存储 算法
【使用深度学习的城市声音分类】使用从提取音频特征(频谱图)中提取的深度学习进行声音分类研究(Matlab代码实现)
【使用深度学习的城市声音分类】使用从提取音频特征(频谱图)中提取的深度学习进行声音分类研究(Matlab代码实现)
289 0
|
机器学习/深度学习 人工智能 算法
准确率达 95%,机器学习预测复杂新材料合成
准确率达 95%,机器学习预测复杂新材料合成
193 0
|
机器学习/深度学习 人工智能 算法
基于深度学习的农作物叶片病害检测系统(UI界面+YOLOv5+训练数据集)
基于深度学习的农作物叶片病害检测系统(UI界面+YOLOv5+训练数据集)
763 1
|
机器学习/深度学习 人工智能 监控
基于深度学习的人群密度检测系统(UI界面+YOLOv5+训练数据集)
基于深度学习的人群密度检测系统(UI界面+YOLOv5+训练数据集)
715 0
|
机器学习/深度学习 计算机视觉 Python
实时交通标志检测和分类(附代码)
实时交通标志检测和分类(附代码)
|
机器学习/深度学习 PyTorch 测试技术
【Pytorch神经网络实战案例】28 GitSet模型进行步态与身份识别(CASIA-B数据集)
该数据集是一个大规模的、多视角的步态库。其中包括124个人,每个人有11个视角(0,18,36,...,180),在3种行走条件(普通、穿大衣、携带包裹)下采集。
406 0