Windows环境下训练OpenCV分类器

news2024/11/17 21:28:32

文章目录

  • 1、Windows下安装OpenCV及依赖库
  • 2、获取opencv_createsamples.exe和opencv_traincascade.exe
  • 3、准备样本文件
  • 正负样本描述文件生成
  • 5、训练分类器
    • 5.1、使用opencv_createsamples.exe生成positives.vec文件
    • 5.2、使用opencv_traincascade.exe训练分类器

1、Windows下安装OpenCV及依赖库

直接在Powershell用pip安装,用国内源(我这里用的是阿里源)下载OpenCV,官方的太慢了。

pip install opencv-python -i http://mirrors.aliyun.com/pypi/simple/   --trusted-host mirrors.aliyun.com

测试一下

python
import cv2

Ctrl+Z退出Python环境
在这里插入图片描述

安装依赖库

pip install scikit-image

2、获取opencv_createsamples.exe和opencv_traincascade.exe

训练过分类器的小伙伴都知道,训练分类器需要用到opencv_createsamples.exe和opencv_traincascade.exe这两个程序,然而我们安装的OpenCV都是不带这两个程序的,这里呢我也是直接拿别人的来用的,两个文件下载链接如下:

Haar分类器训练
https://www.alipan.com/s/WTy6siHZnhS
提取码: 2t84
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

可以找到opencv_createsamples.exe和opencv_traincascade.exe这两个文件,当然里面还包含了一些库,我们训练时是要用到他们的。
在这里插入图片描述
在这里插入图片描述

3、准备样本文件

样本文件也放在网盘中了

Haar分类器训练
https://www.alipan.com/s/WTy6siHZnhS
提取码: 2t84
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

正负样本描述文件生成

  1. 在OpenCV下建立pos.py拷贝以下代码进去运行,生成正样本描述文件pos.txt
import os
def create_pos_n_neg():
    for file_type in ['pos']: #此处修改neg或pos即可
        for img in os.listdir(file_type):
            if (file_type == 'neg'):
                line = file_type + '/' + img + '\n'
                with open('neg.txt', 'a') as f:
                    f.write(line)
            elif (file_type == 'pos'):
                line = file_type + '/' + img + ' 1 0 0 50 50\n'
                with open('pos.txt', 'a') as f:
                    f.write(line)

if __name__ == '__main__':
    create_pos_n_neg()
    print('描述文件已生成!')

打开pos.txt就可以看到正样本描述文件内容

  1. 在OpenCV下建立neg.py文件,拷贝下面代码,生成负样本描述文件neg.txt
import os
def create_pos_n_neg():
    for file_type in ['neg']: #此处修改neg或pos即可
        for img in os.listdir(file_type):
            if (file_type == 'neg'):
                line = 'D:/OpenCV/'+file_type + '/' + img + '\n'
                with open('neg.txt', 'a') as f:
                    f.write(line)
            elif (file_type == 'pos'):
                line = 'D:/OpenCV/'+file_type + '/' + img + ' 1 0 0 50 50\n'
                with open('pos.txt', 'a') as f:
                    f.write(line)

if __name__ == '__main__':
    create_pos_n_neg()
    print('描述文件已生成!')

打开neg.txt就可以看到负样本描述文件内容

5、训练分类器

5.1、使用opencv_createsamples.exe生成positives.vec文件

在opencv_createsamples.exe下进入cmd,执行如下命令

opencv_createsamples.exe -vec D:\OpenCV\info.vec -info D:\OpenCV\info.txt -bg D:\OpenCV\bg.txt -num 5 -w 50 -h 50

其中,-info字段填写正样本描述文件;-vec用于保存制作的正样本;-num制定正样本的数目,不能大于正样本图片数;-w和-h分别指定正样本的宽和高。

5.2、使用opencv_traincascade.exe训练分类器

在OpenCV文件夹下建立xml_file文件夹,用来存储训练过程中生成的xml文件
在opencv_traincascade.exe下进入cmd,执行如下命令

