一、概述
现实生活中,有很多场景下,需要对LED数字进行识别。如加油站里加油的读数、电动车上的读数等等。
上图为一个led数字的示例。
笔者对于市面上一些ocr(光学字符识别)产品做了测试,发现只有讯飞对此有较好的识别,其它平台产品均无法无法识别led数字。
对于一些开源的ocr框架也做尝试,发现也很难满足自己的需求。
LED数字识别的难点在于,它采用的是 七段led 来表示一个数字。也就是说,常规的ocr会将这些“段”当成无用信息,而后导致无法识别。
技术难点包括(可能还有其它):
- roi区域提取
- 显示屏中无效的字符以及污点的干扰,光照的干扰
- 多行数字分组
- 单个字符分割
- 小数点位置
实现的算法包括:
- 阈值分割+随机探点十字扩展算法提取roi区域
- 基于宽高及投影法分割每行的数字(其中还包括一些腐蚀操作等等)
- 基于投影法和字段膨胀的单个数字分割算法(其中也包括一些噪声的去除判断等等)
- 基于相对位置的小数点位置判断算法(分析有效的小数点位置,而去除掉无用的噪声点)
- 基于svm模型的数字识别算法(提前使用准备好的各个数字的各个形状的图片,而后进行分割)
之后再写吧,代码是写完了,博客没时间写,后续想起来了继续写。。。后面给出了演示效果,希望以上对大家有所启发吧!
二、目标
三、实现方法
1、环境介绍
2、Opencv for android中重要概念介绍
3、实现
3.1 找到roi(感兴趣的区域)
3.2 提取分组数字
3.3 分割数字和识别
3.4 得到最后结果

4、结语和相关资源
代码的话,抱歉不能发了,项目需要保密。(ಥ _ ಥ)