图像识别谈论,不只限于OCR,基于水表识别,燃气表识别为例

咱们都知道单纯靠算法解决一切问题是不现实,图像识别做为一个工程性很强的领域,更多的须要从输入源,也就是图像采集端(摄像头或者扫描仪等)、光源以及系统架构方面等解决问题。作太低照度高帧率图像识别,也搞过很多机器视觉物料分拣项目,对此深有体会。一个清晰的图像质量,干净的背景会方便后期图像处理不少,因此实际项目中首先保证尽量好的图像,尽量干净的背景,以后再来图像检测定位分割跟踪或者识别。html

  • 下面以水表识别,燃气表识别为例进行讨论

图像处理到底靠不靠谱,作检测识别需不须要作图像预处理

  • 图像识别项目最大的特征就是“看图说话”,具体项目具体处理。因此需不须要图像预处理,看具体项目须要。
  • 图像预处理耗时吗?不少项目须要在手机平台运行,或者嵌入式上跑,用CPU处理一张720P的图像会很耗时,好比720P的RGB在iPhone6上作resize就须要20多ms了,有时候会借助于GPU来预处理图像。
  • 对于实时性要求很高的应用来讲,个人经验上基本上直接原图上用分类器作检测定位分割就够了,不须要图像处理。好比基于haar+adaboost的图像检测,基于CNN的图像定位等。由于原图一动,全部的样本就动了,分割出来的识别样本就不同了,试想几百万的样本,有滤波过的,有没有滤波的,有直方图拉伸过的,有没有拉伸过的,若是在低照度下,由于曝光时间比较短,相机成像较差,会出现部分图像噪点很严重,不一样的处理带来彻底不同的图像,很是影响后期的图像分类识别。
  • 图像识别的时候根据须要进行图像预处理,主要有两方面的目的:一方面是为了增长样本数量,好比cvNorm,Retinex,dehist等等,或者进行图像的上下左右平移,旋转增长样本丰富性;一方面是为了增长类之间的差别,突出特征,好比白化,羽化等。

图像识别中最核心最难搞的模块之一:目标检测定位分割

作识别应用最难的部分就是分割了,图像分割好了,后端作识别才更简单。 c++

  • 检测前需不须要作图像预处理:建议能够根据实际状况简单处理下,经常使用的好比cvNorm,可是仅在备份图像上作处理,原图尽可能不动,原图留作识别抠图。
  • 训练一个分类器进行目标检测,以haar+adaboost为例,详细参考字符检测的正负样本得取(利用鼠标画框抠图)准备样本等。
    这里写图片描述
  • 每每分类器仅仅只能获得以上一个初步的效果,这时候须要根据项目实际图像固有的特征规律进行一些调整。
    这里写图片描述

图像识别

  • 分类器选择:在deep learning大行其道的天下,确实是不错的选择。Hition在2012年ImageNet识别时用的算法paper:Imagenet classification with deep convolutional neural networks. 他还给出了对应的code,基于GPU,c++的:https://code.google.com/p/cuda-convnet/
  • 识别样本该不应处理:实际应用中看到不少人喜欢把图像进行平滑、滤波、亮度对比度拉伸,翻来覆盖调参数,到底有没有必要。实际上采集设备决定了图像质量,人眼看起来清晰实际算法分类效果不必定好。
  • 识别类别分类讨论,有些识别应用类别数量能够自定义,类别数量越少越好,好比你能够先作二分类,区分目标仍是非目标,而后在目标类作多分类。
  • 识别样本丰富性处理:不少应用你取不到特别多的样本,覆盖不了全部的状况,而且样本之间的均衡性也很难平衡。常见的状况确定是出现最多的,样本是最多的,还有可能某类样本数是最多的,另外一类别下的样本数也是比较少的。实际项目其实时间花的最多的就是在那20%-30%的状况下作边界处理占了项目90%的时间。咱们须要尽量的保证样本的均衡性,采样时候各类状况尽量包含,每类别下的样本数量尽可能均衡。某类样本数量不够能够采集图像处理增长样本量,经常使用的有分割的时候上下左右平移,图像拉伸,滤波等。
    这里写图片描述

实际应用中的逻辑问题修复

  • 检测识别完成并不等于项目OK了,实际应用可能出现漏记错误,须要修复。举例:上图的识别,若是最后两位识别成20或者39,对于识别来讲是没有问题的,但是对于项目来讲就错了。下面是最明显的逻辑错误,正确应该是00100或者00099均可以。
    这里写图片描述
  • 逻辑修复,分析可知通常是在9调到0的时候因为机械转盘延迟致使图像出现半字,这时候根据有些出现上9下0进行一个virify_result的处理,完美解决问题。

DEMO下载(只提供早期版本的demo供参考,最新版本因为商业缘由暂不提供。)

http://www.pudn.com/downloads742/sourcecode/math/detail2959559.htmlweb