簡體   English   中英

使用 pytesseract 提高打印屏幕圖像讀取的准確性

[英]improve the accuracy of image reading of a printscreen with pytesseract

我的腳本捕獲了屏幕的一部分,那里總會有數字,目前我找到的最好的配置是這個,它在 90% 以上的時間都是正確的,但是由於圖像非常小,有時它會讀取錯誤的數字,我可以改進一些配置以使其更准確嗎?

原圖

在此處輸入圖像描述

tresh img,經過一些更改

在此處輸入圖像描述

我的實際代碼



def text_from_region(region):
    """_summary_

    Args:
        region (tuple of x, y): _description_

    Returns:
        _type_: _description_
    """
    # C:\Program Files\Tesseract-OCR\tesseract.exe
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

    img = ImageGrab.grab(bbox=(region))
    img = np.array(img)
    img = cv2.cvtColor(src=img, code=cv2.COLOR_RGB2BGR)
    
    gray = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2GRAY)
    _, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)

    config = '--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789'
    text = pytesseract.image_to_string(thresh, config=config)

    return int(text)

568 示例上的錯誤,Cap: x 是我的 tkinter 標簽顯示結果。

在此處輸入圖像描述

我對未來讀者的解決方案是將以前很小的圖像大小增加到其原始大小的 300%,通過這樣做,我使用相同的設置實現了非常高的精度,遵循最終腳本..

最終調試 img

def ReadImageFromScreen(coords):
    """take a screenshot from a region

    Args:
        coords (int tuple): 0,0,100,100

    Returns:
        _type_: _description_
    """ 
    img = ImageGrab.grab(bbox=(coords))
    img = np.array(img)
    img = cv2.cvtColor(src=img, code=cv2.COLOR_RGB2BGR)
    img = cv2.cvtColor(src=img, code=cv2.COLOR_BGR2GRAY)
    return img

def resize_img(img, scale):

    width = int(img.shape[1] * scale / 100)
    height = int(img.shape[0] * scale / 100)

    dsize = (width, height)
    
    return cv2.resize(img, dsize=dsize)
def text_from_region(region):
    """_summary_

    Args:
        region (tuple of x, y): _description_

    Returns:
        _type_: _description_
    """
    # C:\Program Files\Tesseract-OCR\tesseract.exe
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

    img = ReadImageFromScreen(region)

    gray_resized = resize_img(img,300)
    _, thresh = cv2.threshold(gray_resized, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)

    config = '--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789'
    text = pytesseract.image_to_string(thresh, config=config)

    return text.strip()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM