Python pytesseract/tesseract OCR中的字符识别问题。认识到'+';as';4';

Python pytesseract/tesseract OCR中的字符识别问题。认识到'+';as';4';,python,python-tesseract,Python,Python Tesseract,正如标题中提到的,我在识别char时遇到问题,脚本将“+”识别为“4”。我怎样才能提高更多的准确性。 下面的图像示例以及代码 我尝试使用#中的代码进行优化。但我没有成功 img = cv2.imread("imgbug.png") img = cv2.resize(img, None, fx=1.98, fy=1.98, interpolation=cv2.INTER_CUBIC) img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ke

正如标题中提到的,我在识别char时遇到问题,脚本将“+”识别为“4”。我怎样才能提高更多的准确性。 下面的图像示例以及代码

我尝试使用#中的代码进行优化。但我没有成功

img = cv2.imread("imgbug.png")
img = cv2.resize(img, None, fx=1.98, fy=1.98, interpolation=cv2.INTER_CUBIC)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((1, 1), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
img = cv2.erode(img, kernel, iterations=1)
#img=cv2.threshold(cv2.GaussianBlur(img, (1, 1), 0), 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
#img=cv2.threshold(cv2.bilateralFilter(img, 5, 75, 75), 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
cmd = pytesseract.image_to_string(img)
xx = pytesseract.image_to_boxes(img)
cv2.imshow('',img)
print(cmd)
print(xx)

尝试将其更改为灰度,然后设置阈值

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
像这样的


这将提高识别率,但我怀疑问题出在库本身。如果这不起作用,我建议使用不同的库,或者尝试类似google vision的方法,尝试将其更改为灰度,然后设置阈值

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
像这样的


这将提高识别率,但我怀疑问题出在库本身。如果这不起作用,我建议使用不同的库,或者尝试类似google vision的方法。一种解决方案是对输入图像应用
阈值

您有三个输入图像:

img_lst=[“pfB7MnL.png”、“0amEBuu.png”、“6FHilyj.png”]
如果对每个输入图像应用阈值:

img\U lst中的img\U nm的
:
img=cv2.imread(img_nm)
img=cv2.resize(img,无,fx=3,fy=3,插值=cv2.INTER_CUBIC)
gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
thr=cv2.阈值(gry,127255,cv2.阈值二进制INV)[1]
结果将是:

当你读到:

txt=pytesseract.image\u to\u字符串(thr)
打印(txt)
结果将是:

2+9=14
9+1=6
9+2=11

3+3=8
9+4=16
2+2=4

1+5=10
7+7=14
9+6=16
代码:


导入pytesseract
进口cv2
img_lst=[“pfB7MnL.png”、“0amEBuu.png”、“6FHilyj.png”]
对于img_lst中的img_nm:
img=cv2.imread(img_nm)
img=cv2.resize(img,无,fx=3,fy=3,插值=cv2.INTER_CUBIC)
gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
thr=cv2.阈值(gry,127255,cv2.阈值二进制INV)[1]
txt=pytesseract.image\u to\u字符串(thr)
打印(txt)

一种解决方案是对输入图像应用
阈值

您有三个输入图像:

img_lst=[“pfB7MnL.png”、“0amEBuu.png”、“6FHilyj.png”]
如果对每个输入图像应用阈值:

img\U lst中的img\U nm的
:
img=cv2.imread(img_nm)
img=cv2.resize(img,无,fx=3,fy=3,插值=cv2.INTER_CUBIC)
gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
thr=cv2.阈值(gry,127255,cv2.阈值二进制INV)[1]
结果将是:

当你读到:

txt=pytesseract.image\u to\u字符串(thr)
打印(txt)
结果将是:

2+9=14
9+1=6
9+2=11

3+3=8
9+4=16
2+2=4

1+5=10
7+7=14
9+6=16
代码:


导入pytesseract
进口cv2
img_lst=[“pfB7MnL.png”、“0amEBuu.png”、“6FHilyj.png”]
对于img_lst中的img_nm:
img=cv2.imread(img_nm)
img=cv2.resize(img,无,fx=3,fy=3,插值=cv2.INTER_CUBIC)
gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
thr=cv2.阈值(gry,127255,cv2.阈值二进制INV)[1]
txt=pytesseract.image\u to\u字符串(thr)
打印(txt)

看看:。所有OCR都需要预处理,在tesseract中,作为一个免费选项,您需要自己进行预处理。请看:。所有的OCR都需要预处理,在tesseract中,作为一个免费选项,你需要自己来做。非常感谢你的代码,它帮助了我很多。但是我仍然有问题,但是在其他图片中,你有什么建议吗这张图片给了我同样的问题,也许,或者让我问你,你用不同的参数试过代码了吗?不幸的是,没有解决ocr问题的通用代码。我的建议是1。请尝试使用不同的值,即0、255或0、128 2进行threahold。如果opt 1不起作用,请尝试自适应阈值。我将以这种方式尝试。然而,带有数字的图像总是随机的,在我看来,当我修改代码时,我可以解决一些问题,但无法解决其他问题。我在thresold输入中做了一些更改,似乎对我有用。我会做一些测试。非常感谢你。非常感谢你的代码,它帮了我很多。但是我仍然有问题,但是在其他图片中,你有什么建议吗这张图片给了我同样的问题,也许,或者让我问你,你用不同的参数试过代码了吗?不幸的是,没有解决ocr问题的通用代码。我的建议是1。请尝试使用不同的值,即0、255或0、128 2进行threahold。如果opt 1不起作用,请尝试自适应阈值。我将以这种方式尝试。然而,带有数字的图像总是随机的,在我看来,当我修改代码时,我可以解决一些问题,但无法解决其他问题。我在thresold输入中做了一些更改,似乎对我有用。我会做一些测试。非常感谢你。非常感谢你的代码,它帮了我很多。但是我仍然有问题,但是在其他图片中,你有什么建议吗?imgur.com/a/Pz5O4Mr-这张图片给了我同样的问题。我用过皮特丝,它很烂。只需使用另一个基于机器学习的库。在github上搜索会很有帮助。非常感谢你的代码,它帮了我很多。但是我仍然有问题,但是在其他图片中,你有什么建议吗?imgur.com/a/Pz5O4Mr-这张图片给了我同样的问题。我用过皮特丝,它很烂。只需使用另一个基于机器学习的库。在github上搜索会很有帮助。