opencv Tesseract无法识别图像中的文本[关闭]

yjghlzjz  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(132)

**已关闭。**此问题为not about programming or software development。目前不接受回答。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题相关,可以发表评论,说明在何处可以回答此问题。
18天前关门了。
Improve this question
我试图在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)

字符串
我愿意使用其他图书馆。

u5rb5r59

u5rb5r591#

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

inBlack = np.array([170, 170, 170], dtype=np.float32)
inWhite = np.array([255, 255, 255], dtype=np.float32)
inGamma = np.array([1.0, 1.0, 1.0], dtype=np.float32)
outBlack = np.array([0, 0, 0], dtype=np.float32)
outWhite = np.array([255, 255, 255], dtype=np.float32)

img = cv2.imread(file_path)

int8 = cv2.convertScaleAbs(img)

color_level = np.clip((int8 - inBlack) / (inWhite - inBlack), 0, 255)
color_level = (color_level ** (1 / inGamma)) * (outWhite - outBlack) + outBlack
color_level = np.clip(color_level, 0, 255).astype(np.uint8)

字符串
Color levels in OpenCV
然后,将图像转换为灰度并应用阈值。
greyscale image
threshold image
最后,反转你的图像,让tesseract很好地识别你的图像。
inverted image

inverted = cv2.bitwise_not(threshold)

jq6vz3qz

jq6vz3qz2#

根据超立方体的文档
是否有最小/最大文本大小?(它不会读取屏幕文本!)
有一个合理的准确性的最小文本大小.你必须考虑分辨率以及点大小.精度下降低于10 pt x 300dpi,迅速低于8 pt x 300dpi.一个快速的检查是计算你的字符的x高度的像素.(X-height是小写字母x的高度。)在10 pt x 300dpi时,x-height通常约为20像素,尽管这可能因字体而异。低于10像素的x-height,你几乎没有机会得到准确的结果,在8像素以下,大部分文本将被“去除噪音”。
使用LSTM时,x高度的最大值似乎也在30 px左右。超过这个值,Tesseract不会产生准确的结果。传统引擎似乎不太容易出现这种情况(参见https://groups.google.com/forum/#!msg/tesseract-ocr/Wdh_JJwnw94/24 JHDYQbBQAJ)。
因此,首先要做的是增加输入图像的大小,因为它们在限制的大小之下。然后您可以应用维纳或某种过滤器来再次提高质量。EasyOCR也可以是另一种选择,而不是tesseract

相关问题