7

关于将这些图像转换为文本的任何建议?我正在使用 pytesseract,除此之外,它在大多数情况下都能正常工作。理想情况下,我会准确地阅读这些数字。最坏的情况我可以尝试使用 PIL 来确定“/”左侧的数字是否为零。从左边开始,找到第一个白色像素,然后

在此处输入图像描述 在此处输入图像描述

from PIL import Image
from pytesseract import image_to_string

myText = image_to_string(Image.open("tmp/test.jpg"),config='-psm 10')
myText = image_to_string(Image.open("tmp/test.jpg"))

中间的斜线会导致这里出现问题。我还尝试使用 PIL 的“.paste”在图像周围添加大量额外的黑色。可能还有一些其他的 PIL 技巧我可以尝试,但除非我必须这样做,否则我宁愿不走那条路。

我尝试使用 config='-psm 10' 但我的 8 有时会以“:”的形式出现,而其他时候则是随机字符。而我的 0 则一无所获。

参考:pytesseract 不适用于 -psm 10 的一位数字图像

_____________编辑_______________ 其他示例:

在此处输入图像描述 1BJ2I]

在此处输入图像描述 DIS

在此处输入图像描述 10.I'10

在此处输入图像描述 20.I20

所以我正在做一些目前似乎有效的巫毒转换。但看起来很容易出错:

def ConvertPPTextToReadableNumbers(text):
    text = RemoveNonASCIICharacters(text)
    text = text.replace("I]", "0")
    text = text.replace("|]", "0")
    text = text.replace("l]", "0")
    text = text.replace("B", "8")
    text = text.replace("D", "0")
    text = text.replace("S", "5")
    text = text.replace(".I'", "/")
    text = text.replace(".I", "/")
    text = text.replace("I'", "/")
    text = text.replace("J", "/")
    return text

最终生成:

ConvertPPTextToReadableNumbers return text =  18/20
ConvertPPTextToReadableNumbers return text =  0/5
ConvertPPTextToReadableNumbers return text =  10/10
ConvertPPTextToReadableNumbers return text =  20/20
4

2 回答 2

4

如果有人仍然对此感到困惑......问题是字母是白色的,背景是黑色的......在我的应用程序中,在切换我刚刚使用 cv2 的(白色背景黑色字母)后,我得到了大约 98% 的准确度那

于 2020-05-16T08:30:30.610 回答
4

一般来说,大多数 OCR 工具(如 Tesseract)都经过调整,可以处理打印文本的高分辨率扫描。它们在低分辨率或像素化图像上表现不佳。

这里有两种可能的方法:

  1. 如果图像的字体、背景和布局是完全可预测的,那么您根本不需要 Tesseract;这只是使事情复杂化。建立一个代表您需要识别的每个字符的图像库,并检查图像的某些部分是否与参考图像相同

  2. 如果这不是一个选项,或者看起来太难了,您可以使用其中一种hq*x 算法来放大像素化图像。添加的细节可能足以让 Tesseract 可靠地识别字符。

于 2016-08-30T18:24:39.143 回答