Opencv---训练自己的级联分类器(附数据集)

任务:在本文章,我们将进行苹果检测。我们需要创建一个自己的级联分类器,该分类器是后缀为xml文件,使用它也很简单,只需要文件存放的路径,和cv2.CascadeClassifier()函数即可。

一、opencv自带工具的下载(注:只有老版本有自带)

想使用的话直接下载就行,给大家放在下面链接了,我们只需要使用俩个.exe文件,使用也简单,放心下载吧。

  链接:https://pan.baidu.com/s/1vCdmWnRRjRNmOCKm30602w?pwd=zur8 
  提取码:zur8

二、理论介绍

        使用基于Haar特征的级联分类器的对象检测是Paul Viola和Michael Jones在其论文“使用简单特征的增强级联进行快速对象检测”中于2001年提出的一种有效的对象检测方法。这是一种基于机器学习的方法,其中从许多正负图像中训练级联函数。然后用于检测其他图像中的对象。

三、评价与思考

        opencv自带了训练级联分类器​​​的文件,使用后的评价:

  • 使用简单,图像分类的输出只有是和否,新手如果想快速上手,早点看到效果,可以选择制作自己的分类器
  • 如果对图像识别方向很感兴趣,还是建议学习神经网络,训练自己的模型。

四、正式步骤

  1. 正样本的处理
  2. 负样本的处理
  3. 训练级联分类器
  4. 目标检测

4.1

        正样本选用的是5张苹果图,大家在百度上搜就行了,把原图放进自己的文件夹。为了避免颜色干扰还有尺度不同带来的干扰,我们将使用opencv的几个函数对图像进行处理保存,因为比较简单,就不对函数进行解释了。


# -*- coding=utf-8 -*-
import os
import sys
import cv2
 
#输入图片的
input_dir = './input_img'
output_dir = './output_img'
 
width = 50
height = 50
 
if not os.path.exists(output_dir):
    os.makedirs(output_dir)
 
index = 1
for (path,dirnames,filenames) in os.walk(input_dir):
    for filename in filenames:
        if filename.endswith('.jpg'):
            print('正在处理第 %s 张图片' % index)
            img_path = path + '/' + filename
            img = cv2.imread(img_path)
            image=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
            new_img = cv2.resize(image,(width,height))
            cv2.imwrite(output_dir + '/' + str(index) + '.jpg', new_img)
            index += 1
            key = cv2.waitKey(30) & 0xff
            if key == 27:# esc键
                sys.exit(0)

Opencv---训练自己的级联分类器(附数据集)_第1张图片

         如图我们需要建立一个pos.txt文件,它的格式格式为:图片路径     检测目标在图片中的个数     起始监测点坐标(x,y)   图片大小(w,h),可以用cmd运行命令行再手动添加后面这些数字,python水平高也可以写代码跑一些,偷懒的话数据量小直接跟着打就行hhh,不过这一步不能出错哦。

4.2负样本的处理

        负样本的数量至少要正样本的4倍哦,建议选择一些和正样本有关的图片,例如香蕉,梨子,葡萄,偷懒了选择下载了一些人的数据集,需要的话自取,对了,图像已经经过灰度和尺寸处理了。

链接:https://pan.baidu.com/s/1qM51JSaA5_lD5arL9ghjug?pwd=aqkf 
提取码:aqkf
dir/b /s > pos.txt

        上面是cmd的命令行哦,注意得先cd进去目录,/s是绝对路径,很多人在最后的运行会报错,使用绝对路径你的neg文件可以随便放,还少了报错的风险。

4.3训练级联分类器

cmd下运行以下命令 cd进去exe文件,运行完代码会有ves.pos文件生成,正样本的处理结束!

opencv_createsamples.exe -vec pos.vec -info 路径 -num 5 -w 50 -h 50。

最后将pos.vec和neg.txt文件拷贝到同一文件夹下,即可开始我们的训练之旅行。

opencv_traincascade.exe -data data -vec pos.vec -bg neg.txt -numPos 5 -numNeg 2000 -numStages 2 -featureType HOG -w 50 -h 50

Opencv---训练自己的级联分类器(附数据集)_第2张图片

效果如下,亲测数据少几分钟就训练完成哦,这个cascade即为我们的分类器。 

上面的参数需要改改哦,偷懒了不做解释了。下一篇写一下对xml文件的使用(附代码)。

你可能感兴趣的:(opencv,深度学习,计算机视觉)