opencv python 训练自己的分类器

这篇具有很好参考价值的文章主要介绍了opencv python 训练自己的分类器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源码下载文章来源地址https://www.toymoban.com/news/detail-612334.html

一、分类器制作

1.样本准备

收集好你所需的正样本,和负样本,分别保存在不同文件夹

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器 

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器 

在pycharm新建项目,项目结构如下:has_mask文件夹放置正样本,no_mask文件夹放置负样本

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 安装opencv,把opencv包里的文件复制到项目mask文件夹下

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 

 2.样本制作

(1)图片重命名

方便对样本进行批量处理,我们需要对样本进行重命名,重命名代码如下:

import os
# 正样本的路径
path = r'E:\pycharmWorkspace\maskTest\mask\has_mask'
filelist = os.listdir(path)
# 开始文件名1000.jpg
count = 1000
for file in filelist:
    Olddir = os.path.join(path, file)
    if os.path.isdir(Olddir):
        continue
    filename = os.path.splitext(file)[0]
    filetype = os.path.splitext(file)[1]
    Newdir = os.path.join(path, str(count) + filetype)
    os.rename(Olddir, Newdir)
    count += 1

# 负样本的路径
path = r'E:\pycharmWorkspace\maskTest\mask\no_mask'
filelist = os.listdir(path)
# 开始文件名10000.jpg
count = 10000
for file in filelist:
    Olddir = os.path.join(path, file)
    if os.path.isdir(Olddir):
        continue
    filename = os.path.splitext(file)[0]
    filetype = os.path.splitext(file)[1]
    Newdir = os.path.join(path, str(count) + filetype)
    os.rename(Olddir, Newdir)
    count += 1


(2)修改图片像素

将正样本尺寸统一修改为20×20来提高模型训练精度,负样本数据集像素不低于50×50

import cv2

# 代表正数据集中开始和结束照片的数字
for n in range(1000, 1099):
    path = r'C:\Users\Administrator\Desktop\mask\mask/' + str(n) + '.jpg'
    # 读取图片
    img = cv2.imread(path)
    img = cv2.resize(img, (20, 20))  # 修改样本像素为20x20
    cv2.imwrite(r'C:\Users\Administrator\Desktop\mask\mask/' + str(n) + '.jpg', img)
    n += 1

# 代表正数据集中开始和结束照片的数字
for n in range(10000, 10099):
    path = r'C:\Users\Administrator\Desktop\mask\no_mask/' + str(n) + '.jpg'
    # 读取图片
    img = cv2.imread(path)
    img = cv2.resize(img, (80, 80))  # 修改样本像素为80x80
    cv2.imwrite(r'C:\Users\Administrator\Desktop\mask\no_mask/' + str(n) + '.jpg', img)
    n += 1

 这里用到了python opencv库,在pycharm 控制台下用pip安装,以下命令可以解决opencv库安装速度慢的问题

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python --no-cache-dir

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 

3.生成资源记录文件 

在控制台进入has_mask文件夹

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 输入以下代码即可创建路径文件

dir /b/s/p/w *.jpg > have_mask.txt

此时在have_mask下就会产生一个have_mask.txt文件,并将其放到mask目录opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 进入no_mask文件夹,重复上述步骤即可

最后结果如下

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 之后要对正样本进行预处理,在have_mask.txt末尾加入1 0 0 20 20执行以下代码即可

#后缀
Houzhui=r" 1 0 0 20 20"
filelist = open(r'E:\pycharmWorkspace\maskTest\mask\have_mask.txt','r+',encoding = 'utf-8')
line = filelist.readlines()
for file in line:
    file=file.strip('\n')+Houzhui+'\n'
    print(file)
    filelist.write(file)
    
filelist = open(r'E:\pycharmWorkspace\maskTest\mask\no_mask.txt','r+',encoding = 'utf-8')
line = filelist.readlines()
for file in line:
    file=file.strip('\n')+Houzhui+'\n'
    print(file)
    filelist.write(file)

 4.生成vec文件

在terminal控制台进入到 mask 文件夹,然后输入如下命令

opencv_createsamples.exe -vec havemask.vec -info have_mask.txt -num 400 -w 20 -h 20

opencv_createsamples.exe参数的说明:


-vec <vec_file_name>
	输出文件,内含用于训练的正样本。他应该有一个.vec文件扩展名。

-info <file_name>
	这是指定输入示例集合的文件的名字,包括文件名和在图像中示例目标的位置(例如自己创建的.dat
	文件)。

-img <image_file_name>
	这是-info的替代(必须提供其中一个)。使用-img,你可以提供单个裁剪的正向示例。在使用-img的
	模式中,将产生多个输出,且都来自于这一个输入。

-bg <background_file_name>
	背景图像的描述文件,文件中包含一系列的图像文件名,这些图像将被随机选作物体的背景。

-num <number_of_samples>
	生成的正样本的数目。

-bgcolor <background_color>
	背景颜色(目前为灰度图);背景颜色表示透明颜色。因为图像压缩可造成颜色偏差,颜色的容差
	可以由 -bgthresh 指定。所有处于 bgcolor-bgthresh 和 bgcolor+bgthresh 之间的像素都被设置为
	透明像素。

-bgthresh <background_color_threshold>

-inv
	如果指定该标志,前景图像的颜色将翻转。

-randinv
	如果指定该标志,颜色将随机地翻转。

-maxidev <max_intensity_deviation>
	前景样本里像素的亮度梯度的最大值。

-maxxangle <max_x_rotation_angle>
	X轴最大旋转角度,必须以弧度为单位。

-maxyangle <max_y_rotation_angle>
	Y轴最大旋转角度,必须以弧度为单位。

