我正在尝试在 python 3.11 中使用 tesseract 在 Windows 11 上将一些图像转换为文本。我尝试过对图像进行预处理,包括变形、放大、灰度和阈值处理,但似乎没有任何效果。
我一直在修改和更改我的代码,但下面是我必须要做的(路径是每个图像的本地路径)-
import cv2
import pytesseract as tess
tess.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
img = cv2.imread(path)
greyscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
threshold = cv2.threshold(greyscale, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
data = tess.image_to_string(threshold, config='--psm 6')
print(data)
我在下面提供了一些我尝试转换的图像示例(数字是我需要的)。
我愿意使用其他库。
根据超立方体文档
有最小/最大文本大小吗? (它不会读取屏幕文本!)
为了合理的准确性,有最小文本大小。你必须 考虑分辨率和点大小。准确率下降到以下 10pt x 300dpi,迅速低于 8pt x 300dpi。快速检查就是数数 字符 x 高度的像素。 (X高度是高度 小写 x 的大小。)在 10pt x 300dpi 时,x 高度通常约为 20 像素,尽管该值因字体而异。 x 高度低于 10 像素时,您几乎没有机会 准确的结果,并且低于大约 8 像素,大部分文本将被 “消除噪音”。
使用 LSTM 似乎也有一个最大的 x 高度 30 像素。除此之外,Tesseract 不会产生准确的结果。这 旧版引擎似乎不太容易出现这种情况(请参阅 https://groups.google.com/forum/#!msg/tesseract-ocr/Wdh_JJwnw94/24JHDYQbBQAJ)。
因此首先要做的是增加输入图像的大小,因为它们低于限制大小。然后你可以应用 wiener 或某种过滤器来再次提高质量。
EasyOCR
也可以是另一种选择,而不是 tesseract