【问题标题】:Python Optical Character Recognition (OCR) of a single character of unknown orientation未知方向的单个字符的 Python 光学字符识别 (OCR)
【发布时间】:2018-09-08 14:56:22
【问题描述】:

我需要对背景清晰的单个字符的图像执行 OCR。这是针对自主无人机学生竞赛的,因此一切都需要自动进行,并且不能在飞行中手动调整过程。然而,该字符将在一个已知的集合中(可能是大写字母数字)。对于上下文,我从任意方向的图像开始:

然后我会自动确定角度、裁剪并在通过 OCR 运行图像之前对其进行预处理。我无法事先自动计算的一件事(因为它实际上是 OCR 过程的一部分)是剩下的 4 个方向(见下文)中的哪一个是正确的。 这是我的问题的关键 - 是否可以设置 OCR,使其将旋转到 90、180 或 270 度的 A(或任何字符)视为 A,而不是认为它是其他东西,例如V?据我所知,Tesseract 中似乎有 OSD 功能,但我无法让它们与单个字符一起使用。

https://i.stack.imgur.com/TlaOr.png https://i.stack.imgur.com/ET9hr.png https://i.stack.imgur.com/maD0E.png https://i.stack.imgur.com/b4mth.png

目前,我正在使用 PyTesseract 访问 Tesseract OCR 安装。

ocrText = pytesseract.image_to_string(imgD, config='-psm 6')

另外,即使以正确的方向呈现清晰的图像,我也一直无法保证系统的总体准确性——任何关于此的提示也会很有用。例如,这就是我使用 PSM 6 而不是 PSM 10 的原因——它似乎提供了更好的准确性,即使 10 专门用于单个字符。

任何帮助将不胜感激

谢谢!

【问题讨论】:

标签: python image-processing python-imaging-library ocr tesseract


【解决方案1】:

一个简单的解决方案是使用每个角色的所有四个旋转版本进行训练。您可以将它们训练为相同的字符(全部为 'A')或不同的字符('A0'、'A1'、'A2'、'A3')。

请注意,这可能会稍微降低性能。


在你的情况下,如果字符集是已知的并且字符周围有一个漂亮的框架,你可以很好地自己执行识别,而不需要 Tesseract。

【讨论】:

  • 谢谢,我没有考虑过这样的自定义培训(我一直在使用 Tesseract 附带的默认英文方案,因为我们不知道比赛中将使用的字体)。通过“自己执行识别”,您是建议仅输出图像并让人类识别字符,还是编写一个简单的特定于上下文的 OCR 引擎来完成它?
  • @jt78:“一切都需要自动化”,不是吗?
  • 是的,所以我假设您的意思是后一种选择?
  • 您能推荐任何教程或 GUI 工具来帮助简化此过程吗?我设想训练会相当简单——您输入一组图像/文本对,其中每个图像描述一个字符,相关的文本给出该图像应该被解释为的字符。然而,这个过程似乎更像是基于调整现有语言和字体?
猜你喜欢
  • 2014-04-25
  • 2011-10-30
  • 2014-05-29
  • 2011-07-16
  • 2010-10-28
  • 2020-12-26
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多