python - Pytesseract 图像到字符串问题
问题描述
有谁知道我怎样才能更好地获得这些结果?
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
这是它返回的内容,但是它与下面发布的图像相同,我是 python 新手,所以我可以添加任何参数以使其更好地读取图像吗?
img = cv2.imread("kills.jpeg")
text = pytesseract.image_to_string(img)
print(text)
这是我读取图像的代码,有什么我可以添加使它更好读的吗?此外,黑匣子将覆盖干扰阅读的图像。我还想说我添加了 2 个黑框以查看它们背后的图像是否导致问题,但我仍然遇到同样的问题。
解决方案
缺少的知识是页面分割模式(psm)。当您无法获得所需的结果时,您需要使用它们。
如果我们查看您的图像,唯一的伪影是黑色列。除此之外,图像看起来像二进制图像。适合tesseract识别字符和数字。
让我们尝试通过将 psm 设置为 6 来读取图像。
6 假设一个统一的文本块。
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 时,结果将是:
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)
推荐阅读
- javascript - 在拖动完成之前,拖动光标不会应用光标样式更改
- ios - 从 '(_) throws -> Void' 类型的抛出函数到非抛出函数类型 '([UNNotificationRequest]) -> Void 的无效转换
- gradle - 如何将 Gradle 中的原生 JUnit 5 支持与 Kotlin DSL 结合使用?
- excel - 将文本框添加到 Excel 宏生成的 PDF
- java - 如何使用 JPOS 库测试和模拟外围设备
- php - 当我使用 ajax 发布数据时,我没有收到响应消息
- laravel - 十月 cms (laravel) where 查询
- opentsdb - BOSUN:如何从 BOSUN 获取特定 Tag_key 的 Tag_values?
- javascript - 当我从 Highcharts 动态获取数据时,Highcharts 给出了一个额外的图例
- python - 从python中的字符串中删除LaTeX字符