深度学习篇---Opencv中Haar级联分类器的自定义

news2025/3/14 20:00:33

文章目录

  • 1. 准备工作
    • 1.1安装 OpenCV
    • 1.2准备数据集
      • 1.2.1正样本
      • 1.2.2负样本
  • 2. 数据准备
    • 2.1 正样本的准备
      • 2.1.1步骤
      • 2.1.2生成正样本描述文件
      • 2.1.3示例命令
      • 2.1.4正样本描述文件格式
    • 2.2 负样本的准备
      • 2.2.1步骤
      • 2.2.2负样本描述文件格式
  • 3. 训练分类器
    • 3.1命令格式
    • 3.2参数说明
  • 4. 训练过程
    • 4.1训练输出
  • 5. 测试分类器
    • 5.1示例代码
  • 6. 优化分类器
  • 总结


训练自定义的 Haar 级联分类器是一个复杂但非常有用的过程,允许你检测特定的目标对象。以下是详细的步骤流程,包括数据准备、工具使用和训练过程


1. 准备工作

在开始训练之前,确保你已经安装了 OpenCV,并且可以使用 OpenCV 提供的工具(如 opencv_createsamplesopencv_traincascade)。

1.1安装 OpenCV

如果你还没有安装 OpenCV,可以通过以下命令安装:
pip install opencv-python opencv-python-headless
确保 OpenCV 的二进制工具(如 **opencv_createsamples** 和 **opencv_traincascade**)可用。

1.2准备数据集

训练 Haar 级联分类器需要两类数据:

1.2.1正样本

    正样本(Positive Samples):包含**目标对象的图像**。

1.2.2负样本

    负样本(Negative Samples):不包含目标对象的图像。

2. 数据准备

2.1 正样本的准备

正样本是包含目标对象的图像。为了训练分类器,正样本需要满足以下要求:

1.图像中只包含目标对象。

2.目标对象在图像中的位置和大小应尽量一致。

3.图像背景应尽量简单。

2.1.1步骤

1.收集包含目标对象的图像。

2.使用图像编辑工具(如 GIMP 或 Photoshop)裁剪图像,确保目标对象位于图像中心,并且背景干净。

3.将所有正样本图像调整为相同的尺寸(例如 24x24 像素)。

4.将正样本图像保存到一个文件夹中,例如 positive_images/。

2.1.2生成正样本描述文件

使用 opencv_createsamples 工具生成正样本的描述文件。描述文件是一个文本文件每一行描述一个正样本图像及其目标对象的位置

2.1.3示例命令

opencv_createsamples -info positive_images.txt -vec samples.vec -num 1000 -w 24 -h 24
  1. -info positive_images.txt:指定正样本描述文件的路径。
  2. -vec samples.vec:生成的正样本向量文件
  3. -num 1000:正样本的数量。
  4. -w 24 -h 24:样本图像的宽度和高度。

2.1.4正样本描述文件格式

positive_images.txt 文件的每一行格式如下:

image_path num_objects x y width height
positive_images/img1.jpg 1 0 0 24 24
positive_images/img2.jpg 1 0 0 24 24

2.2 负样本的准备

负样本是不包含目标对象的图像。负样本用于训练分类器区分目标和非目标区域

2.2.1步骤

1.收集大量不包含目标对象的图像。

2.将这些图像保存到一个文件夹中,例如 negative_images/。

3.创建一个负样本描述文件 negatives.txt,每一行包含一个负样本图像的路径。

2.2.2负样本描述文件格式

negatives.txt 文件的每一行格式如下:

image_path
negative_images/bg1.jpg
negative_images/bg2.jpg

3. 训练分类器

使用 opencv_traincascade 工具训练 Haar 级联分类器。

3.1命令格式

opencv_traincascade -data output_dir -vec samples.vec -bg negatives.txt \
-numStages 20 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -numPos 1000 \
-numNeg 500 -w 24 -h 24 -mode ALL -precalcValBufSize 2048 \
-precalcIdxBufSize 2048

3.2参数说明

1.-data output_dir:指定输出目录,训练结果将保存在此目录中。

2.-vec samples.vec:正样本向量文件。

3.-bg negatives.txt:负样本描述文件。

4.-numStages 20:训练的级联阶段数(通常为 10-20)。

5.-minHitRate 0.995:每个阶段的最小命中率(通常为 0.995)。

6.-maxFalseAlarmRate 0.5:每个阶段的最大误检率(通常为 0.5)。

7.-numPos 1000:每个阶段使用的正样本数量。

8.-numNeg 500:每个阶段使用的负样本数量。

9.-w 24 -h 24:样本图像的宽度和高度。

10.-mode ALL:使用所有 Haar 特征类型。

11.-precalcValBufSize 2048:预计算值缓冲区大小(以 MB 为单位)。

12.-precalcIdxBufSize 2048:预计算索引缓冲区大小(以 MB 为单位)。

4. 训练过程

