Python Pytesseract在阅读国际象棋符号时变得不准确

Python Pytesseract在阅读国际象棋符号时变得不准确,python,python-tesseract,Python,Python Tesseract,我一直在用pytesseract做实验,为了提高精确度,我也做了一些改进,但对我来说并不奏效。这是我的img: 这是输出: 代码: 我不知道一切,因为我刚刚开始,有人能给我一些提示如何做到这一点 编辑:Ahx解决了我的问题,但代码中有一些错误。它的读数是6,即é。例如,d6,它将把它读作dé。 我添加了一些阈值和模糊,因为我认为这将改善它,但它没有。 以下是我的更新代码: img = cv2.imread('temp.png') hsv = cv2.cvtColor(img, cv2.COL

我一直在用pytesseract做实验,为了提高精确度,我也做了一些改进,但对我来说并不奏效。这是我的img:

这是输出:

代码:

我不知道一切,因为我刚刚开始,有人能给我一些提示如何做到这一点

编辑:
Ahx
解决了我的问题,但代码中有一些错误。它的读数是6,即
é
。例如,
d6
,它将把它读作
。 我添加了一些阈值和模糊,因为我认为这将改善它,但它没有。 以下是我的更新代码:

img = cv2.imread('temp.png')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lwr = np.array([0, 0, 0])
upr = np.array([179, 255, 180])
msk = cv2.inRange(hsv, lwr, upr)
msk = cv2.resize(msk, (0, 0), fx=3, fy=3, interpolation=cv2.INTER_CUBIC)
msk = cv2.adaptiveThreshold(cv2.bilateralFilter(msk, 9, 75, 75), 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
msk = cv2.adaptiveThreshold(cv2.medianBlur(msk, 3), 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
txt = pytesseract.image_to_string(msk, lang='eng', config=r'--psm 6 --oem 3')
e6
实际上起了作用,但在其他的
d6
中,
Nf6
总是
e

如果你想尝试一下,这里有一个例子:

输出:


结果:
Nf6é

您可以通过执行颜色分割轻松获得结果。首先,您需要加载图像,将其转换为HSV格式。接下来,定义上下边界以获得二进制掩码。二进制掩码将包含识别字符所需的特征。然后,我们将对二进制掩码进行上采样,并向tesseract提供输入

  • 上采样二进制掩码

  • OCR结果
    e6


代码:

导入cv2
将numpy作为np导入
导入pytesseract
#加载图像
img=cv2.imread(“iTO9h.png”)
#转换为灰度
hsv=cv2.CVT颜色(img,cv2.COLOR\U BGR2HSV)
#获取二进制掩码
lwr=np.数组([0,0,0])
upr=np.数组([179,255,180])
msk=cv2.inRange(高速列车、轻轨列车、不间断电源)
#上样
调整大小(msk,(0,0),fx=2,fy=2)
#光学字符识别
txt=pytesseract.image_to_字符串(msk)
打印(txt)

只是有些困惑,您使用了什么模块来设置
获取二进制掩码
?我用cv2试过,但不存在。我是否使用了
bitwase_和
?我使用了
bitwase_和()
,它只显示黑色图像。我更新了我的代码,请再次查看答案。我遇到了一些问题,请查看我更新的问题。您称我的代码错误是由pytesseract引起的。您正在使用默认的PyteSeract引擎。如果希望得到100%准确的解决方案,则需要针对这些输入训练tesseract。他们的课程中有一个很好的教程,你应该好好学习。
img = cv2.imread('temp.png')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lwr = np.array([0, 0, 0])
upr = np.array([179, 255, 180])
msk = cv2.inRange(hsv, lwr, upr)
msk = cv2.resize(msk, (0, 0), fx=3, fy=3, interpolation=cv2.INTER_CUBIC)
msk = cv2.adaptiveThreshold(cv2.bilateralFilter(msk, 9, 75, 75), 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
msk = cv2.adaptiveThreshold(cv2.medianBlur(msk, 3), 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
txt = pytesseract.image_to_string(msk, lang='eng', config=r'--psm 6 --oem 3')