此文已由作者徐迪授權網易雲社區發布。
歡迎訪問網易雲社區,了解更多網易技術產品運營經驗。
講到驗證碼識別,大家第一個可能想到tesseract。誠然,對於OCR而言,tesseract確實很強大,自帶的字模能識別絕大多數規整的中英文。但是驗證碼畢竟不是OCR。對於現在簡單的驗證碼,其干擾都很難規整的去完,或者說去干擾也是苦差事。你很難講干擾去完后去做OCR,對於低成本的OCR識別更是這樣。對於固定的驗證碼,針對性的訓練庫反而更有效,因為對於單一的驗證碼,其生成規則相對簡單,用特定規格做字模識別率95%以上應該不難。
說到底還是需要一個簡單的識別器,訓練器。某次世紀識別系統是國內灰產碼農用的最多的吧。可惜收費的,今天要介紹的完美驗證碼識別系統是類似的免費產品。驗證碼識別系統其實就是兩部分組成,字模制作系統包括預處理的配置,和單字符字模制作以及生成字模打包文件,識別系統就是用字模打包結果去識別驗證碼,就是一個設置參數的函數,然后調用設別函數拿到結果。
軟件內容如下:

WmCode.dll是主要的識別庫,主程序負責字模生成,其中包括了眾多圖像學的算法,如下圖,簡要的介紹下常見的方法。

1.色彩通道噪點處理
在清除背景和保留前景的tab中有保留和去除指定顏色的操作(包括HSV RGB 色彩域),以及指定色彩的大小過濾。這些操作主要針對色彩較為有限的彩色小噪點,一般這種驗證碼噪聲還是比較多的。通過這2種方式的結合,基本可以去掉大部分的此類噪點。
2.濾波類
主要針對灰度圖處理,主要處理局部有灰度差異的噪聲。很多驗證碼在局部制造一些高對比度的噪聲,濾波操作對此類就有較好效果。另外的用途就是邊緣提取,方便后期對干擾線的處理。
3.二值化
后邊幾類如形態學處理類,黑白圖處理,干擾線處理,都是基於二值化后的圖像,所以后邊要先對圖像二值化。軟件把常見的閾值取值算法都放進去,具體算法這里就不講了。
4.形態學處理
圖像濾鏡tab下包括了主流的形態學算法,開閉操作,輪廓骨架等。主要處理小噪點,以及取輪廓后方便后期去干擾線。
5.干擾線處理
最后的tab中包含對干擾線的檢測去除檢查去除算法
通過多個處理算法完成預處理,點擊開始編輯圖像,進入下一步,選擇分割方式,識別方式和制作字模。

雖然有提供一些常見的分割方式,但對於大多遇到的非規則的驗證碼,分割效果確實不是很好,選擇手動分割就不要管左邊的配置了。識別模式首選整體識別,其他各種在實際識別中也不是很好。
下邊主講字模的制作。在工具區最左邊的按鈕,手動裁剪單個要處理的字,選擇后雙擊,界面就變成單個字符處理。

在信息區輸入要 訓練結果,就會添加字模。操作應該算很簡單。不斷的訓練,直到識別率到達滿意為止。返回上個界面,點擊識別庫,識別庫生成,填寫密碼(調用函數用),就會把庫生成在項目目錄下。識別的過程,其實在軟件下給了函數的簡單說明,以及各語言的樣例,以python為例,看下大概的過程:
#coding=gbk#第一行注釋不能省,指定編碼聲明以支持中文#本代碼文件在32位的python 3.4.3版測試通過import urllibimport timeimport stringimport ctypesfrom ctypes import *
dll = ctypes.windll.LoadLibrary('WmCode.dll')#如果dll不在當前目錄,那么需要指定全路徑if(dll.UseUnicodeString(1,1)): #這個函數用來向DLL說明傳入的文本使用unicode格式
print('SetInUnicode Success:')#UseUnicodeString調用一次即可,無需重復調用else:
print('etInUnicode Fail!')#注意縮進格式if(dll.LoadWmFromFile('D:\網易論壇.dat','163')):#使用絕對路徑
print('Loaddat Success:')#LoadWmFromFile調用一次即可,無需重復調用
Str = create_string_buffer(20)#創建文本緩沖區
if(dll.GetImageFromFile('D:\wylt.JPG',Str)):#使用絕對路徑
#如果驗證碼圖像不在當前目錄,那么需要指定全路徑
print('GetVcode Success:',Str.raw.decode("gbk")) #返回的文本自行處理口口口問題
else:
print('GetVcode Fail!')
else:
print('Loaddat Fail!')#注意縮進格式
所有的函數封裝在WmCode.dll中,導出的了幾個基本函數。第一個指定使用unicode,和語言互調用有關。LoadWmFromFile 函數加載庫文件,就是我們用主程序訓練的結果,第二個參數是導出時填寫的密碼,GetImageFromFile 方法直接對本地文件進行識別,第一個參數是圖片地址,第二個是輸出的結果。調用函數相當簡單的,對比tesseract復雜的參數,這個識別是相當的快捷。在力求快速生成識別代碼的情況下,用這個庫確實非常方便。
網易雲易盾提供新一代網站驗證碼,包括智能驗證碼、滑動驗證碼等形式,驗證碼接口穩定性 99.9%,感知威脅可智能切換驗證難度,告別繁瑣驗證,保護業務安全,點擊可免費試用。
網易雲免費體驗館,0成本體驗20+款雲產品!
更多網易技術、產品、運營經驗分享請點擊。
相關文章:
【推薦】 kubernetes大概的工作原理
