您的位置:首頁>正文

有了Python+Tensorflow!所有驗證碼識別都能快人一步!快速識別

驗證碼分析和處理

網上搜索驗證碼識別能夠得到很多教程, 但大部分都是將驗證碼切割成單個字元訓練, 有時候 驗證碼字元大小不一或者發生重疊,

切割驗證碼變得不適用。 因此通過CNN技術將整塊驗證碼進行識別, 能使問題變得更加簡單(以下操作對其他驗證碼分析有參考作用)。 小編推薦大家加一下這個群:103456743這個群裡好幾千人了!大家遇到啥問題都會在裡面交流!而且免費分享零基礎入門料資料web開發 爬蟲資料一整套!是個非常好的學習交流地方!也有程式師大神給大家熱心解答各種問題!很快滿員了。 欲進從速哦!各種PDF等你來下載!全部都是免費的哦!只為幫助大家快速入門, 所以小編在群裡等你們過來一起交流學習呢!

在這裡我們選擇模擬學習這樣的驗證碼:

該驗證碼來源於這裡(正如sci-hub網站所言"to remove all barriers in the way of science", 知識就該如此)。

該驗證碼只由六位元小寫字母、噪點和干擾線組成,

如果能去除噪點和干擾線, 能夠大大降低學習的難度。 很多驗證碼的噪點和干擾線RGB值和字母的不一致, 這個我們能通過Photoshop來分析, 使用顏色取樣器工具, 分別在圖片噪點、干擾線、空白處和字母處點擊獲得RGB值, 如下圖:

分析後發現, 只要將圖片二值化只保留字母, 就能得到不錯的輸入圖片:

實現代碼如下:

然後點擊+按鈕, 輸入tensorflow, install package。

接下來定義一個函數,

隨機從訓練集(3430張)中提取驗證碼圖片, 由於驗證碼經過我手動打標籤(碼了6小時), 在這裡只要獲取驗證碼的名字和圖片就夠了, 我默認放在"F:/captcha4/"目錄下, 需要注意的是返回的圖片是以矩陣的形式。

接下來定義兩個函數, 將名字轉變成向量, 將向量轉變成名字。

生成一個訓練batch,也就是採樣的大小,默認一次採集64張驗證碼作為一次訓練,需要注意通過get_name_and_image()函數獲得的image是一個含布林值的矩陣,在這裡通過1*(image.flatten())函數轉變成隻含0和1的1行114*450列的矩陣。

接下來定義卷積神經網路結構,我們採用3個卷積層加1個全連接層的結構,在每個卷積層中都選用2*2的最大池化層和dropout層,卷積核尺寸選擇5*5。需要注意的是在全連接層中,我們的圖片114*450已經經過了3層池化層,也就是長寬都壓縮了8倍,得到15*57大小。

訓練完成後,你應該會得到如下幾個檔。在這裡我花了將近9個小時跑了1800步,達到99.5%的準確率。輸出檔的詳細介紹參考這裡。

預測結果如下:

希望大家以後在tensorflow的學習道路中少點阻礙!!!

如有侵權請聯繫小編刪除!

生成一個訓練batch,也就是採樣的大小,默認一次採集64張驗證碼作為一次訓練,需要注意通過get_name_and_image()函數獲得的image是一個含布林值的矩陣,在這裡通過1*(image.flatten())函數轉變成隻含0和1的1行114*450列的矩陣。

接下來定義卷積神經網路結構,我們採用3個卷積層加1個全連接層的結構,在每個卷積層中都選用2*2的最大池化層和dropout層,卷積核尺寸選擇5*5。需要注意的是在全連接層中,我們的圖片114*450已經經過了3層池化層,也就是長寬都壓縮了8倍,得到15*57大小。

訓練完成後,你應該會得到如下幾個檔。在這裡我花了將近9個小時跑了1800步,達到99.5%的準確率。輸出檔的詳細介紹參考這裡。

預測結果如下:

希望大家以後在tensorflow的學習道路中少點阻礙!!!

如有侵權請聯繫小編刪除!

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示