(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

这篇具有很好参考价值的文章主要介绍了(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、准备阶段

 二、图片处理

​三、生成描述文件

 四、生成.vec文件

  五、生成.xml自定义分类器文件

 六、识别检测


一、准备阶段

正样本集:正样本集为包含“识别物体”的灰度图,一般大于等于2000张,尺寸不能太大,尺寸太大会导致训练时间过长。

负样本集:负样本集为不含“识别物体”的任何图片,一般大于等于5000张,尺寸比正样本集稍大。一般为正样品集的3倍。

在当前文件夹下新建五个文件夹,pos和neg放处理后的图片,ini_pos和ini_neg放原来的图像,xml放以后自定义生成的分类器

将下载的正负样本集分别放入ini_pos和ini_neg文件夹。

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

我百度图片上下载了船的图片到ini_pos,鱼的图片到ini_neg

注意:好的正训练集最好还是图片中只有你需要的物体,而没有其他物体和背景干扰,百度图片里面有动图gif格式图片,不能通过opencv读取,下载完后看好图片后缀。

下面是初始的俩个样品集

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

 二、图片处理

样品集需要统一大小和统一改为灰度图

代码:

import cv2 as cv
import matplotlib.pyplot as plt
import os
#解决中文显示问题,固定格式,直接复制下面俩行代码就行
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False


pospath = "./ini_pos"#正样本集文件夹路径
pos = os.listdir(pospath)#读取路径下的所有文件
negpath = "./ini_neg"
neg = os.listdir(negpath)

#图片处理,注意图片不能有gif格式
def picdif():
    global pos,neg;
    i=1;
    for picname in pos:#遍历pos文件数组所有的文件名
        #读取灰度图
        pic=cv.imread(pospath+"\\"+picname)
        pic=cv.cvtColor(pic,cv.COLOR_BGR2GRAY)
        #修改尺寸
        pic=cv.resize(pic,(40,40))
        #保存图片
        cv.imwrite("./pos/"+str("%03d"%i)+".jpg",pic)
        i+=1

    #同理对负样本集进行处理
    j = 1;
    for picname in neg: # 遍历neg文件数组所有的文件名
        #读取灰度图
        pic=cv.imread(negpath+"\\"+picname)
        pic=cv.cvtColor(pic,cv.COLOR_BGR2GRAY)
        #修改尺寸
        pic=cv.resize(pic,(50,50))
        #重命名,并保存图片
        cv.imwrite("./neg/"+str("%03d"%j)+".jpg",pic)
        j+=1


if __name__ == '__main__':
# 1.导入文件夹,对图像统一处理,统一尺寸大小,统一灰度图
    picdif()

处理后的正负样本集和图片:

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

三、生成描述文件

正样本描述文件如下:

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

其中"1"为图片数量(0,0)坐标,(40,40)是正样本集的长宽

负样本描述文件如下:

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

代码更新:

a_main.py

import cv2 as cv
import os
#解决中文显示问题,固定格式,直接复制下面俩行代码就行
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False


pospath = "./ini_pos"#正样本集文件夹路径
pos = os.listdir(pospath)#读取路径下的所有文件
negpath = "./ini_neg"
neg = os.listdir(negpath)

#图片处理,注意图片不能有gif格式
def picdif():
    global pos,neg;
    i=1;
    for picname in pos:#遍历pos文件数组所有的文件名
        #读取灰度图
        pic=cv.imread(pospath+"\\"+picname)
        pic=cv.cvtColor(pic,cv.COLOR_BGR2GRAY)
        #修改尺寸
        pic=cv.resize(pic,(40,40))
        #保存图片
        cv.imwrite("./pos/"+str("%03d"%i)+".jpg",pic)
        i+=1

    #同理对负样本集进行处理
    j = 1;
    for picname in neg: # 遍历neg文件数组所有的文件名
        #读取灰度图
        pic=cv.imread(negpath+"\\"+picname)
        pic=cv.cvtColor(pic,cv.COLOR_BGR2GRAY)
        #修改尺寸
        pic=cv.resize(pic,(50,50))
        #重命名,并保存图片
        cv.imwrite("./neg/"+str("%03d"%j)+".jpg",pic)
        j+=1

# 描述文件生成
def createtxt():
    global pos, neg
    #正样本描述文件:
    for picname in pos:
        line ="pos/"+picname+" 1 0 0 40 40"+"\n"#"1"为图片数量(0,0)是坐标,(40,40)是正样本集的w,h
        with open('pos.txt', 'a') as f:
            f.write(line)
    #负样本描述文件:
    for picname in neg:
        line ="neg/"+picname+"\n"#(0,0)是坐标,(40,40)是正样本集的w,h
        with open('neg.txt', 'a') as f:
            f.write(line)
if __name__ == '__main__':
# 1.导入文件夹,对图像统一处理,统一尺寸大小,统一灰度图
    picdif()
    #pos和neg改成处理后的图片文件夹;
    pospath = "./pos"#正样本集文件夹路径
    pos = os.listdir(pospath)#读取路径下的所有文件
    negpath = "./neg"
    neg = os.listdir(negpath)
#2.正负样本描述文件的生成
    createtxt()

 四、生成.vec文件

获取opencv_createsamples.exe和opencv_traincascade.exe

这两个软件在opencv安装包里是没有的,只有下载opencv以及opencv_contrib源码自己编译才会生成这两个可执行程序

我是直接下载别人的程序,下面是网址

opencv341_bin: 编译opencv以及opencv_contrib以后的bin文件夹,里面包含一些可执行程序https://gitee.com/lizaozao/opencv341_bin注意下载依赖项解压到opencv_createsamples.exe和opencv_traincascade.exe同一目录下

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

在该主目录文件下打开终端窗口,win11可直接通过右键“在终端打开”

输入

 .\opencv_createsamples.exe -info pos.txt -vec detect_number.vec -bg neg.txt -num 19 -w 40 -h 40

-info 正样本txt

-vec 是你生成vec文件的位置和名称

-bg 负样本txt

-num 正样本数量

-w 正样本宽度

-h 正样本高度

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

  五、生成.xml自定义分类器文件

当前主目录文件夹终端下输入

./opencv_traincascade.exe -data xml -vec detect_number.vec -bg neg.txt -numPos 19 -numNeg 25 -numStages 20 -featureType HAAR -w 40 -h 40

-data 前面创建好的xml文件夹
-vec 是你之前生成vec文件
-bg 负样本集txt
-numPos 正样本的数量
-numNeg 负样本的数量
-numStages 训练步数
-featureType 特征类型 

训练时,提取图像特征的类型,目前只支持LBP、HOG、Haar三种特征。但是HAAR训练非常非常的慢,而LBP则相对快很多,因为HAAR需要浮点运算,精度自然比LBP更高
-w -h 正样本的宽高

结果:

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

由于样本较少,训练十秒就完成了

 六、识别检测

上一节课已经说了,直接上代码

[图像识别]12.Opencv案例 超简单人脸检测识别_ζั͡ ั͡雾 ั͡狼 ั͡✾的博客-CSDN博客1.原理:我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。Haar特征(这个值等于黑色矩形中的像素值之后减去白色矩形中的像素值和。)会被使用,就像我们的卷积核,每一个特征是一个值。Haar特征值反映了图像的灰度变化情况。Haar特征可用于于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征。https://blog.csdn.net/qq_54263076/article/details/127155374?spm=1001.2014.3001.5501

main.py文件

import cv2 as cv
import matplotlib.pyplot as plt

#解决中文显示问题,固定格式,直接复制下面俩行代码就行
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

# 加载分类器
cascade = cv.CascadeClassifier("./xml/cascade.xml")
cascade.load("./xml/cascade.xml")
# 读取灰度图片
pic1 = cv.imread("boat.jpg")
pic2= cv.imread("./ini_neg/0b46f21fbe096b639ef96b67fc926942eaf8ac49.jpeg")
pic1=cv.resize(pic1,(100,100))
pic2=cv.resize(pic2,(400,400))
pic2[200:300,100:200]=pic1
gray = cv.cvtColor(pic2,cv.COLOR_BGR2GRAY)
# 探测图片中的船只
faces = cascade.detectMultiScale(
    gray,
    scaleFactor = 1.1,
    minNeighbors = 150,
    minSize = (50,50),
)
#绘制矩形
pic3=pic2.copy()
for (x,y,w,h) in faces:
    cv.rectangle(pic3,(x,y),(x+h,y+w),(0,0,255),5)
#绘图
fig,axes=plt.subplots(nrows=1,ncols=2)
axes[0].imshow(pic2[:,:,::-1])
axes[0].set_title("原图")
axes[1].imshow(pic3[:,:,::-1])
axes[1].set_title("识别")

plt.show()
cv.waitKey()

(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

由于所选样本太太太太少,且有些正样本不纯不好,导致结果偏差比较大

根据以上教程,可以不断像文件夹添加样本图片达到上千,生成.vec和.xml文件,完成自己的物品识别,完整代码放在下面,可以自己下载修改

https://download.csdn.net/download/qq_54263076/86736208https://download.csdn.net/download/qq_54263076/86736208文章来源地址https://www.toymoban.com/news/detail-456398.html

到了这里,关于(终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Python+OpenCV智能答题卡识别系统——深度学习和图像识别算法应用(含Python全部工程源码)+训练与测试数据集

    本项目基于Python和OpenCV图像处理库,在Windows平台下开发了一个答题卡识别系统。系统运用精巧的计算机视觉算法,实现了批量识别答题卡并将信息导出至Excel表格的功能。这一解决方案使得答题卡的判卷过程变得轻便、高效且准确。 首先,我们以Python语言作为开发基础,结合

    2024年02月10日
    浏览(62)
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果

    目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之四 简单行人人体检测效果 一、简单介绍 二、简单行人人体检测效果实现原理 三、简单行人人体检测效果案例实现简单步骤 四、注意事项 Python是一种跨平台的计算机程序设计语言。是一种面向对

    2024年04月26日
    浏览(64)
  • 从计算机视觉(Computer Vision)的角度出发,从传统机器学习的特征工程、分类器设计和优化,到深度学习的CNN架构设计、训练优化、模型压缩与推理部署,详细阐述了图像识别领域最新的技术发展方向

    作者:禅与计算机程序设计艺术 在现代信息技术的快速发展过程中,图像识别技术越来越重要。早期的人工智能算法主要侧重于特征提取、分类或回归任务。近几年,随着神经网络(Neural Networks)在图像识别领域的不断突破,很多研究人员将目光投向了深度学习(Deep Learni

    2024年02月10日
    浏览(47)
  • mediapipe 训练自有图像数据分类

    参考: https://developers.google.com/mediapipe/solutions/customization/image_classifier https://colab.research.google.com/github/googlesamples/mediapipe/blob/main/examples/customization/image_classifier.ipynb#scrollTo=plvO-YmcQn5g 安装: 版本错误情况 1)RuntimeError: File loading is not yet supported on Windows 其中mediapipe版本要大于等于

    2024年02月06日
    浏览(39)
  • OpenCV分类检测器训练

    OpenCV中有两个程序可以训练级联分类器: opencv_haartraining 和opencv_traincascade。opencv_traincascade 是一个新程序,使用OpenCV 2.x API 以C++ 编写。这二者主要的区别是 opencv_traincascade 支持 Haar、Hog和 LBP(Local Binary Patterns) 三种特征,并易于增加其他的特征。与Haar特征相比,LBP特征是整数

    2024年02月17日
    浏览(47)
  • OpenCV的级联分类器训练

    使用增强级联的弱分类器包括两个主要阶段:训练和检测阶段。对象检测教程中有描述使用基于 HAAR 或 LBP 模型的检测阶段。这里主要介绍训练增强分类器级联所需的功能,包括:准备训练数据、执行实际模型训练、可视化训练。 目录 一、训练数据准备 1、负样本 2、正样本

    2024年02月13日
    浏览(43)
  • opencv python 训练自己的分类器

    源码下载 1.样本准备 收集好你所需的正样本,和负样本,分别保存在不同文件夹     在pycharm新建项目,项目结构如下:has_mask文件夹放置正样本,no_mask文件夹放置负样本  安装opencv,把opencv包里的文件复制到项目mask文件夹下    2.样本制作 (1)图片重命名 方便对样本进行批

    2024年02月15日
    浏览(49)
  • ResMLP:具有数据效率训练的图像分类前馈网络

    我们提出了ResMLP,一个完全建立在多层感知器上的图像分类体系结构。它是一个简单的残差网络, 交替使用(i)一个线性层,其中图像补丁在通道之间独立且相同地相互作用,以及(ii)一个两层前馈网络,其中通道在每个补丁之间独立相互作用。当使用大量数据增强和选择性蒸

    2024年02月15日
    浏览(55)
  • Pandas实战100例 | 案例 13: 数据分类 - 使用 `cut` 对数值进行分箱

    案例 13: 数据分类 - 使用 cut 对数值进行分箱 知识点讲解 在数据分析中,将连续的数值数据分类成不同的区间(或“分箱”)是一种常见的做法。Pandas 提供了 cut 函数,它可以根据你指定的分箱边界将数值数据分配到不同的类别中。 使用 cut 进行分箱 : 你可以指定一系列的边

    2024年01月17日
    浏览(59)
  • Pytorch实现鸟类品种分类识别(含训练代码和鸟类数据集)

    目录 Pytorch实现鸟类识别(含训练代码和鸟类数据集) 1. 前言 2. 鸟类数据集 (1)Bird-Dataset26 (2)自定义数据集 3. 鸟类分类识别模型训练 (1)项目安装 (2)准备Train和Test数据 (3)配置文件:​config.yaml​ (4)开始训练 (5)可视化训练过程 (6)一些优化建议 (7) 一些运

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包