簡體   English   中英

Tesseract 輸出在非常清晰的圖像中更改、添加和刪除數字

[英]Tesseract output changing, adding, and removing numbers from very clear image

我正在開發一個程序,該程序使用網絡攝像頭使用 pytesseract(長篇故事)從屏幕上讀取不斷變化的數字。 它拍攝整個屏幕的圖像,然后使用存儲在名為“roi”的列表中的預定坐標切出需要記錄的每個數字(其中有 23 個)。 還有一些其他步驟,但這是最重要的部分。 目前它正在不斷地添加、刪除和更改數字,但並非始終如一 這里有些例子:

它錯誤地將其讀作“32.0”1

它正確讀取為“52.0”2

它錯誤地將其讀作“39.3”3

它錯誤地將其讀作“2499.1”4

這些圖像已經使用 OpenCV 處理過,這就是 roi 集中所有圖像的樣子。 根據其他答案,我已將其二值化,嘗試清理邊緣,並在圖像周圍放置一個白色邊框(請參閱代碼)。

該程序每 30 秒讀取一次屏幕,有時正確,有時出錯。 很多時候它喜歡把5s變成3s,3s變成5s,5s變成9s。 有時它只是錯過或完全添加數字。 下面是我處理圖像的代碼。

pytesseract.pytesseract.tesseract_cmd = #tesseract file path
scale = 1.4
img = cv2.imread(#image file path#)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.rotate(img, cv2.ROTATE_180)
width = int(img.shape[1] / scale)
height = int(img.shape[0] / scale)
dim = (width, height)
img = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)                                    
cv2.destroyAllWindows()

myData = []
cong = r'--psm 6 -c tessedit_char_whitelist=+0123456789.-'

for x,r in enumerate(roi):                                                                 
    imgCrop = img[r[0][1]:r[1][1], r[0][0]:r[1][0]]        
    scalebig = 0.2
    wid = int(imgCrop.shape[1] / scalebig)
    hei = int(imgCrop.shape[0] / scalebig)
    newdims = (wid, hei)
    imgCrop = cv2.resize(imgCrop, newdims)

    imgCrop = cv2.threshold(imgCrop,155,255,cv2.THRESH_BINARY)[1]

    kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))                              
    imgCrop = cv2.morphologyEx(imgCrop, cv2.MORPH_CLOSE, kernel2, iterations=2)

    value = [255,255,255]
    imgCrop = cv2.copyMakeBorder(imgCrop, 10, 10, 10, 10, cv2.BORDER_CONSTANT, None, value = value)

    datapoint = pytesseract.image_to_string(imgCrop, lang='eng', config=cong)
    myData.append(datapoint)

輸出是我上面鏈接的圖片。

我已經研究過微調它,但我有一台 Windows 機器,我似乎找不到一個好的教程。 我不是專業的程序員,我花了 2 個月的時間自學 Python 來做到這一點,但是 Tesseract 的機器學習方面讓我感到困惑,而且我不知道如何解決非常不一致的讀數。 如果您需要任何進一步的信息,請詢問,我很樂意告訴您。

編輯:添加了更多錯誤讀取的圖像以供參考

  1. 確保使用正確的圖像格式(jpeg 是 OCR 的錯誤格式)
  2. 在 tesseract LSTM 引擎的情況下,確保字母大小不大於 35 磅。

使用 tesseract best_tessdata 我得到了這些結果:

在此處輸入圖片說明

tesseract 593_small.png -
59.3

在此處輸入圖片說明

tesseract 520_small.png -
52.0

在此處輸入圖片說明

tesseract 2491_small.png -
249.1

暫無
暫無

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

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