1. 程式人生 > >python 包的使用 (二)——tesseract識別圖片中的文字

python 包的使用 (二)——tesseract識別圖片中的文字

安裝過程

pytesser 呼叫了 tesseract,因此需要安裝 tesseract,安裝 tesseract 需要安裝 leptonica,否則編譯tesseract 的時候出現 "configure: error: leptonica not found"。

  1. sudo apt-get install tesseract-ocr</span>  

之後利用pip安裝pytesseract的包
  1. sudo pip install pytesseract  

就可以使用了.

原理:

驗證碼影象處理

驗證碼影象識別技術主要是操作圖片內的畫素點,通過對圖片的畫素點進行一系列的操作,最後輸出驗證碼影象內的每個字元的文字矩陣。

1、讀取圖片
2、圖片降噪
3、圖片切割
4、影象文字輸出


(2)驗證字元識別

驗證碼內的字元識別主要以機器學習的分類演算法來完成,目前我所利用的字元識別的演算法為KNN(K鄰近演算法)和SVM (支援向量機演算法),後面我 會對這兩個演算法的適用場景進行詳細描述。

1、獲取字元矩陣
2、矩陣進入分類演算法
3、輸出結果

要驗證的圖片如下:

  1. import pytesseract  
  2. import Image  
  3. image = Image.open('1.jpg')   
  4. print pytesseract.image_to_string(image)   

結果如下

  1. Python 2.7.9 (default, Apr  2201515:33:21)   
  2. [GCC 4.9
    .2] on linux2  
  3. Type "copyright""credits"or"license()"for more information.  
  4. ==== No Subprocess ====  
  5. >>>   
  6. 1201
  7. >>>   

也可以使用複雜一點的,上面的只能對一些比較簡單的做處理

原理:彩色轉灰度,灰度轉二值,二值影象識別

  1. # 驗證碼識別,此程式只能識別資料驗證碼
  2. import Image    
  3. import ImageEnhance    
  4. import ImageFilter    
  5. import sys    
  6. from pytesseract import
     *  
  7. # 二值化  
  8. threshold = 140
  9. table = []    
  10. for i in range(256):    
  11.     if i < threshold:    
  12.         table.append(0)    
  13.     else:    
  14.         table.append(1)    
  15. #由於都是數字  
  16. #對於識別成字母的 採用該表進行修正  
  17. rep={'O':'0',    
  18.     'I':'1','L':'1',    
  19.     'Z':'2',    
  20.     'S':'8'
  21.     };    
  22. def  getverify1(name):          
  23.     #開啟圖片  
  24.     im = Image.open(name)    
  25.     #轉化到灰度圖
  26.     imgry = im.convert('L')  
  27.     #儲存影象
  28.     imgry.save('g'+name)    
  29.     #二值化,採用閾值分割法,threshold為分割點 
  30.     out = imgry.point(table,'1')    
  31.     out.save('b'+name)    
  32.     #識別  
  33.     text = image_to_string(out)    
  34.     #識別對嗎  
  35.     text = text.strip()    
  36.     text = text.upper();      
  37.     for r in rep:    
  38.         text = text.replace(r,rep[r])     
  39.     #out.save(text+'.jpg')  
  40.     print text    
  41.     return text    
  42. getverify1('1.jpg')  #注意這裡的圖片要和此檔案在同一個目錄,要不就傳絕對路徑也行