關鍵字:Python,SVM,字符驗證碼,機器學習,驗證碼識別
1 概述
基於Python使用SVM識別簡單的驗證字符串的完整代碼開源分享。
因為目前有了更厲害的新技術來解決這類問題了,但是本文作為初級入門方法,還是具有一定的學習意義的,所以就將源碼和相關的素材開源出來。
本文雖然已經不具備太強的實戰性和遷移性,但是主要希望能夠是以一個有趣的應用點來讓對機器學習有興趣的同學找到入門點。
上面提到的 “更厲害的新技術” 是指 “CNN 卷積神經網絡”,這個工具基本上免去了本文介紹的繁雜的圖片預處理工作, 而且通用性更強,換一種驗證模式,基本上不需要修改任何代碼,就可以訓練出想要的模型。 但是這部分入門門檻會稍微高一些,后續有機會,會逐漸開一個專題來講此類高級方法。
總之,最后會有一個結論:傳統的字符驗證碼是完全沒有防御自動化的能力了。
輸入圖片:
輸出字符串:
6937
2 詳細原理
完整的識別的源碼項目:
https://github.com/zhengwh/captcha-svm
代碼有些丑,但是結合原理文檔,應該還算是比較清晰的。
關於原理文檔請參考博客:
《字符型圖片驗證碼識別完整過程及Python實現》
http://www.cnblogs.com/beer/p/5672678.htm
效果:可以對簡單的可分割的驗證碼達到99%以上的識別率。
3 代碼環境
- python 3.5
- libSVM 自己到官網下載安裝
- ubuntu 16.4或者mac-os下都能正常搭建和運行
- 其它的依賴關系沒有特別要求,缺啥就裝啥
4 數據解釋
- origin 原始數據集。
- bin_clear 二值化且去噪后的圖片集。
因為數據包比較大,就不放上來了
-
demo-6937 以6937為例子進行的圖像處理效果展示
-
cut_pic 把處理后的圖片切割成單位字符后,再進行分類標記的結果值
-
- svm_train 和svm訓練相關的文件
-
- train_pix_feature_xy.txt 用於做訓練的SVM特征文件
- last_test_pix_xy_8.txt 用於做簡單檢測的SVM特征文件(為了圖簡單,只包含數字8的特征)
- svm_model_file 訓練完成后保存的模型文件
5 代碼解釋
- lib 直接從libSVM官網下載的py庫文件,可以使用python調用相應的 .so文件
- cfg.py 一些全局配置文件
- img_tools.py 圖像素材的預處理工具和庫文件
- svm_features.py 將圖像進行特征化的相應工具
- svm_train.py 對特征文件進行訓練和測試,並保存模型
- predict.py 訓練完成后,將整個流程串起來的工具流
6 方案思路
整個學習的過程,主體數據處理部分是一個不斷的把信息降維處理的過程。
以圖片 6987 為例子:

7 后續交流
如果有對相關技術有持續關注的興趣的同學,歡迎加入QQ群: 592109504
或者手機QQ掃碼加入:
