14段数码管和使用OpenCV的Tesseract OCR

3
我正在使用OpenCV 2.4和Tesseract 3,尝试从网络摄像头上读取14段显示器的OCR。问题在于,当我训练Tesseract时,我必须进行足够的腐蚀/膨胀以填充每个段的间隙。但是,我从网络摄像头中读取的图像需要进行预处理以消除噪声。为此,我使用了侵蚀和膨胀,结果图片的各个部分没有连接起来:
- 我用来训练tesseract的图片(即“V”字形):http://i.imgur.com/NbmVqkb.png(所有段都连接在一起) - 我输入到tesseract中的图片:http://i.imgur.com/0E4iXXk.png(有些段连接在一起,有些则没有)
OCR的结果总是不同的,可能是“OVO”也可能是“EB”。我认为,如果我使用更相似的版本来训练tesseract(非链接段),它可能会工作得更好,但是像这样的空格无法用于训练Tesseract(它会说“Empty page”)。
有人有什么解决方法吗?
我尝试增加腐蚀/膨胀的大小,但是其他字母无法识别(B和D很容易混淆),整体结果较差。
谢谢!
编辑:基本上,我需要一种将段落链接在一起以使tesseract更容易读取字符的方法或一种训练tesseract的方法,使其能够处理未链接的段落(据我所见,这是不可能的)。

你可以尝试这个:http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/ - user2950911
@user2950911 我刚试了一下:获取骨架,然后膨胀结果,对于“V”字母,看起来很好,但是“B”和“D”变得99%相似。我相信如果我们能够以某种方式去除靠近角落的小分支(对于矩形而言,骨架类似于>---<而不是-----),在骨架上工作会非常好。 - pHDa
实际上,我尝试了一种稀疏算法,它不会在角落附近产生小枝,但问题仍然存在。如果我过度膨胀以便将字母“V”的线段连接起来,其他字符就无法正常工作,例如“B”和“D”。 - pHDa
1个回答

0

这个问题不用tessaract也可以解决吧?看起来你已经有一种将图像分割成单独字符的方法了。然后你可以给你的显示器段落编号,就像这里所示http://www.randomdata.nl/wiki/index.php/Adruino_14_segment_LED_board,并且只需决定哪些段落正在亮起。然后,您可以使用某种最近距离算法将其与所有字符中亮起的已知段落组合进行匹配,以找到最佳匹配。

按照上面链接的方案,您的V可能被编码如下:

segment number: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 
switched on:    0 1 1 0 0 0 1 0 1 0  0  0  0  0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接