Pytesseract 图像到字符串问题

Pytesseract Image to String issue

有谁知道我怎样才能更好地获得这些结果?

Total Kills: 15,230,550

Kill Details: (recorded after 2019/10,/Z3]

993,151 331,129
1,330,450 33,265,533
5,031,168

这就是它 returns 但是它应该与下面张贴的图像相同,我是新手 python 所以我可以添加任何参数以使其读取图像更好?

img = cv2.imread("kills.jpeg")

    text = pytesseract.image_to_string(img)

    print(text)

这是我用来读取图像的代码,我可以添加什么来让它更好地读取吗?此外,黑框将覆盖干扰阅读的图像。我还想说我已经添加了 2 个黑框以查看它们背后的图像是否导致了问题,但我仍然遇到同样的问题。

缺少的知识是page-segmentation-mode (psm)。当你得不到想要的结果时,你需要使用它们。

如果我们查看您的图片,唯一的瑕疵是黑色的柱子。除此之外,图像看起来像二值图像。适用于tesseract识别字符和数字。

让我们尝试通过将 psm 设置为 6 来读取图像。

6 Assume a single uniform block of text.

print(pytesseract.image_to_string(img, config="--psm 6")

结果将是:

Total Kills: 75,230,550

Kill Details: (recorded after 2019/10/23)
993,161 331,129
1,380,450 33,265,533
5,031,168

更新


解决问题的第二种方法是获取二进制掩码并将 OCR 应用于掩码特征。

  • 二进制掩码

  • 二进制掩码的特征

正如我们所见,结果与输入图像略有不同。现在当我们应用 OCR 时 result 将是:

Total Kills: 75,230,550

Kill Details: (recorded after 2019/10/23)
993,161 331,129
1,380,450 33,265,533
5,031,168

代码:

import cv2
import numpy as np
import pytesseract

# Load the image
img = cv2.imread("LuKz3.jpg")

# Convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

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

# Extract
krn = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 3))
dlt = cv2.dilate(msk, krn, iterations=5)
res = 255 - cv2.bitwise_and(dlt, msk)

# OCR
txt = pytesseract.image_to_string(res, config="--psm 6")
print(txt)

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