opencv_traincascade.exe -data D:\OpenCV\xml_file -vec D:\OpenCV\info.vec -bg D:\OpenCV\bg.txt -numPos 4 -numNeg 100 -numStages 5 -featureType LBP -w 50 -h 50
data :训练后data目录下会存储训练过程中生成的文件
vec :通过opencv_createsamples生成的vec文件
bg bg.txt:bg.txt是负样本文件的数据
numPos :正样本的数目,这个数值一定要比准备正样本时的数目少,不然会报can not get new positive sample.
numNeg :负样本数目,数值可以比负样本大
numStages :训练分类器的级数
w 50:必须与opencv_createsample中使用的-w值一致
h 50:必须与opencv_createsample中使用的-h值一致
featureType LBP: 训练时,提取图像特征的类型,目前只支持LBP、HOG、Haar三种特征。但是HAAR训练非常非常的慢,而LBP则相对快很多,因为HAAR需要浮点运算,精度自然比LBP更高,但是LBP的效果也基本能达到HAAR的效果。
注意:同时正负样本数目和w、h以及训练级数numStages的大小对训练时间的影响特别大

训练完之后我们就可以在xml_file文件夹下看到训练好的分类器cascade.xml
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈AI大模型的数据特点和应用问题

【摘要】AI大模型的训练、推理及应用落地都需要大量的数据,其数据具有参数和数据量大、质量要求高、行业垂直属性强、资源消耗大等特点,由此带来的个人隐私泄露、数据中毒、数据篡改等数据安全风险已成为业界必须应对的重要议题。目前大模型的规模化应用…

怎么用二维码看excel表格?生成文件二维码的制作技巧

Excel表格怎么放到二维码中,让其他人通过扫码查看数据呢?现在文件放入二维码中展示在很多的场景中都有应用,比如通知、数据、作品、报告等类型的内容都可以通过扫码的方式在手机上展现,那么如何将文件生成二维码呢? 文…

VUE-watch和watchEffect的区别

区别简短扼要地说: watch-官方定义:侦听一个或多个响应式数据源,并在数据源变化时调用所给的回调函数。是需要指定监听的数据,并且只有在响应式数据变化的时候去执行 watchEffect-官方定义:立即运行一个函数&#xff0…

VUE3和VUE2

VUE3和VUE2 上一篇文章中,我们对VUE3进行了一个初步的认识了解,本篇文章我们来进一步学习一下,顺便看一下VUE2的写法VUE3是否能做到兼容😀。 一、新建组件 我们在components中新建一个组件,名称为Peron,…

ARM-2

c语言实现三盏灯的控制 #ifndef __LED_H__ #define __LED_H__typedef struct {volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigned int OSPEEDER;volatile unsigned int PUPDR;volatile unsigned int IDR;volatile unsigned int ODR;volatile unsig…

@ApiModelProperty失效问题,和Freemaker自定义MybatisPlus模板

