实时手写数字识别

       PS:好久之前的博客了,再整理百度云的时候翻到了之前的代码,贴在这里:代码

 

手写数字识别作为模式识别领域的一个重要问题,也有着重要的理论价值,在大数据时代的背景下,其应用领域非常之广。很多学者对手写数字识别提出了不同的算法,取得了不错的测试效果,但如今OCR领域大部分还在算法理论的研究阶段,并没有完善的应用体系出现。部分科技企业开发出的手写数字应用系统由于局限于书写的环境和书写风格的要求,只能适用于特点的应用场景,也并没有得到很好的推广。

       本场景中,通过摄像头实时读取待处理的图像,经过灰度变换,转化为灰度图,经过图像的形态学膨胀和腐蚀做初步处理,并运用Sobels算子去除噪点。寻找轮廓后设定阈值分类图像,整合数字的特征,用训练好的KNN分类模型识别数字。提供自训练的API,按下执行命令后会识别到该场景下的识别图像,需要手动输入图像的标签,经测试,不同条件下的训练数据为6~8组即可较为精准的识别。

 

图1:场景一流程图 

(一):图像预处理(形态学膨胀腐蚀):
对图像做形态学腐蚀膨胀常用来做图像的预处理。其主要功能有:
• 消除噪声
• 分割(isolate)出独立的图像元素,在图像中连接(join)相邻的元素。
• 寻找图像中的明显的极大值区域或极小值区域
• 求出图像的梯度
在方案的设计中,首先做图像的腐蚀膨胀,以便于后面的边缘检测。效果如图:

  

图2:预处理——腐蚀膨胀

(二):基于Sobel算子的边缘检测:
Sobel算法是像素图像边缘检测中最重要的算子之一,在机器学习、数字媒体、计算机视觉等信息科技领域起着举足轻重的作用。在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生该点对应的梯度矢量或是其法矢量。Sobel 算子是一个离散的一阶微分算子,用来计算图像灰度函数的近似梯度。算子使用两个3*3的矩阵和原始图片做卷积,分别得到横向和纵向的梯度值。如果梯度值大于设定的阈值,则认为检测到边缘点。

 

图3:Sobel算子使用的矩阵

对手写数字的图片用Sobel算子做边缘检测,综合其横向纵向的检测结果,如图:

 

图4:边缘检测

(三):数字提取分割与KNN识别:
将识别到的数字串分割成各个数字并框出,转换为特征矩阵作为KNN分类器的输入,由以训练好的KNN模型识别出数字标签,并标注在手写数字旁。如图:

   

图5:数字提取和识别结果

(四):手动训练API:
对于某些原因造成的识别错误,程序中,设定按u键手动更新训练,如图:

 

图6:待手动训练样本

界面将显示识别到的数字图片,标签手动输入,按enter后更新,更新2组后即可稳定识别:
 

图7:强化训练后的识别结果

       

视频演示截图:

  • 11
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值