【发布时间】:2019-09-20 06:33:22
【问题描述】:
我正在为视频游戏创建一个机器人,我必须阅读屏幕上显示的一些信息。鉴于信息总是在同一个位置,我可以截图并将图片裁剪到正确的位置。
90% 的情况下,识别是完美的,但有时它会返回看起来完全随机的东西(参见下面的示例)。
我试过把图片转成黑白没有成功,并尝试改变pytesseract的配置(config = ("-l fra --oem 1 --psm 6"))
def readScreenPart(x,y,w,h):
monitor = {"top": y, "left": x, "width": w, "height": h}
output = "monitor.png"
with mss.mss() as sct:
sct_img = sct.grab(monitor)
mss.tools.to_png(sct_img.rgb, sct_img.size, output=output)
img = cv2.imread("monitor.png")
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite("result.png", img)
config = ("-l fra --oem 1 --psm 6")
return pytesseract.image_to_string(img,config=config)
例子:这张图片产生了一个bug,它返回字符串“IRPMV/LEIILK”
另一张图片
现在我不知道问题出在哪里,因为它不仅仅是一个错误的字符,而是一个完全随机的结果..
感谢您的帮助
【问题讨论】:
-
另一个例子,这个返回 "plooWWLEIlÿ 3" (i.imgur.com/IhWeT0F.png)
-
Pytesseract使用程序tesseract,该程序旨在识别白纸上带有黑色文本的扫描文档。在tesseract页面上,您甚至可以找到有关如何在白色背景上创建更好的黑色文本以使用tesseract获得更好结果的信息。您的代码在深灰色背景上创建浅灰色文本,因此可能不足以正确识别文本。 -
tesseract documentation: Improving the quality of the output。在反转图像中,您可以阅读:虽然 tesseract 3.05 版(及更早版本)可以毫无问题地处理反转图像(深色背景和浅色文本),但 4.x 版本在浅色背景上使用深色文本。
-
您可以使用
img = 255 - img反转您的图像。 -
我用你的例子运行代码,我得到了正确的结果。甚至我也不必转换为灰度。 PyTesseract 0.2.7 / Tesseract 4.0.0-beta.1 / Python 3.7.4 / Linux Mint 19.2。
标签: python image opencv ocr python-tesseract