MybatisPlus生成模板,修改,set get方法的影响, 手动去掉getset方法加上Lombok注解 Size读取text类型为-1的长度bug, 去掉id不能为空NotNull的校验 (增加lombok注解,TableField注解自动填充,…

基于EBAZ4205矿板的图像处理:09基于sobel边缘检测的图像锐化

基于EBAZ4205矿板的图像处理:09基于sobel边缘检测的图像锐化 项目全部文件 随后会上传项目全部文件 先看效果 锐化的有点过头了,不过我也懒得改了,想要改也很简单,无非就是给卷积运算后的结果加个系数,通过改系数调…

学习Uni-app开发小程序Day17

今天开始,就把uni-app前期使用的全部学完了,现在就把以前学习的,做成一案例,中间有未讲的,在进行补充,这里是根据老师视频进行项目案例编写的。 先弄出效果图,然后在根据效果图进行代码的编辑 …

Android:使用Kotlin搭建MVP架构模式

一、简介Android MVP架构模式 MVP全称:Model、View、Presenter; View:负责视图部分展示Model:负责数据的请求、解析、过滤等数据层操作。Presenter:View和Model交互的桥梁。对应MVC中的C(controller&#x…

AJAX(JQuery版本)

目录 前言 一.load方法 1.1load()简介 1.2load()方法示例 1.3load()方法回调函数的参数 二.$.get()方法 2.1$.get()方法介绍 2.2详细说明 2.3一些例子 2.3.1请求test.php网页并传送两个参数 2.3.2显示test返回值 三.$.post()方法 3.1$.post()方法介绍 3.2详细说明 …

Debug-010-git stash的用法及使用场景

问题原因: 其实也不是最近,就是之前就碰到过这个问题,那就是我正在新分支开发新功能,开发程度还没有到可以commit的程度,我不想提交(因为有些功能没有完全实现,而且没有自测的话很容易有问题,提…

【C++初阶】—— 类和对象 (下)

📝个人主页🌹:EterNity_TiMe_ ⏩收录专栏⏪:C “ 登神长阶 ” 🌹🌹期待您的关注 🌹🌹 类和对象 1. 运算符重载运算符重载赋值运算符重载前置和后置重载 2. 成员函数的补充3. 初始化列…

Python 调整PDF文件的页面大小

在处理PDF文件时,我们可能会遇到这样的情况:原始PDF文档不符合我们的阅读习惯,或者需要适配不同显示设备等。这时,我们就需要及时调整PDF文档中的页面尺寸,以满足不同应用场景的需求。 利用Python语言的高效性和灵活性…

SOLIDWORKS二次开发服务商 慧德敏学

SOLIDWORKS是一套三维设计软件, 采用特征建模、变量化驱动可方便地实现三维建模、装配和生成工程图。SOLIDWORKS软件本身所具有的交互方式, 可以使用户对已生成模型的尺寸、几何轮廓和相互约束关系随时进行修改, 而不需要编程。但要实现设计意义上的变量化绘图和系列化设计, 需…

89.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-游戏中使用的哈希算法逆向分析

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

4K高刷显示器 - 10大产品对比

4K高刷显示器 - 蚂蚁电竞 N27U 显示屏评测报告 一、产品品牌知名度 蚂蚁电竞,作为一家专注于电竞领域的品牌,近年来在市场上逐渐崭露头角。虽然相较于一些老牌显示器品牌,蚂蚁电竞的知名度还有待提高,但其在电竞领域的表现却不容…

C++数据结构——哈希表

前言:本篇文章将继续进行C数据结构的讲解——哈希表。 目录 一.哈希表概念 二.哈希函数 1.除留取余法 三.哈希冲突 1.闭散列 线性探测 (1)插入 (2)删除 2. 开散列 开散列概念 四.闭散列哈希表 1.基本框架 …

Excel实现将A列和B列的内容组合到一个新的列(例如C列)中,其中A列的每个值都与B列的所有值组合。

利用Excel中vba代码宏实现 原始数据: 自动生成后数据: vba实现代码: Sub CombineColumns()Dim ws As WorksheetDim lastRowA As Long, lastRowB As Long, i As Long, j As LongDim MyIndex As IntegerDim strCombine As String, strColA As…

Vue 3 组件基础与模板语法详解

title: Vue 3 组件基础与模板语法详解 date: 2024/5/24 16:31:13 updated: 2024/5/24 16:31:13 categories: 前端开发 tags: Vue3特性CompositionAPITeleportSuspenseVue3安装组件基础模板语法 Vue 3 简介 1. Vue 3 的新特性 Vue 3引入了许多新的特性,以提高框…

【计算机视觉(3)】

基于Python的OpenCV基础入门——图形与文字的绘制 图形与文字的绘制:画线画矩形画圆画多边形加文字 图形与文字绘制的代码实现: 图形与文字的绘制: 画线 img cv2.line(img, pt1, pt2, color, thickness) 参数: img:…