這是一個(gè)圖片字符型驗(yàn)證碼識別平臺(tái);
本文主要:
一、簡單介紹圖片驗(yàn)證碼識別平臺(tái);
二、介紹訓(xùn)練模型(識別圖片驗(yàn)證碼) :詳細(xì)介紹從獲取驗(yàn)證碼原始數(shù)據(jù)、打標(biāo)簽、特殊處理到訓(xùn)練出模型的過程,解釋什么是訓(xùn)練;
三、平臺(tái)工作原理:介紹平臺(tái)對圖片(驗(yàn)證碼)的處理過程;
一、簡單介紹圖片驗(yàn)證碼識別平臺(tái):
(1)一個(gè)圖片驗(yàn)證碼識別平臺(tái),提供接口,接收base64編碼圖片,識別,返回結(jié)果;
(2)基于卷積神經(jīng)網(wǎng)絡(luò)( Convolutional Neural Network, CNN );
(3)Python語言編寫;
(4)基于Tensorflow框架;
(5)運(yùn)行于Gunicorn服務(wù)器;
(6)示意圖:
解釋:圖片驗(yàn)證碼經(jīng)base64編碼后,發(fā)送到驗(yàn)證碼識別平臺(tái)(PCP),平臺(tái)返回識別結(jié)果;
二、訓(xùn)練模型:
1、獲取原始數(shù)據(jù)
即是到目標(biāo)網(wǎng)站獲取足夠多需要識別的驗(yàn)證碼圖片,用于接下來的訓(xùn)練;
2、對圖片驗(yàn)證碼打標(biāo)簽(有監(jiān)督學(xué)習(xí))
對獲取到的大量原始驗(yàn)證碼圖片需要正確標(biāo)記:每個(gè)圖片驗(yàn)證碼對應(yīng)的正確字符;標(biāo)記完后還需要核對,確保正確,否則會(huì)非常影響訓(xùn)練的準(zhǔn)確性;
這一步最耗費(fèi)時(shí)間和精力;
目前打標(biāo)簽的過程:
(1)寫一段代碼,使用現(xiàn)有的OCR庫,對一部分圖片(如1000張)進(jìn)行初次識別;
(2)然后進(jìn)行人工修改、打標(biāo)簽;
(3)最后人工核對;得到了1000張正確打好標(biāo)簽的驗(yàn)證碼圖片;
(4)重復(fù)(1)~(3)步,如,得到了2000張正確打好標(biāo)簽的驗(yàn)證碼圖片;——當(dāng)然,可以一直如此重復(fù),直到得到所需要的圖片數(shù)量;
(5)另:把此2000張圖片進(jìn)行訓(xùn)練,如準(zhǔn)確率能有0.7以上,那么可用此訓(xùn)練的模型識別原始(未打標(biāo)簽)的圖片——即是替換(1),OCR的成功率非常低;
(6)得到所需要的打好標(biāo)簽的圖片數(shù)量,如1萬張;
3、進(jìn)行模型訓(xùn)練
把標(biāo)記好的圖片驗(yàn)證碼輸入寫好的AI程序中,進(jìn)行訓(xùn)練;
一般要求準(zhǔn)確率達(dá)到0.98;
對于訓(xùn)練來說,理想的情況是:輸入的數(shù)據(jù)越多(打好標(biāo)簽的圖片)、訓(xùn)練的次數(shù)越少,如此得到的模型越好,可以用下面的公式表達(dá):
acc = Ax + By
A、B: 權(quán)重;x: 圖片;y: 次數(shù);acc: 準(zhǔn)確率;
上面的1~3步,就是訓(xùn)練模型的一般過程;
存在問題:需要大量的打好標(biāo)簽的圖片,耗時(shí)費(fèi)力;
所以,一般采用針對不同的驗(yàn)證碼圖片進(jìn)行特殊處理的方法:切割大法;
切割法操作如下(大致思路,因?yàn)槊總€(gè)驗(yàn)證碼特征不同,處理方法會(huì)不同):
如有驗(yàn)證碼圖片:
同一種驗(yàn)證碼,模式都會(huì)是固定的,針對上面的驗(yàn)證碼可以這樣切割:
得到:
然后合成一張圖片:
最后,訓(xùn)練、識別都是針對:
其實(shí),就是將擁有特殊、多字符的驗(yàn)證碼圖片轉(zhuǎn)為簡單、少字符的圖片;
如此一來:
只需要訓(xùn)練識別0-9數(shù)字;
打標(biāo)簽數(shù)量大大減少,300張;
打標(biāo)簽難度也大大減少,僅需要輸入數(shù)字;
再如,此種驗(yàn)證碼:
直接切割4個(gè)單獨(dú)字符的圖片:
然后,訓(xùn)練、識別都是針對單個(gè)字符圖片進(jìn)行,難度也大大降低,準(zhǔn)確率大大提高;
打標(biāo)簽的數(shù)量也大大減少;
一些數(shù)據(jù):由于此圖片,底色有絕對的干擾,測試中發(fā)現(xiàn),直接訓(xùn)練的話,3000張圖片進(jìn)行訓(xùn)練,準(zhǔn)確率也只有區(qū)區(qū)0.1%;
利用切割方法,只用1000張圖片,切割得到4000張單獨(dú)字符的圖片,訓(xùn)練8100次,準(zhǔn)確率即可達(dá)到0.995;
簡單解釋一下什么是訓(xùn)練,這是一個(gè)數(shù)學(xué)問題:
先看基本的函數(shù),如:y = 2x + 1,輸入x=1,輸出y=3;這是已經(jīng)知道函數(shù)對應(yīng)關(guān)系f = 2x + 1;
再看高階一點(diǎn)的數(shù)學(xué),如:已知 y = 2x + 1,y = 3,求x;從輸出,反推輸入,同樣也是知道函數(shù)對應(yīng)關(guān)系f = 2x + 1;
再進(jìn)階一步,就接觸到機(jī)器學(xué)習(xí)了,函數(shù)對應(yīng)關(guān)系f ,我們不知道,但是知道了x、y的值(x就是驗(yàn)證碼圖片、y就是對應(yīng)的標(biāo)簽),求對應(yīng)關(guān)系f;
如果是簡單的,已知函數(shù)f的形式,如:y = ax + b;只要兩組(x, y)即可求得a、b;從而求得f;
如果是完全不知道函數(shù)的形式,那么就需要構(gòu)造函數(shù),f 可能是 2x + 1、3x + 3、x^2 + 1等等無數(shù)種情況;僅有兩組(x, y)是無法得出f的;但是如果有大量的(x, y),就能通過“逼近計(jì)算”方法,不斷調(diào)整公式權(quán)重,近似求得函數(shù)f —— 這就是訓(xùn)練過程;
三、平臺(tái)工作原理:
簡單介紹平臺(tái)對圖片(驗(yàn)證碼)的處理過程;
示意圖:
解釋:
圖片驗(yàn)證碼通過base64編碼后,通過提供的API發(fā)送到驗(yàn)證碼識別平臺(tái);
平臺(tái)獲取圖片的寬高,然后進(jìn)入判別器1:根據(jù)針對此驗(yàn)證碼配置的屬性,決定是否要切割圖片(若要切割,切割的尺寸是多大);
如果發(fā)現(xiàn)有兩種不同的驗(yàn)證碼尺寸一樣,那么需要進(jìn)入判別器2:根據(jù)圖片特征對圖片進(jìn)行分類;
經(jīng)過判別器1和判別器2,可以確定此圖片驗(yàn)證碼對應(yīng)的是哪個(gè)訓(xùn)練模型(用于最終的識別)、是否要切割、切割成多大;
最后,把圖片切割成預(yù)定的大小,選擇對應(yīng)的模型,進(jìn)行識別,返回結(jié)果;
以上就是利用AI識別驗(yàn)證碼的簡單介紹;
完畢;