-maxzangle <max_z_rotation_angle>
	Z轴最大旋转角度,必须以弧度为单位。

-show
	很有用的调试选项。如果指定该选项,每个样本都将被显示。如果按下 Esc 键,程序将继续创建样
	本但不再显示。

-w <sample_width>
	输出样本的宽度(以像素为单位)。

-h <sample_height>
	输出样本的高度(以像素为单位)。

 opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 

 得到havemask.vec文件  

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 5.训练模型

在当前文件夹下新建start.bat文件加入以下代码

opencv_traincascade.exe -data xml -vec havemask.vec -bg no_mask.txt -numPos 100-numNeg 100-numStages 20 -w 20 -h 20 -mode ALL
 
pause

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

在terminal执行start.bat

训练完成后在xml文件下即可看到以下文件,第一个文件即为我们训练好的分类器

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器 

二、检验分类器

 输入以下代码

import cv2
#加载分类器
mask_detector = cv2.CascadeClassifier(r'E:\pycharmWorkspace\maskTest\mask\xml\cascade.xml')
img = cv2.imread(r'D:\0001.jpg')
#转成灰度图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#进行预测
mask_face = mask_detector.detectMultiScale(gray, 1.1, 5, cv2.CASCADE_SCALE_IMAGE, (50,50), (200, 200))
for (x2, y2, w2, h2) in mask_face:
    cv2.rectangle(img, (x2, y2), (x2 + w2, y2 + h2), (0, 255, 0), 2)
    cv2.putText(img, "have_mask", (x2, y2), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    cv2.imshow('mask', img)
cv2.imshow('mask', img)
cv2.imwrite(r'D:/test.jpg', img)
cv2.waitKey()

 得到如下测试结果 ,效果不是很好

opencv python 训练自己的分类器,pyhon opencv,opencv,python,分类器

 

源码下载

到了这里,关于opencv python 训练自己的分类器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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)
  • NeuralNLP-NeuralClassifier的使用记录(二),训练预测自己的【中文文本多分类】

    ​ 与英文的训练预测一致,都使用相同的数据格式,将数据通过代码处理为JSON格式,以下是我使用的一种,不同的原数据情况会有所改动: 使用构造JSON数据方法: 1、创建中文数据文件夹,Chinese_datas, 2、创建该数据的文本数据对应的标签集Chinese_label.taxonomy 3、创建该数据

    2024年02月13日
    浏览(66)
  • NeuralNLP-NeuralClassifier的使用记录(一),训练预测自己的【英文文本多分类】

    NeuralNLP-NeuralClassifier是腾讯开发的一个多层多分类应用工具,支持的任务包括,文本分类中的二分类、多分类、多标签,以及层次多标签分类。支持的文本编码模型包括 FastText, TextCNN, TextRNN, RCNN, VDCNN等。这篇博客将介绍如何使用这个项目实现文本的多标签多分类任务。 这里记

    2024年02月12日
    浏览(37)
  • opencv C++ SVM模型训练与分类实现

    最近想学习一下分类算法的内容,恰好opencv有SVM的函数,故先从这个下手。找了许多资料,发现要么是opencv2、3的,要么就没有具体实现代码,学习还是把代码与原理一起结合来看比较好。 其中,我主要参考的是这一篇文章: 学习SVM(一) SVM模型训练与分类的OpenCV实现 htt

    2024年02月09日
    浏览(41)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测

    目录 一、准备阶段  二、图片处理 ​三、生成描述文件  四、生成.vec文件   五、生成.xml自定义分类器文件  六、识别检测 正样本集: 正样本集为包含“识别物体”的灰度图,一般大于等于2000张,尺寸不能太大,尺寸太大会导致训练时间过长。 负样本集: 负样本集为不含

    2024年02月06日
    浏览(35)
  • 分类模型训练pil、torchvision.transforms和opencv的resize

    参考:https://blog.csdn.net/weixin_41012399/article/details/126049885 https://www.cnpython.com/qa/1291644 https://blog.csdn.net/weixin_44966641/article/details/125084573 https://blog.csdn.net/IEEE_FELLOW/article/details/115536987 训练时用pil读取图片,使用torchvision.transforms.Resize 进行数据处理。因为transforms.Resize当输入为PIL图像

    2024年02月09日
    浏览(48)
  • yolov8训练自己的数据集与转成onnx利用opencv进行调用

    文章目录 系列文章目录 前言 一、利用labeling进行数据的创建? 二、使用步骤 1.引入库 2.读入数据 总结 首先需要创建适合yolov8的数据模式,需要将xml文件转成txt文件。修改yolov8的配置文件实现模型的训练 提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例)

    2024年02月06日
    浏览(46)
  • 如何基于stable diffusion训练出自己的模型,给出详细的python代码

    首先,基于 stable diffusion 训练自己的模型需要了解 stable diffusion 的原理和基本操作。 Stable diffusion 是一种基于最小化相对熵的机器学习方法,旨在解决在机器学习中常见的过拟合问题。它通过在模型训练过程中引入一个惩罚项来限制模型的复杂度,从而使模型更稳定。 下面是

    2024年02月11日
    浏览(43)
  • 【opencv】python实现人脸检测和识别训练

    OpenCV 中的人脸识别通常基于哈尔特征分类器(Haar Cascade Classifier)进行。以下是 OpenCV 人脸识别的基本原理: Haar Cascade Classifier : 特征分类器 :Haar 特征是一种基于矩形区域的特征,可以用于图像中的对象检测。这些特征可以表示边缘、线和区域的变化等。 级联分类器 :

    2024年01月17日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包