我需要对清晰背景上的单个字符图像执行 OCR。这是一场自主无人机学生竞赛,因此一切都需要自动化,并且不能在飞行中手动定制流程。然而,该字符将位于已知的集合中(可能是大写字母数字)。对于上下文,我从任意方向的图像开始:
然后,我会自动确定角度、裁剪并预处理图像,然后再通过 OCR 运行图像。我无法事先自动计算的一件事(因为它实际上是 OCR 过程的一部分)是其余 4 个方向(见下文)中哪一个是正确的。 这是我的问题的关键 - 是否可以设置 OCR,以便将 A(或任何字符)旋转到 90、180 或 270 度视为 A,而不是认为它是其他东西,例如V?据我所知,Tesseract 中似乎提供了 OSD 功能,但我无法让它们使用单个字符。
/image/TlaOr.png /image/ET9hr.png /image/maD0E.png /image/b4mth.png
目前,我正在使用 PyTesseract 访问 Tesseract OCR 安装。
ocrText = pytesseract.image_to_string(imgD, config='-psm 6')
另外,即使在正确的方向上呈现清晰的图像,我也一直在系统的总体准确性方面遇到问题 - 有关这方面的任何提示也很有用。例如,这就是我使用 PSM 6 而不是 PSM 10 的原因 - 它似乎提供了更好的准确性,尽管 10 专门用于单个字符。
任何帮助将不胜感激
谢谢!
最佳答案
一个简单的解决方案是使用每个角色的所有四个旋转版本进行训练。您可以将它们训练为相同的角色(全部为“A”)或不同的角色(“A0”、“A1”、“A2”、“A3”)。
无论如何请注意,这可能会稍微降低性能。
<小时/>就您而言,如果字符集已知并且字符周围有一个漂亮的框架,您可以自己很好地执行识别,而无需 Tesseract。
关于未知方向的单个字符的 Python 光学字符识别 (OCR),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49559642/