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

来源:互联网 发布:mac nginx默认根目录 编辑:程序博客网 时间:2024/05/01 11:44

  • 图像处理到底靠不靠谱做检测识别需不需要做图像预处理
  • 图像识别中最核心最难搞的模块之一目标检测定位分割
  • 图像识别
  • 实际应用中的逻辑问题修复
  • DEMO下载只提供早期版本的demo供参考最新版本由于商业原因暂不提供

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

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

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

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

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

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

  • 检测前需不需要做图像预处理:建议可以根据实际情况简单处理下,常用的比如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.html

1 0
原创粉丝点击