[英]Tesseract output changing, adding, and removing numbers from very clear image
我正在開發一個程序,該程序使用網絡攝像頭使用 pytesseract(長篇故事)從屏幕上讀取不斷變化的數字。 它拍攝整個屏幕的圖像,然后使用存儲在名為“roi”的列表中的預定坐標切出需要記錄的每個數字(其中有 23 個)。 還有一些其他步驟,但這是最重要的部分。 目前它正在不斷地添加、刪除和更改數字,但並非始終如一。 這里有些例子:
它錯誤地將其讀作“32.0”
它正確讀取為“52.0”
它錯誤地將其讀作“39.3”
它錯誤地將其讀作“2499.1”
這些圖像已經使用 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 的機器學習方面讓我感到困惑,而且我不知道如何解決非常不一致的讀數。 如果您需要任何進一步的信息,請詢問,我很樂意告訴您。
編輯:添加了更多錯誤讀取的圖像以供參考
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.