1. 程式人生 > >Python進行驗證碼識別

Python進行驗證碼識別

注:這一篇只是流程的介紹,由於當時自己也是各種嘗試,因此程式碼並不系統,註釋了一大堆東西還沒有整理,多以並沒有貼出詳細程式碼。

  最近因工作需要進行圖片中文字識別,因此便嘗試使用Python完成這個任務,常用的Python影象處理庫有Pillow、OpenCV、matplotlib。

  驗證碼識別一般有以下流程:灰度化——二值化——識別,中間可能還會用到直方圖均衡化、降噪等處理方式。

  常見影象多用RGB方式進行處理,也就是每一個畫素對應著R、G、B三個值。

  首先影象灰度化,也就是一個畫素中R、G、B三個值相等,一般有三種方法:

    (1)Gray(i,j)=[R(i,j)+G(i,j)+B(i,j)]/3;  //均值法

    (2)Gray(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.144*B(i,j);  //加權平均值法

    (3)Gray(i,j)=G(i,j);  //最大值法,從2可以看出G的分量比較大所以可以直接用它代替

  在Python中直接提供了影象灰度化的函式cv.cvtColor(image, cv.COLOR_RGB2GRAY),還有其他的函式可以檢視百度(若灰度化處理後圖像對比度不高也可以進行直方圖均衡化處理)。

  然後是影象二值化,如何選擇一個合理的mean值是很關鍵的,這一部分網上也有許多很成熟的演算法了,二值化以後的影象就是黑白圖了,如果原始影象不是肉眼都很難識別的話這個時候就可以明顯看出圖片中的文字資訊了,若是噪點比較多也可以採用降噪處理,在這一篇部落格中有詳細的程式碼(https://www.cnblogs.com/qqandfqr/p/7866650.html)。

  降噪以後就是識別了,需要的庫就是pytesseract,這個庫的安裝較為複雜,當時費了一番功夫才成功,網上有現成的exe檔案可以進行安裝,安裝以後需要進行環境的除錯,網上都有詳細的教程,需要耐心學習。

  另外在安裝各種庫的過程中也遇到各種問題,按照網上的各種千篇一律的教程不斷配置環境,最終下了一箇舊版的包就好了,因此大家如果實在找不到解決辦法就換個版本的庫試一試,很可能就成了^_^.

  不過這個工作最終失敗了,因為我需要識別的圖片本身質量不好,背景和文字顏色基本一致,但是這個方法在質量稍好的圖片上使用是成功了的。對於質量較差的最好還是訓練自己的文字型檔,也就是pytesseract中用到的。