2017-03-02 78 views
3

我試圖使用Tesseract OCR v3.2來識別計算機屏幕上的字符,並且它給我帶來了很大的麻煩, -resolution字體,特別是當涉及到數字時。字體看起來像this。目前,我正在將輸入圖像通過Python中的雙三次過濾器進行4倍放大,導致它們看起來像this。 Tesseract將處​​理後的圖像讀取爲「12345B?89D」。Tesseract OCR,讀取低分辨率/像素化字體(尤其是數字)

我嘗試了各種其他高檔比例(高達1000%),以及其他圖像過濾器,如lanczos,銳化,平滑,邊緣增強和抗鋸齒。沒有人產生更準確的結果。任何人都有如何提高對這種字體的認識的想法?

+0

嘛imgur網站給出了重試的放大後的圖像死長頸鹿,然後503,所以我真的不能故障正方體爲沒有得到這一點。與此同時 - 由於缺乏對圖像預處理的有用反饋,您可以考慮爲Tesseract生成培訓文件並使用該文件(這裏有幾個免費編輯器)。另外:你有沒有確保你通過Tesseract灰度圖像格式(不是RGB或BGR)? – user268396

+0

至少看起來你是正確的,你的預處理工作很好。我用免費的[OCR.space online ocr](https://ocr.space)測試了你的圖片。雖然原來的一個仍然有一些錯誤的數字,但是升級後的版本效果很好。 OCR鏈接:https://api.ocr.space/parse/imageurl?apikey=helloworld&url=https://i.stack.imgur.com/0y70V.png&language=kor – Tienkamp

回答

0

只是疲倦地使用您的小型和放大(x4)圖像餵養Tesseract 4.0.0a。即使調整了Tesseract參數,小的輸出也沒有輸出。在所有三種測試案例中,升級版本都能夠進行OCR - 無需進一步處理,灰度化和進一步增強。

使用的Tesseract集成到OpenCV 3.2.0。以下是代碼。

import cv2 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

def show(img): 
    plt.imshow(img, cmap="gray") 
    plt.show() 

def ocr(img): 
    # Tesseract mode settings: 
    # Page Segmentation mode (PSmode) = 3 (defualt = 3) 
    # OCR Enginer Mode (OEM) = 3 (defualt = 3) 
    tesser = cv2.text.OCRTesseract_create('C:/Program Files/Tesseract 4.0.0/tessdata/','eng','',3,3) 
    retval = tesser.run(img, 0) # return string type 
    print 'OCR Output: ' + retval 

# Directly feed image to Tesseact 
img = cv2.imread('./imagesStackoverflow/SmallDigits-x4.png') 
ocr(img) 

# Load image as gray scale 
img = cv2.imread('./imagesStackoverflow/SmallDigits-x4.png',0); 
show(img) 
ocr(img) 

# Enhance image and get same positive result 
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) 
kernel = np.ones((3,3),np.uint8) 
img = cv2.erode(thresh,kernel,iterations = 1) 
show(img) 
ocr(img) 

輸入圖像和OCR結果在這裏。

enter image description here

+0

當然,爲什麼我不想更新 - 我一直在運行Tesseract 3.02。很好地升級到4.00固定號碼識別。謝謝! – cwgarner

+0

不客氣!如果你的問題是用我的答案解決的,請在左邊用'剔'標記答案。 – thewaywewere

+0

@cwgarner希望你已經解決了這個問題。 – thewaywewere