通过前几天对svm的学习,结合最近对.net的winform的学习,昨天在以前的libsvm的基础之上写了一个简单的ocr数字识别程序。
对于libsvm的使用最重要的有两点:
1 针对不同的使用选取不同核函数.
2 训练样本的有效性和代表性,样本的覆盖面约大越好。
针对数字ocr的识别,特征向量的选取就非常的重要。由于是对ocr和libsvm的尝试,所以我的训练使用的是手写的图片,拖动鼠标,在picturbox控件上画的数字图片,既能训练,也能用来识别。样本数据保存在数据库中,需要识别的时候载入数据库的样本数据训练该分类识别器。
图片选择160*160的大小,特征向量选择:垂直投影,暂时没有经过边缘轮廓提取。简单的把该图片分成16*16网格, 每个网格的特征向量值:黑色的像素点/总的像素点,每个数字样本垂直投影后总共现只有16个特征向量,每个向量也就是垂直网格列的合计。依次顺序为:1,2,3,4…..16 ,为0(也就是空白)的特征向量在训练的时候也没有过滤掉。
1
2
3
4
5
6
…
15
16
数字
value
0.390625
0
0.59765625
0.625
数字1
1
数字2
2
数字1
1
数字3
3
……
效果:还不是特别满意:
(1):1的识别率100%
(2):3 和8的识别率只有40%,经常会3识别成8,8识别成3,看来图像没有处理,特征向量的选择有很大的关系。
(3):惩罚因子选择的是100。
Ps:本人不善于表达。可惜,在这个blog上面不能贴图,也不能上传demo软件。只是由于对编程的爱好,促使我把自己的一些东西拿来和大伙分享,希望能够起到抛砖引玉的作用。也希望有更多的大虾来指点,交流。