【问题标题】:14 segment display and Tesseract OCR with OpenCV14 段显示和带有 OpenCV 的 Tesseract OCR
【发布时间】:2015-09-16 20:49:27
【问题描述】:

我正在使用 OpenCV 2.4 和 Tesseract 3

我正在尝试通过网络摄像头在 14 段显示器上进行 OCR。

问题在于,当我训练 Tesseract 时,我必须进行足够的侵蚀/膨胀来填补每个片段的空白。但是,我从网络摄像头读取的图像需要进行预处理以消除噪音。为此,我使用腐蚀和膨胀,生成的图片没有链接其片段:

OCR-ing 的结果总是不同的,可以是“OVO”也可以是“EB”。我想也许如果我用与我实际阅读的内容(非链接段)更相似的版本来训练 tesseract,它可能会更好地工作,但无法用这样的空格训练 Tesseract(它说“空页”)。

有人知道如何解决这个问题吗?

我尝试增加腐蚀/膨胀的大小,但随后无法识别其他字母(B 和 D 令人困惑)并且总体结果较低。

谢谢!

编辑:基本上,我需要一种将段链接在一起的方法,以使 tesseract 更容易读取字符,或者用未链接的段训练 tesseract 的方法(据我所见,可以'不会发生)

【问题讨论】:

  • @user2950911 我刚试过这个:获取骨架,然后扩大结果,对于“V”字母,这似乎很好,但随后“B”和“D”变得 99% 相似.我相信,如果我们能够以某种方式移除靠近角落的小树枝(对于矩形,骨架是这样的:>---
  • 实际上,我尝试了一种细化算法,它不会在角落附近出现小分支,但问题仍然存在。如果我为了将字母“V”的片段链接在一起而过度扩张,其他字符将无法像“B”和“D”那样工作。

标签: c++ opencv ocr tesseract


【解决方案1】:

难道不能为此跳过 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

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2010-09-07
    • 2013-04-25
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2015-09-10
    相关资源
    最近更新 更多