训练过程可能需要数小时甚至数天,具体时间取决于数据集的大小和计算机的性能。训练过程中会显示每个阶段的进度和性能指标

4.1训练输出

每个阶段会生成一个 XML 文件(如 stage1.xml、stage2.xml 等)。
最终生成的分类器文件为 cascade.xml,保存在 output_dir 中。

5. 测试分类器

训练完成后,可以使用生成的 cascade.xml 文件进行目标检测。

5.1示例代码

import cv2

#加载自定义 Haar 级联分类器
custom_cascade = cv2.CascadeClassifier('output_dir/cascade.xml')

#读取图像
img = cv2.imread('test.jpg')

#转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#检测目标
objects = custom_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

#绘制检测结果
for (x, y, w, h) in objects:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

#显示结果
cv2.imshow('Detected Objects', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

6. 优化分类器

如果分类器的性能不理想,可以尝试以下优化方法:

1.增加正样本和负样本的数量。
2.调整训练参数(如 -numStages、-minHitRate、-maxFalseAlarmRate)。
3.使用更高质量的样本图像。

总结

训练自定义 Haar 级联分类器的流程包括数据准备、生成样本描述文件、训练分类器和测试分类器。虽然训练过程可能耗时,但通过合理的参数调整和数据优化,可以获得高性能的分类器,用于检测特定的目标对象。


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

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

相关文章

ArcGIS Pro 车牌分区数据处理与地图制作全攻略

在大数据时代,地理信息系统(GIS)技术在各个领域都有着广泛的应用,而 ArcGIS Pro 作为一款功能强大的 GIS 软件,为数据处理和地图制作提供了丰富的工具和便捷的操作流程。 车牌数据作为一种重要的地理空间数据&#xf…

文件解析漏洞靶场通关合集

一、IIS解析漏洞 &#xff08;一&#xff09;iis6的目录解析漏洞(.asp目录中的所有文件都会被当做asp文件执行) 第一步&#xff1a;在网站根目录下创建了一个x.asp文件夹&#xff0c;并在文件夹中创建一个名为1.txt的文本文档 第二步&#xff1a;文本文档中输入<% now()%&…

塔能IVO-SCY智能机箱:点亮智慧城市的电力“智慧核芯”

在智慧城市建设的宏大征程中&#xff0c;稳定且智能的电力供应犹如坚固基石&#xff0c;支撑着各类设备高效、稳定地运行。塔能科技的IVO-SCY智能机箱&#xff0c;凭借其卓越的电源管理系统&#xff0c;当之无愧地成为了整个智慧城市电力保障体系中的“智慧心脏”&#xff0c;源…

【Oracle】19c数据库控制文件多路径配置

一、关闭数据库&#xff08;2个节点实例都要关闭&#xff09; srvctl stop database -d ora19c 二、多路径控制文件 打开其中一个节点到nomount状态 sqlplus / as sysdba startup nomount; [oracleora19c1:/home/oracle]$ rman target / RMAN> restore controlfile to…

Android Media3 ExoPlayer 开发全攻略:从基础集成到高级功能实战

目录 1. 引言 2. 添加依赖 3. 初始化ExoPlayer并播放视频 3.1 XML 布局 3.2 初始化ExoPlayer 4. 控制播放 5. 监听播放状态 6. 播放网络流&#xff08;HLS / DASH / RTSP&#xff09; 7. ExoPlayer 进阶 7.1 手动切换功能 7.2 DRM 保护 8. 释放播放器资源 9. 从旧…

Trae与Builder模式初体验

说明 下载的国际版&#xff1a;https://www.trae.ai/ 建议 要选新模型 效果 还是挺不错的&#xff0c;遇到问题反馈一下&#xff0c;AI就帮忙解决了&#xff0c;真是动动嘴&#xff08;打打字就行了&#xff09;&#xff0c;做些小的原型效果或演示Demo很方便呀&#xff…

如何通过修改hosts文件、启动Apache服务器、修改httpd.conf文件、配置虚拟主机、创建站点目录和文件等步骤来配置虚拟主机并发布PHP站点

Web服务器配置——修改hosts文件&#xff0c;将域名解析到本地 核心内容&#xff1a;介绍了如何通过修改hosts文件来实现将任意域名解析到本地&#xff0c;以便在开发过程中使用自定义域名访问本地站点。步骤&#xff1a; 打开位于C:\Windows\System32\drivers\etc的hosts文件…

政策助力,3C 数码行业数字化起航

政策引领&#xff0c;数字经济浪潮来袭 在当今时代&#xff0c;数字经济已成为全球经济发展的核心驱动力&#xff0c;引领着新一轮科技革命和产业变革的潮流。我国深刻洞察这一发展趋势&#xff0c;大力推进数字化经济发展战略&#xff0c;为经济的高质量发展注入了强大动力。 …

MySQL数据库复制

文章目录 MySQL数据库复制一、复制的原理二、复制的搭建1.编辑配置文件2.在主库上创建复制的用户3.获取主库的备份4.基于从库的恢复5.建立主从复制6.开启主从复制7.查看主从复制状态 MySQL数据库复制 MySQL作为非常流行的数据库&#xff0c;支撑它如此出彩的因素主要有两个&am…

101.在 Vue 3 + OpenLayers 使用 declutter 避免文字标签重叠

1. 前言 在使用 OpenLayers 进行地图开发时&#xff0c;我们经常需要在地图上添加点、线、区域等图形&#xff0c;并给它们附加文字标签。但当地图上的标注较多时&#xff0c;文字标签可能会发生重叠&#xff0c;导致用户无法清晰地查看地图信息。 幸运的是&#xff0c;OpenL…

uniapp移动端图片比较器组件,仿英伟达官网rtx光追图片比较器功能

组件下载地址&#xff1a;https://ext.dcloud.net.cn/plugin?id22609 已测试h5和微信小程序&#xff0c;理论支持全平台 亮点&#xff1a; 简单易用 使用js计算而不是resize属性&#xff0c;定制化程度更高 组件挂在后可播放指示线动画&#xff0c;提示用户可以拖拽比较图片…

深度学习与大模型-矩阵

矩阵其实在我们的生活中也有很多应用&#xff0c;只是我们没注意罢了。 1. 矩阵是什么&#xff1f; 简单来说&#xff0c;矩阵就是一个长方形的数字表格。比如你有一个2行3列的矩阵&#xff0c;可以写成这样&#xff1a; 这个矩阵有2行3列&#xff0c;每个数字都有一个位置&a…

搭建基于chatgpt的问答系统

一、语言模型&#xff0c;提问范式与 Token 1.语言模型 大语言模型&#xff08;LLM&#xff09;是通过预测下一个词的监督学习方式进行训练的&#xff0c;通过预测下一个词为训练目标的方法使得语言模型获得强大的语言生成能力。 a.基础语言模型 &#xff08;Base LLM&…

LuaJIT 学习(2)—— 使用 FFI 库的几个例子

文章目录 介绍Motivating Example: Calling External C Functions例子&#xff1a;Lua 中调用 C 函数 Motivating Example: Using C Data StructuresAccessing Standard System FunctionsAccessing the zlib Compression LibraryDefining Metamethods for a C Type例子&#xf…

解锁 AI 开发的无限可能:邀请您加入 coze-sharp 开源项目

大家好&#xff01;今天我要向大家介绍一个充满潜力的开源项目——coze-sharp&#xff01;这是一个基于 C# 开发的 Coze 客户端&#xff0c;旨在帮助开发者轻松接入 Coze AI 平台&#xff0c;打造智能应用。项目地址在这里&#xff1a;https://github.com/zhulige/coze-sharp&a…

全面解析与实用指南:如何有效解决ffmpeg.dll丢失问题并恢复软件正常运行

在使用多媒体处理软件或进行视频编辑时&#xff0c;你可能会遇到一个常见的问题——ffmpeg.dll文件丢失。这个错误不仅会中断你的工作流程&#xff0c;还可能导致软件无法正常运行。ffmpeg.dll是FFmpeg库中的一个关键动态链接库文件&#xff0c;负责处理视频和音频的编码、解码…

Python----计算机视觉处理(opencv:像素,RGB颜色,图像的存储,opencv安装,代码展示)

一、计算机眼中的图像 像素 像素是图像的基本单元&#xff0c;每个像素存储着图像的颜色、亮度和其他特征。一系列像素组合到一起就形成 了完整的图像&#xff0c;在计算机中&#xff0c;图像以像素的形式存在并采用二进制格式进行存储。根据图像的颜色不 同&#xff0c;每个像…

小米路由器SSH下安装DDNS-GO

文章目录 前言一、下载&#xff06;安装DDNS-GO二、配置ddns-go设置开机启动 前言 什么是DDNS&#xff1f; DDNS&#xff08;Dynamic Domain Name Server&#xff09;是动态域名服务的缩写。 目前路由器拨号上网获得的多半都是动态IP&#xff0c;DDNS可以将路由器变化的外网I…

go语言zero框架拉取内部平台开发的sdk报错的修复与实践

在开发过程中&#xff0c;我们可能会遇到由于认证问题无法拉取私有 SDK 的情况。这种情况常发生在使用 Go 语言以及 Zero 框架时&#xff0c;尤其是在连接到私有平台&#xff0c;如阿里云 Codeup 上托管的 Go SDK。如果你遇到这种错误&#xff0c;通常是因为 Go 没有适当的认证…

手机屏幕摔不显示了,如何用其他屏幕临时显示,用来导出资料或者清理手机

首先准备一个拓展坞 然后 插入一个外接的U盘 插入鼠标 插入有数字小键盘区的键盘 然后准备一根高清线&#xff0c;一端链接电脑显示器,一端插入拓展坞 把拓展坞的连接线&#xff0c;插入手机充电口&#xff08;可能会需要转接头&#xff09; 然后确保手机开机 按下键盘…