[英]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%,通過這樣做,我使用相同的設置實現了非常高的精度,遵循最終腳本..
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.