如何提高 python/tesseract 图像到文本的准确性?

时间:2021-03-16 01:10:51

标签: python ocr tesseract python-tesseract

如何从一个区域抓取图像并正确使用 tesseract 转换为文本?我目前得到了这个:

img = ImageGrab.grab(bbox =(1341,182, 1778, 213))
tesstr = pytesseract.image_to_string(np.array(img), lang ='eng')
print (tesstr)

问题是它翻译得非常错误,因为它从中获取文本的区域是红色和蓝色背景,我该如何提高其准确性?它试图从图像转换为文本的示例:

2 个答案:

答案 0 :(得分:2)

  • *问题是它的翻译非常错误,因为它从中获取文本的区域是红色和蓝色背景,我该如何提高其准确性? *

您应该知道Improving the quality of the output。您需要尝试列出的每种建议方法。如果还是达不到想要的效果,可以看看其他的方法:

要得到想要的结果,需要得到图像的二值掩码。简单阈值和自适应阈值都不适用于输入图像。

获取二进制掩码

    1. 上采样并将输入图像转换为 HSV 颜色空间
    1. 设置较低和较高的颜色边界。

结果:

enter image description here

0.37 版本的 OCR 输出将是:

Day 20204, 16:03:12: Your ‘Metal Triangle Foundation’
was destroved!

代码:


import cv2
import numpy as np
import pytesseract

# Load the image
img = cv2.imread("b.png")

# Up-sample
img = cv2.resize(img, (0, 0), fx=2, fy=2)

# Convert to HSV color-space
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# Get the binary mask
msk = cv2.inRange(hsv, np.array([0, 0, 123]), np.array([179, 255, 255]))

# OCR
txt = pytesseract.image_to_string(msk)
print(txt)

# Display
cv2.imshow("msk", msk)
cv2.waitKey(0)

答案 1 :(得分:1)

Tesseract API 中有一个选项,您可以通过增加 DPI 来检查图像以检测文本。 DPI 越高,精度越高,直到出现收益递减。需要更多的处理能力。 DPI 不应超过原始图像 DPI。