天天看點

基于深度學習OpenCV與python進行字元識别

當我們在處理圖像資料集時,總是會想有沒有什麼辦法以簡單的文本格式檢索圖像中的這些字元呢?今天我們就一起看看有沒有什麼簡單的辦法可以實作這一功能~對于字元識别,我們找到了一些線上工具可以使用,他們将擷取使用者的輸入并提供輸出資訊。

字元識别:

字元識别程式有助于準确的從文本中識别出每個文本元素。

通過應用深度學習算法,可以準确的識别圖像中字元或文本元素的并對其進行分類。這些字元一般有很大差別。

當我們使用普通技術來識别字元時,可能會在特定點上出現一些錯誤。如果我們使用基于深度學習的OpenCV算法将給出有效的輸出。

對于運作模型的必須安裝由Google作為光學字元識别引擎開發的tesseract。

pip install pytesseract

OpenCV:

OpenCV是一種一項基本技術,我們主要利用他來消除的噪聲以便進一步執行資料操作。

Open CV是深度學習技術領域中使用最廣泛的算法。

它極大地依賴于受過訓練的資料,并有助于識别圖像中存在的文本。開放式履歷使算法丢失的準确性變成一幅圖畫。灰階等級在字元識别領域提供了有效的分類。是以,我們特此導入所有必要的軟體包,以使我們的模型可以正常使用。

為了在您的本地計算機上安裝OpenCV,請使用以下指令...

pip install opencv-python

圖像可以直接讀取到代碼中嗎?

• 讓我們讨論影響識别字元的因素:

• 圖像中的噪聲會導緻許多錯誤識别字元的因素。為了確定無噪音,我們在代碼中消除了識别。

• 當圖像不是高分辨率時,識别将失敗。是以,為了獲得準确的結果,最好拍攝高分辨率的圖像。

• 有時圖像的角度也會出現缺陷。

• 在假定文本時,圖像的反射會導緻錯誤。如此多的字母“ F”被識别為“ P”。

• 如果代碼無法訓練字型,字型也會改變結果。

• 各種圖像具有本領域的各種表示風格,是以,當存在更多膚色或多種顔色時,會對圖像中的識别文本做出不正确的假設。

考慮到以上所有因素,必須在所有測試用例通過的地方相應地建構代碼。

使用OpenCV識别字元的Python代碼:

導入所有軟體包:

#import all the packagesimport cv2import numpy as npimport pytesseractfrom PIL import Image      

使用軟體包安裝後,将其導入代碼。聲明或初始化路徑:tesseract是一種開源工具,可以從網上下載下傳。下載下傳後,請提及其路徑,如下所示。

# path of pytesseract execution folder pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files\Tesseract-OCR\tesseract.exe'# Path of imagemain_path = r'qu12.png'      

主要方法:在這部分代碼中,我們正在實作• 讀取圖像• 灰階圖像• 進行膨脹和腐蝕以消除圖像中不需要的噪聲。• 去除噪點後寫圖像。• 應用門檻值以擷取唯一的黑白圖檔。• 寫入相同的圖像以進行進一步的識别過程。• 使用Tesseract進行字元識别。

def get_string(pic_path):   # Reading picture with opencv   pic = cv2.imread(pic_path)# grey-scale the picture   pic = cv2.cvtColor(pic, cv2.COLOR_BGR2GRAY)# Do dilation and erosion to eliminate unwanted noises   kernel = np.ones((1, 1), np.uint8)   pic = cv2.dilate(pic, kernel, iterations=20)   pic = cv2.erode(pic, kernel, iterations=20)# Write image after removed noise   cv2.imwrite(main_path + "no_noise.png", pic)#  threshold applying to get only black and white picture    pic = cv2.adaptiveThreshold(pic, 300, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)# Write the image for later recognition process    cv2.imwrite(main_path + "threshold.png", pic)# Character recognition with tesseract   final = pytesseract.image_to_string(Image.open(main_path + "threshold.png"))return final      

顯示最終輸出:

print(get_string(src_path))

輸入和輸出:

在這裡,我們給出輸入到代碼中的輸入和輸出,以便稍後執行代碼。

輸入:

基于深度學習OpenCV與python進行字元識别

從網際網路上擷取樣本識别

輸出:

基于深度學習OpenCV與python進行字元識别

執行代碼後的螢幕截圖

代碼連結:https : //github.com/eazyciphers/deep-learning-tutors

參考文獻:

https://www.researchgate.net/profile/Andrew_Agbemenu/publication/325223548_An_Automatic_Number_Plate_Recognition_System_using_OpenCV_and_Tesseract_OCR_Engine/links/5c87e7ea299bf14e7e781750/An-Automatic-Number-Plate-Recognition-System-using-OpenCV-and-Tesseract-OCR-Engine.pdf

繼續閱讀