Tesseract 无法识别图像中的文本

问题描述 投票:0回答:2

我正在尝试在 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)

我在下面提供了一些我尝试转换的图像示例(数字是我需要的)。

我愿意使用其他库。

python opencv computer-vision tesseract
2个回答
0
投票

根据超立方体文档

有最小/最大文本大小吗? (它不会读取屏幕文本!)

为了合理的准确性,有最小文本大小。你必须 考虑分辨率和点大小。准确率下降到以下 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


0
投票

您需要调整图像的颜色级别以删除背景。

adjust Color level

OpenCV 中的颜色级别

然后,将图像更改为灰度并应用阈值。

greyscale image

threshold image

最后,反转你的图像,让超立方体能够很好地识别你的图像。

inverted image

© www.soinside.com 2019 - 2024. All rights reserved.