环境:Win10 64bit +VS2015(推荐VS2013与OpenCV 2.4.9兼容性好) +OpenCV 2.4.9
参考网页:http://www.cnblogs.com/xuanyuyt/p/6405944.html
特征提取方式:HOG(方向梯度直方图,Histogram of Oriented Gradient)
学习模型:SVM(支持向量机,Support Vector Machine)
本文目的:通过上一章获取的训练图片,制作训练集。
1. 准备数据训练集
MNIST数据集地址:http://yann.lecun.com/exdb/mnist/
- 用Matlab将数据集转化为.bmp格式
(该图片在名称中包含标签,需要处理较长时间)
- 将生成以下图片文件
【如需添加训练样本,可在此时添加分辨率为28*28的数字,以提高识别精度】
进入cmd指令生成图片名称文本;
【笔者图片根目录为“C:\Users\Liont\Desktop\Matlab\M_Project”】
- 进入cmd指令
- 输入"cd 图片根目录" 在cmd命令中进入文件目录下
如->“ cd C:\Users\Liont\Desktop\Matlab\M_Project ”
【图片若存储在其他盘,需转到其他盘后操作(如D盘),先输入"D:"再做cd操作】
- 输出".bmp"文件根目录
通过命令 " dir /b/s *.bmp > numTXT.txt"输出名为“numTXT”的txt文本
文本中内容为该训练集图片的路径名
- 打乱训练样本顺序
对已生成文件名txt文档“numTXT.txt”操作:
2. 为数据集添加标签
a. 有上一步得出txt文件格式所示
如“C:\Users\Liont\Desktop\Matlab\M_Project\0_0001.bmp”中第40位为标签名称即将第四十位提出作为标签
- 利用C++编写程序,生成名为“Num.txt”的文本
第一行为数字图片所在文件根目录,第二行为该数字图片对应标签
#include <fstream>
#include <string>
#include <iostream>
#define StartNum40 //定义字符开始位数需根据具体目录调整标签位置
using namespace std;
int main()
{
ifstream in("Num.txt");
ofstream out("Result Num.txt");
string filename;
string line;
if (in) //有该文件
{
while (getline(in, line)) //line中不包括每行的换行符
{
//复制并输出Txt文件
cout << line << " " <<line[StartNum] << endl;
out << line << endl;
out << line[StartNum]<< endl; // 输入到Result Num.txt中
}
}
else // 没有该文件
{cout << "no such file" <<endl;}
return 0;
}
- 得到名为“Result Num.txt”的txt文本
3. 训练数据集
利用参考网站的C++程序训练训练集
a. 利用参考网站的C++程序训练训练集
- 遇到 ?野指针&内存溢出? 问题
【程序在OpenCV 3.2.0下测试可以通过,产生.xml文件】
【存在3.2.0的训练集无法在2.4.9下无法使用的问题】
解决方法:debug后发现问题存在于以下两句话:
vector<float>descriptors;//存放结果
hog->compute(trainImg,descriptors,Size(1,1), Size(0,0)); //Hog特征计算
?变量指针存在越位? 做以下操作解决问题
将“vector<float>descriptors;”改变定义位置,做为全局变量或放在该调用函数前声明。
- 产生.xml训练文件,参考文档(四)【60000个训练数据大约20M】
训练数据时尽量做好监视器输出,方便查看文档进度,笔者电脑配置较差,60000个文件训练了一个多小时。
【结束时仍然出现内存溢出,问题未解决,但不影响输出.xml文件输出】
- 测试识别效果(2017.07.08)
运行识别程序:
【未运用试卷手写体训练,初步测试,识别有部分失败】
分析失败原因:
- 未经图像预处理;
- 图片像素较低;
- 书写习惯不同,训练样本未包含书写者手写样本;
- 识别所有数字为1,因未经过预处理,笔画太细,在cvResize时像素灰度被平均,因此对一张白色图片进行Hog特征识别,无法显示图片。
【问题:具体程序文档怎样书写???】
/**********************************华丽的分割线************************************/
【内容待添加......】