Pytesseract 读取彩色文本

Pytesseract read coloured text

我正在尝试使用 Pytesseract 阅读彩色(红色和橙色)文本。 我试着不对图像进行灰度化,但这也不起作用。

图像,它可以读取

无法读取的图像

我当前的代码是:

        tesstr = pytesseract.image_to_string(
                    cv2.cvtColor(nm.array(cap), cv2.COLOR_BGR2GRAY),
                    config="--psm 7")

您可以申请:


    1. 侵蚀
    1. 自适应阈值

侵蚀会降低图像的厚度,如:

Original Image Erosion

当我们对 53 和 31 图像应用腐蚀时

Original Image Erosion

  • 对于adaptive-threshold:

    • blockSize=27

      • Erosion Threshold
    • blockSize=11

      • Erosion  Threshold

对于每个图像,我们需要应用不同的阈值处理

代码:


import cv2
from pytesseract import image_to_string

img_lst = ["fifty_three.png", "thirty_one.png"]

for img_pth in img_lst:
    img = cv2.imread(img_pth)
    (h, w) = img.shape[:2]
    img = cv2.resize(img, (w*2, h*2))
    gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    erd = cv2.erode(gry, None, iterations=2)
    if img_pth == "fifty_three.png":
        thr = cv2.adaptiveThreshold(erd, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 27, 5)
    else:
        thr = cv2.adaptiveThreshold(erd, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 5)
    txt = image_to_string(thr, config="--psm 6 digits")
    print(txt)
    cv2.imshow("thr", thr)
    cv2.waitKey(0)

结果:

53

31

可能问题1:为什么两个不同的块大小参数?

嗯,每个图像的厚度是不同的。所以文本识别需要两个不同的参数。


可能的问题2:为什么None定义为erode方法的内核?

不幸的是,我找不到合适的腐蚀内核。因此我设置为 None.


这个小函数(如下)适用于任何颜色

ec9Ut.png

击球结果

x18MN.png

击球结果

SFr48.png

击球结果

import cv2
from pytesseract import image_to_string

def getText(filename):
    img = cv2.imread(filename)
    HSV_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    h,s,v = cv2.split(HSV_img)
    thresh = cv2.threshold(v, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
    txt = image_to_string(thresh, config="--psm 6 digits")
    return txt
    

text = getText('ec9Ut.png')
print(text)
text = getText('x18MN.png')
print(text)
text = getText('SFr48.png')
print(text)

输出

46
31
53