繁体   English   中英

pytesseract/tesseract-OCR 中的字符识别问题。 将“+”识别为“4”

[英]issues with char recognition in pytesseract/tesseract-OCR. Recognize '+' as '4'

如标题中所述,我无法识别字符,脚本将“+”识别为“4”。 我怎样才能提高准确性。 下面的图像示例以及代码。

https://imgur.com/a/VKYssHr

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

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)
My output is:
34+3=8
9+4=16
2+2=4

3 15 67 28 84 0
4 26 67 35 84 0
+ 29 67 44 82 0
3 45 67 58 84 0
= 59 71 73 80 0
8 75 67 88 84 0
9 16 39 28 56 0
+ 30 39 44 54 0
4 45 39 57 56 0
= 59 43 73 52 0
1 75 39 83 56 0
6 85 39 97 56 0
2 16 12 28 28 0
+ 30 12 44 26 0
2 45 12 58 28 0
= 59 15 73 24 0
4 75 12 87 28 0

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

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

像这样的东西

这样会提高识别率,但我怀疑问题出在库本身。 如果这不起作用,我建议使用不同的库或者尝试类似 google vision

一种解决方案是将threshold应用于输入图像。

您有三个输入图像:

img_lst = ["pfB7MnL.png", "0amEBuu.png", "6FHilyj.png"]

如果对每个输入图像应用阈值:

for img_nm in img_lst:
    img = cv2.imread(img_nm)
    img = cv2.resize(img, None, fx=3, fy=3, interpolation=cv2.INTER_CUBIC)
    gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    thr = cv2.threshold(gry, 127, 255, cv2.THRESH_BINARY_INV)[1]

结果将是:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

当你阅读:

txt = pytesseract.image_to_string(thr)
print(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

代码:


import pytesseract
import cv2

img_lst = ["pfB7MnL.png", "0amEBuu.png", "6FHilyj.png"]

for img_nm in img_lst:
    img = cv2.imread(img_nm)
    img = cv2.resize(img, None, fx=3, fy=3, interpolation=cv2.INTER_CUBIC)
    gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    thr = cv2.threshold(gry, 127, 255, cv2.THRESH_BINARY_INV)[1]
    txt = pytesseract.image_to_string(thr)
    print(txt)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM