驗(yàn)證碼識(shí)別相關(guān)
字符類驗(yàn)證碼識(shí)別主要過程
- 去噪
- 二值化
- 切分
- 歸一化
- 特征提取
- 訓(xùn)練模型
- 再優(yōu)化
字符類驗(yàn)證碼基本流程大致就是以上幾步,只是針對(duì)不同的驗(yàn)證碼會(huì)選擇不同的算法。
此外需要注意驗(yàn)證碼識(shí)別流程絕不是固定的,針對(duì)不同特征的驗(yàn)證碼選擇不同的流程才是最好的做法。
去噪
去噪可以說是驗(yàn)證碼識(shí)別中最重要的一環(huán),一旦去噪沒做好,最終結(jié)果一定是慘不忍睹,相反,若是去噪做好了,整個(gè)驗(yàn)證碼識(shí)別將水到渠成。
常見去噪方法:
- 灰度去噪,即根據(jù)噪音與有效信息像素灰度的不同進(jìn)行去噪,主要針對(duì)背景色RGB較大時(shí)(即顏色接近白色)使用。
- 骨架侵蝕去噪,主要針對(duì)細(xì)點(diǎn)、細(xì)線等噪聲去噪,當(dāng)一個(gè)點(diǎn)與周圍8個(gè)點(diǎn)中若干個(gè)點(diǎn)的RGB值相差較大時(shí),認(rèn)為該點(diǎn)為噪點(diǎn),進(jìn)行去噪。需注意此方法會(huì)對(duì)原有有效信息造成破壞,所以需要謹(jǐn)慎使用。
- RGB去噪,主要針對(duì)驗(yàn)證碼中單個(gè)字符顏色極為接近情況下進(jìn)行去噪,令RGB值差在1~5以內(nèi)的像素構(gòu)成一幅圖像,有效的字符往往有效信息較多,取有效信息最多的若干幅圖片,認(rèn)為是去噪后的字符。此算法同時(shí)完成了去噪、二值化、切分。
- 視差去噪,模擬人識(shí)別物體的一種算法,即對(duì)每一個(gè)像素與它周圍的8個(gè)像素做RGB對(duì)比,差別約大則顏色越深,這種算法可以用來識(shí)別類似騰訊開放平臺(tái)的驗(yàn)證碼。
- 特定問題特定分析,基本上每個(gè)網(wǎng)站都有一套自己的驗(yàn)證碼生產(chǎn)算法,所以遇到復(fù)雜驗(yàn)證碼時(shí)我們必須進(jìn)行針對(duì)性的分析,找到驗(yàn)證碼的弱點(diǎn),不斷挖掘,完成破解。
二值化
二值化算法較為有限,基本為灰度二值化與RGB二值化,都是利用顏色的RGB信息進(jìn)行分類完成黑白兩色的轉(zhuǎn)化。
切分
針對(duì)無粘連字符的切分較為簡單,下面主要談?wù)勧槍?duì)有粘連字符的切分算法。
y軸側(cè)視算法:在y軸上觀察x軸所有黑色像素點(diǎn)之和,找出若干個(gè)大于limit的不連續(xù)點(diǎn),即可認(rèn)為是切分點(diǎn)。
歸一化
歸一化,即將旋轉(zhuǎn)字符逆旋轉(zhuǎn)化,需要注意的是我們并不需要將字符“擺正”,而是讓所有相同字符“正”的角度相同,有以下幾種算法:
- 寬度最小算法:主要針對(duì)數(shù)字和字母字符,認(rèn)為該類字符在擺正的情況下寬度最小,由此完成逆旋轉(zhuǎn)歸一。
-
橫豎側(cè)凸算法:我根據(jù)漢字“橫平豎直”的特點(diǎn)而發(fā)明的一種算法,即認(rèn)為漢字在擺正的情況下橫是平的,豎是直的,所以在x軸和y軸側(cè)視時(shí),若有橫或豎,則該列像素中為黑色的數(shù)量很大,而上下兩列黑色像素的數(shù)量較少,如3-15-4,由此讓所有行的黑色像素?cái)?shù)減去上一行的黑色像素?cái)?shù),取絕對(duì)值然后求和,突變最大的即為最“正”的漢字。由此完成逆旋轉(zhuǎn)歸一化。此算法對(duì)撇捺較多的漢字識(shí)別效果不好,但可以通過增加特征值的方式彌補(bǔ)。
完成逆旋轉(zhuǎn)化后,我們一般會(huì)將字符放大或縮小到同一size,方便后續(xù)的特征提取等操作。
特征提取&訓(xùn)練模型
最簡單的方法是對(duì)圖片取01字符串或二維數(shù)組,編輯距離越小則認(rèn)為其越接近。
也可以通過深度學(xué)習(xí)等算法完成訓(xùn)練。
一般只需要對(duì)每個(gè)字符可能的結(jié)果做1~3次手動(dòng)分類后,讓模型自己進(jìn)行100次左右分類,找出分類錯(cuò)誤的項(xiàng),針對(duì)優(yōu)化或加入訓(xùn)練集。