实用图像处理入门 - 3 - 训练自己的识别器
2013-07-26 16:06
288 查看
body,td,p { // 这对大括号里描述网页的背景
margin-left:40px;
margin-right:40px;
font-size: 10pt;
}
div.vim { width:800px, font-family: monospace; color: #ffffff; background-color: #333333; }
.lnr { color: #ffff00; }
.constant { color: #ffa0a0; }
.identifier { color: #98fb98; }
.comment { color: #87ceeb; }
div.cnblogs_code
{
width:800px;
}
h1 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 26px;
font-weight: bold;
color: #820918;
}
h2 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 20px;
font-weight: bold;
color: #820918;
}
h3 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 16px;
font-weight: bold;
color: #820918;
}
h4 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 16px;
font-weight: bold;
color: #820918;
}
h5 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 14px;
font-weight: bold;
color: #820918;
}
h6 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 12px;
font-weight: bold;
color: #820918;
}
h7 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 10px;
font-weight: bold;
color: #820918;
}
b,strong
{
color: #820918;
} [align=left]作者: 知明所以 • Milo [/align]
[align=left]博客: http://www.cnblogs.com/jhzhu [/align]
[align=left]邮箱: jhzhuustc@gmail.com [/align]
[align=left]日期: 2013年7月27日 [/align]
[align=left]opencv 2.4+ 必装 ( 目前是2.4.6, 下载链接 ). ( 假设已安装完毕, opencv安装目录以下用 {opencv} 表示 ) [/align]
[align=left]cygwin 必装 ( 安装教程, 网上一抓一大把, 就不贴链接了. 记得安装 perl ) [/align]
[align=left]CMake 必装 ( 下载链接, 用来编译 opencv ) [/align]
[align=left]opencv_createsamples 工具. 在文件夹 {cvbuild}/bin/Release/opencv_createsamples.exe 中. [/align]
[align=left]mergevec 工具. 用来把多个 *.vec 文件生成一个 *.vec 文件. ( 下载地址 ) [/align]
[align=left]createtrainsamples 工具, 用来快速生成大量测试样本. ( 下载地址 ) [/align]
[align=left]如果以上地址无法打开, 这里有以上工具的合集. ( 百度网盘下载 ) [/align]
[align=left]此文中用到的所有命令, 均以sh脚本文件保存在这里( 百度网盘下载, 下文用 “脚本附件”表示此附件 ). 您可以省去很多编写脚本的麻烦 [/align]
此步骤务必完成, 否则后续步骤无法执行
编译 opencv 的目标位置, 在下文中用 {cvbuild} 表示
步骤:
[align=left]下载负样本文件. ( 忘记从哪里下载的了, 事先申明这图片库不是我制作的, 请大家不要用于商业用途. 百度盘下载 ) [/align]
[align=left]解压文件到某处. 进入文件夹, 执行以下命令: [/align] ?
得到 bg.txt. 即为负样本文件. ( 脚本附件/S2-fetchNegtiveImage.sh )
2.2.2.1 用 imageclipper 截取待识别区域 运行命令:( 假设源图片放在 ./samples/positive/src/ 文件夹中 )
如果没有特殊说明, 文中所有的命令均在 cygwin 终端中执行.
[align=left] ?[/align]
( 脚本附件/S1-clipPositiveImage.sh )
在命令行中输入
[align=left] ?[/align]
可以看到 imageclipper 的使用说明. 咱们主要关心一下 –o 参数:
[align=left] ?[/align]
-o 参数主要来控制生成图片的文件名.
比如咱们这里的 –o 参数为 “%i__%x__%y__%w__%h__.png”.
就表示生成文件的文件名为 “原文件名__x坐标__y坐标__宽度__高度__.png”.
生成文件在文件夹:./samples/positive/ 中:
2.2.2.2 用 opencv_createsamples 对截取出的区域生成样本描述文件 *.vec opencv 官方文档中对 opencv_createsamples 的使用描述见这里
在终端中输入 opencv_createsamples 不加任何参数, 查看使用帮助:
[align=left] ?[/align]
我们需要用到的参数有:
[align=left] ?[/align]
下面使用 openc_createasamples 工具来对每一个目标文件生成对应的 *.vec 样本描述文件
新建 ./S3-createsamples.sh 文件. 内容如下: ( 脚本附件/S3-createsamples.sh )
[align=left] ?[/align]
如果需要, 根据 1.3 中本项目的文件结构图, 将上面的文件路径改成你需要的路径.
执行命令:
[align=left] ?[/align]
打开文件夹, 看到一列 *.vec 文件就对啦~~
2.2.2.3 用 mergevec 工具合并 *.vec 文件 细心的您执行完 步骤2.2.2.2 之后, 就会发现上图已经有合并后的 target.vec 了.
为了方便, 我已经把合并 vec 的步骤写到 S3-createsamples.sh 文件里去了. 看看这个文件的最后两行就知道啦.
输入以下命令可以看到 mergevec 的使用帮助:
[align=left] ?[/align]
方法: 把证样本图片中的待识别区域, 经过缩放拉伸翻转后, 按随机位置贴在背景图片上, 并记录下待识别区域在背景图片上的位置.
假设我们想训练一个识别嘴巴的识别器. 生成的测试样本如下:
利用我们训练的识别器, 对这些图片进行识别. 得到的结果, 跟实际情况相比较, 即可知道识别器的识别率和性能.
创建 S5-createTestSample.sh 内容如下: ( 脚本附件/S5-createTestSample.sh )
?
运行脚本文件 S5-createTestSample.sh . 查看 ./samples/test/tests 文件夹, 就能看到各种样本图片啦~~
样本图片列表存放在:
./samples/test/tests.dat
里. 如果内容如下:
?
证明你成功的创建了测试样本!
执行以下命令来训练识别器:
[align=left] ?[/align]
( 脚本附件/S4-training.sh )
注意: 此步骤可能因为正样本过少或者负样本过少而导致错误. 如果出现错误, 请使用更多样本进行尝试.
训练过程可能要持续好几天, 请耐心等待.
opencv_haartraining 的官方使用说明见这里
输入以下命令可查看简要参数说明:
[align=left] ?[/align]
原理: 已在 2.3.3 讲过. 可回看参考.
执行命令:
?
( 脚本附件/S6-test.sh )
3.2 Rapid Object Detection With A Cascade of Boosted Classifiers Based on Haar-like Features Introduction
3.3 Merge vec files created by createsamples
3.4 Cascade Classifier Training ( opencv offical document )
3.5 imageclipper ( A tool to crop images manually fast )
margin-left:40px;
margin-right:40px;
font-size: 10pt;
}
div.vim { width:800px, font-family: monospace; color: #ffffff; background-color: #333333; }
.lnr { color: #ffff00; }
.constant { color: #ffa0a0; }
.identifier { color: #98fb98; }
.comment { color: #87ceeb; }
div.cnblogs_code
{
width:800px;
}
h1 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 26px;
font-weight: bold;
color: #820918;
}
h2 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 20px;
font-weight: bold;
color: #820918;
}
h3 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 16px;
font-weight: bold;
color: #820918;
}
h4 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 16px;
font-weight: bold;
color: #820918;
}
h5 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 14px;
font-weight: bold;
color: #820918;
}
h6 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 12px;
font-weight: bold;
color: #820918;
}
h7 { // 这对大括号里描述 标签中的部分
font-family: 华文细黑;
font-size: 10px;
font-weight: bold;
color: #820918;
}
b,strong
{
color: #820918;
} [align=left]作者: 知明所以 • Milo [/align]
[align=left]博客: http://www.cnblogs.com/jhzhu [/align]
[align=left]邮箱: jhzhuustc@gmail.com [/align]
[align=left]日期: 2013年7月27日 [/align]
1 环境准备
1.1 基本工具:
[align=left]Visual Studio 2012 必装 [/align][align=left]opencv 2.4+ 必装 ( 目前是2.4.6, 下载链接 ). ( 假设已安装完毕, opencv安装目录以下用 {opencv} 表示 ) [/align]
[align=left]cygwin 必装 ( 安装教程, 网上一抓一大把, 就不贴链接了. 记得安装 perl ) [/align]
[align=left]CMake 必装 ( 下载链接, 用来编译 opencv ) [/align]
1.2 辅助工具:
[align=left]imageclipper 工具. 此工具能快速的从原始图片中截取待识别区域, 生成只包含待识别区域的图片. ( 下载地址 ) [/align][align=left]opencv_createsamples 工具. 在文件夹 {cvbuild}/bin/Release/opencv_createsamples.exe 中. [/align]
[align=left]mergevec 工具. 用来把多个 *.vec 文件生成一个 *.vec 文件. ( 下载地址 ) [/align]
[align=left]createtrainsamples 工具, 用来快速生成大量测试样本. ( 下载地址 ) [/align]
[align=left]如果以上地址无法打开, 这里有以上工具的合集. ( 百度网盘下载 ) [/align]
[align=left]此文中用到的所有命令, 均以sh脚本文件保存在这里( 百度网盘下载, 下文用 “脚本附件”表示此附件 ). 您可以省去很多编写脚本的麻烦 [/align]
1.3 项目文件结构如下:
2 详细步骤
2.1 编译 opencv
因为这一步骤比较长, 被我单独开贴到这里了.此步骤务必完成, 否则后续步骤无法执行
编译 opencv 的目标位置, 在下文中用 {cvbuild} 表示
2.2 制作样本
2.2.1 负样本
目标: 生成 背景描述文件 bg.txt步骤:
[align=left]下载负样本文件. ( 忘记从哪里下载的了, 事先申明这图片库不是我制作的, 请大家不要用于商业用途. 百度盘下载 ) [/align]
[align=left]解压文件到某处. 进入文件夹, 执行以下命令: [/align] ?
2.2.2 正样本
目标: 生成正样本的 *.vec 样本描述文件2.2.2.1 用 imageclipper 截取待识别区域 运行命令:( 假设源图片放在 ./samples/positive/src/ 文件夹中 )
如果没有特殊说明, 文中所有的命令均在 cygwin 终端中执行.
[align=left] ?[/align]
在命令行中输入
[align=left] ?[/align]
[align=left] ?[/align]
比如咱们这里的 –o 参数为 “%i__%x__%y__%w__%h__.png”.
就表示生成文件的文件名为 “原文件名__x坐标__y坐标__宽度__高度__.png”.
生成文件在文件夹:./samples/positive/ 中:
2.2.2.2 用 opencv_createsamples 对截取出的区域生成样本描述文件 *.vec opencv 官方文档中对 opencv_createsamples 的使用描述见这里
在终端中输入 opencv_createsamples 不加任何参数, 查看使用帮助:
[align=left] ?[/align]
[align=left] ?[/align]
新建 ./S3-createsamples.sh 文件. 内容如下: ( 脚本附件/S3-createsamples.sh )
[align=left] ?[/align]
执行命令:
[align=left] ?[/align]
2.2.2.3 用 mergevec 工具合并 *.vec 文件 细心的您执行完 步骤2.2.2.2 之后, 就会发现上图已经有合并后的 target.vec 了.
为了方便, 我已经把合并 vec 的步骤写到 S3-createsamples.sh 文件里去了. 看看这个文件的最后两行就知道啦.
输入以下命令可以看到 mergevec 的使用帮助:
[align=left] ?[/align]
2.2.3 测试样本
目标: 生成大量带有待识别区域的测试图片, 在这些图片中, 待识别区域的位置都已知.方法: 把证样本图片中的待识别区域, 经过缩放拉伸翻转后, 按随机位置贴在背景图片上, 并记录下待识别区域在背景图片上的位置.
假设我们想训练一个识别嘴巴的识别器. 生成的测试样本如下:
利用我们训练的识别器, 对这些图片进行识别. 得到的结果, 跟实际情况相比较, 即可知道识别器的识别率和性能.
创建 S5-createTestSample.sh 内容如下: ( 脚本附件/S5-createTestSample.sh )
?
样本图片列表存放在:
./samples/test/tests.dat
里. 如果内容如下:
?
2.3 训练过程
目标: 利用 opencv_haartraining 工具训练识别器执行以下命令来训练识别器:
[align=left] ?[/align]
注意: 此步骤可能因为正样本过少或者负样本过少而导致错误. 如果出现错误, 请使用更多样本进行尝试.
训练过程可能要持续好几天, 请耐心等待.
opencv_haartraining 的官方使用说明见这里
输入以下命令可查看简要参数说明:
[align=left] ?[/align]
2.4 测试性能
目标: 通过用大量测试数据进行实际测试, 得到识别器的识别率和识别性能原理: 已在 2.3.3 讲过. 可回看参考.
执行命令:
?
3 参考
3.1 Tutorial: OpenCV haartraining3.2 Rapid Object Detection With A Cascade of Boosted Classifiers Based on Haar-like Features Introduction
3.3 Merge vec files created by createsamples
3.4 Cascade Classifier Training ( opencv offical document )
3.5 imageclipper ( A tool to crop images manually fast )
相关文章推荐
- 实用图像处理入门 - 1 - opencv VS2012 环境搭建
- 实用图像处理入门 - 2 - Windows平台下编译openCV
- 开源 人脸识别 openface 实用介绍 实例演示 训练自己的模型
- Tesseract-OCR 3.0.1训练自己的语言库之图像文字识别
- Kreas 训练自己的图像数据处理回归问题
- FAIR开源目标识别平台Detectron从入门到放弃(二) 使用自己的数据集(voc2007格式)训练Detectron
- 树莓派_图像处理入门纪实(一)
- Android图片处理:识别图像方向并显示
- c#图像处理入门(-bitmap类和图像像素值获取方法)
- OpenCV - 图形图像处理 - 形态学处理 1931 1 Opencv图像识别从零到精通(17)----开运算、闭运算、顶帽、黑帽、形态学梯度、形态学角点、细化、填充 作者:qq_208236
- 一个菜鸟的图像处理入门
- 资料网址大全 (数学,深度学习,机器学习,计算机视觉,人脸识别,图像处理等)
- AS3多线程快速入门(二):图像处理[译]
- 指纹识别源代码(1)-图像处理
- (未实用 需多个函数配套使用)opencv3.0 函数学习 10——morphologyEx 形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑
- opencv 人脸识别 (一)训练样本的处理
- 图像识别与处理之Opencv——图像数据获取与存储(imread()和imwrite()函数)
- 数字识别--图像预处理(整个过程)
- 细胞识别图像处理项目总结
- windows-caffe入门之用CPU训练自己的数据