基于CNN的可實(shí)際應(yīng)用的圖片驗(yàn)證碼識別平臺(tái)介紹

這是一個(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)證碼的簡單介紹;

完畢;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容