摘要:目前花費了兩分鐘。我這地方使用卷積神經網絡,。這地方對卷積神經網絡算法就不做詳細介紹,感興趣的同學,可以學習一下。
概述
??很多開發者都討厭網站的驗證碼,特別是寫網絡爬蟲的程序員,而網站之所以設置驗證碼,是為了防止機器人訪問網站,造成不必要的損失。現在好了,隨著機器學習技術的發展,機器識別驗證碼的問題比較好解決了。
樣本采集工具??這里我們采用wordpress的Really Simple CAPTCHA生成驗證碼的插件,之所以選擇這個插件,一個是它的安裝量很大,二個是因為它是開源的,我們可以利用它批量的生成驗證碼圖片。
目標估計??我們通過demo網站得知,Really Simple CAPTCHA生成的是包含4個數字或者字母的圖片,通過閱讀源碼得知,這個插件還屏蔽了O和I這兩個比較容易混淆的字母,也就是說,還剩下32個字符,看來可以完成。
??目前花費了兩分鐘。
??我們要用到以下的工具和庫。
python3
opencv
keras
tensorflow
創建樣本集??為了達到目的,我們首先要準備樣本集,樣本如下:
使用Really Simple CAPTCHA插件的源碼,我們很方便的批量生成10000個驗證碼圖片和對應的結果,待我們生成完成后,大概如下:
這地方大家可以根據自己的實際情況修改Really Simple CAPTCHA插件的源碼,來生成自己想要的樣本集。如果你覺著麻煩,也可以下載我生成好的。
??目前為止,我們花了五分鐘。
如何訓練??我們現在有了樣本集了,我們可以直接那圖片和對應的結果直接進行神經網絡的訓練。
只要我們的樣本夠多,最終也能達到我們想要的效果。
??但我們也可以采用更好的訓練方法,這個訓練方法使用更少的樣本數據,但是結果要比直接訓練的方法好很多,我想你已經猜到了,這個方法就是把圖片中的四個字符切割開,形成四個樣本。這方法之所以可行,是因為所有的驗證碼圖片都是4個字符的。
??10000張圖片,一張一張手動用PS去切割,肯定不現實,而且由于圖片的橫向排列并不是等間距的,字符間的距離大小不一致,手動切割肯定不可能了。
??其實我們只要畫出一個矩形,保證矩形框里只有字符就可以,然后從圖片中切出這樣的一個矩形,就形成了一個單個字符的圖片樣本。幸運的是,這個操作opencv已經幫我們實現了,opencv有個函數叫做findContours(),可以按照同樣色值的區域裁剪我們想要的矩形。
首先準備一個圖片:
轉換圖片為黑白色。這樣有字符的地方為黑色,空白為白色,便于opencv裁剪。
-接下來我們用opencv的findContours函數切割圖片。
??接下來,我們就把圖片從左到右進行切割,并存儲切割后的圖片,以及圖片對應的字符。但是實際操作的過程中,我發現一個問題,就是有時候兩個字符靠的太近,導致opencv在切割的時候,把兩個字符切割刀一個圖片里了,比如:
切割完的效果是:
如果不解決這個問題,我們的樣本集就不準了,那訓練出來的模型也就不可能正確了。我的解決方法是,首先設置一個字符寬最大的像素,如果超過這個像素,則認為一個圖片中包含了兩個字符,然后我們選擇把這個圖片對半切割,分成兩個字符。例如:
好,我們現在得到了一個驗證碼圖片對應的4個字符的圖片,現在我們把所有的樣本圖片都切割好,然后,把相同的字符對應的圖片放到一個文件夾,這么做的目的是盡量多的找出同一個字符的多種樣式。結果如下:
??到目前為止,我花了10分鐘。
??因為我們只是識別圖片對應的數字或者字母,所以我們不需要特別復雜的神經網絡算法。識別字符比識別小貓小狗的簡單多了。
??我這地方使用卷積神經網絡,two convolutional layers and two fully-connected layers。
這地方對卷積神經網絡算法就不做詳細介紹,感興趣的同學,可以google學習一下。
??訓練完成后,我們需要測試一下。15分鐘花完。
整個過程看起來很簡單:
從使用我們上述提到的插件的wordpress網站上下載驗證碼圖片
把圖片切割成包含單個字符的小圖片
使用神經網絡算法訓練模型
預測新的驗證碼圖片對應的字符
下面是我的測試:
你可以從這得到完整的代碼和示例圖片,你可以參照README來運行相關的程序。
轉載自我的博客捕蛇者說英文原文
下載代碼
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41090.html
摘要:前端防暴力破解的一個設計地址描述傳統的防范暴力破解的方法是在前端登錄頁面增加驗證碼雖然能有一定程度效果但是用戶也跟著遭罪驗證碼越復雜用戶登錄的失敗率越高于是最近我想了一個新的設計前端在登錄時采用解密的方式獲取密鑰把密鑰與表單以前發往后端用 前端防暴力破解的一個設計 Demo 地址 https://github.com/GitHub-Laz... 描述 傳統的防范暴力破解的方法是在前端登...
摘要:前端防暴力破解的一個設計地址描述傳統的防范暴力破解的方法是在前端登錄頁面增加驗證碼雖然能有一定程度效果但是用戶也跟著遭罪驗證碼越復雜用戶登錄的失敗率越高于是最近我想了一個新的設計前端在登錄時采用解密的方式獲取密鑰把密鑰與表單以前發往后端用 前端防暴力破解的一個設計 Demo 地址 https://github.com/GitHub-Laz... 描述 傳統的防范暴力破解的方法是在前端登...
閱讀 2973·2023-04-26 02:29
閱讀 585·2019-08-30 15:54
閱讀 1658·2019-08-29 13:13
閱讀 601·2019-08-28 17:51
閱讀 2722·2019-08-26 13:58
閱讀 1532·2019-08-26 13:27
閱讀 2820·2019-08-26 11:39
閱讀 3445·2019-08-26 10:46