如何使用 Tesseract 识别图像中的单个字符?

问题描述 投票:0回答:1

这是原图: original image

这是处理后的图像: processed image

我正在尝试自动化一个迷你游戏,其中角色出现在屏幕上。我做了一些简单的研究并设法将图像处理为您在上面看到的内容,但它似乎无法正常工作。此代码返回单个字符“Q”。有办法做到这一点吗?

我使用的是5.4.0版本

提前致谢

我的代码:

import pytesseract
import cv2
import numpy as np

pytesseract.pytesseract.tesseract_cmd = r'C:\Users\***\AppData\Local\Programs\Tesseract-OCR\tesseract.exe'

image = cv2.imread('ocrtest.png', cv2.IMREAD_GRAYSCALE)
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

cv2.imshow('test', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

data = pytesseract.image_to_string(thresh, lang='eng', config='-c tessedit_char_whitelist=01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ --psm 6 --oem 3')
print(data)

我从这个doc尝试了不同的所有简单阈值处理方法和Otsu的二值化。它导致图像质量很差,而且基本上也不起作用。我选择了自适应阈值,因为在我看来它看起来最好,但我不确定,因为我真的不知道它是如何工作的。

我尝试了所有其他 psm 选项,但它们也不起作用,我选择了 6,因为它至少给了我一些东西。奇怪的是,我认为根据这个描述 11 是最好的,但它什么也没返回。

11    Sparse text. Find as much text as possible in no particular order.

python ocr tesseract python-tesseract
1个回答
0
投票

您的预处理代码在隔离字母方面做得很差。它们在红色通道中分开得很好,所以可能更像这样:

import cv2 as cv

# Load image
im = cv2.imread('letters.png')

# Operate on Red channel
red = im[..., 2]

_, thresh  = cv2.threshold(red, 180, 255, cv2.THRESH_BINARY_INV)

enter image description here

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.