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)
有谁知道我怎样才能更好地获得这些结果?
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)