从图像中读取文本

Lam*_*ade 6 python image-processing pytesser

有关将这些图像转换为文本的建议吗?我正在使用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"))
Run Code Online (Sandbox Code Playgroud)

中间的斜线导致问题.我也尝试使用PIL的'.paste'在图像周围添加大量额外的黑色.我可能会尝试其他一些PIL技巧,但除非必须,否则我宁愿不去那条路.

我尝试使用config =' - psm 10',但我的8'有时会以":"和其他时间的随机字符出现.而且我的0都没有成功.

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

_____________EDIT_______________ 其他样本:

在此输入图像描述 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
Run Code Online (Sandbox Code Playgroud)

最终产生:

ConvertPPTextToReadableNumbers return text =  18/20
ConvertPPTextToReadableNumbers return text =  0/5
ConvertPPTextToReadableNumbers return text =  10/10
ConvertPPTextToReadableNumbers return text =  20/20
Run Code Online (Sandbox Code Playgroud)

小智 5

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

这里有两种可能的方法:

  1. 如果图像的字体、背景和布局是完全可预测的,则根本不需要 Tesseract;这只会让事情变得更加复杂。建立一个代表您需要识别的每个字符的图像库,并检查图像的某些部分是否等于参考图像

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


小智 5

如果有人仍然遇到这个问题...问题是字母是白色的,背景是黑色的...在我的应用程序中,在切换(白色背景黑色字母)后我得到了大约 98% 的准确率,我只是使用 cv2那