摘要:圖片驗(yàn)證碼是目前最常用的一種。神經(jīng)網(wǎng)絡(luò)以上驗(yàn)證碼識別都依賴于字符切分,切分的好壞幾乎直接決定識別的準(zhǔn)確程度。目前驗(yàn)證碼識別最先進(jìn)的是谷歌在識別街景圖像中門牌號碼中使用的一套的算法。
全自動區(qū)分計(jì)算機(jī)和人類的圖靈測試(Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗稱驗(yàn)證碼,是一種區(qū)分用戶是計(jì)算機(jī)和人的公共全自動程序。驗(yàn)證碼的主要目的是強(qiáng)制人機(jī)交互來抵御機(jī)器自動化攻擊,為了確保服務(wù)器系統(tǒng)的穩(wěn)定和用戶信息的安全,越來越多的網(wǎng)站采用了驗(yàn)證碼技術(shù)。圖片驗(yàn)證碼是目前最常用的一種。
最近在一個爬蟲項(xiàng)目中遇到了驗(yàn)證碼,需要機(jī)器自動識別繞過。這些驗(yàn)證碼大都分辨率都較低,本身信息量不大。在網(wǎng)上調(diào)研了資料和文獻(xiàn)后,分別采用OCR識別和模板庫匹配方法對不同類型驗(yàn)證碼進(jìn)行了識別。主要過程可以分解為三個步驟:1.圖片清理,2.字符切分,3.字符識別。以下結(jié)合工作經(jīng)驗(yàn)和調(diào)研內(nèi)容講解一些常用的驗(yàn)證碼識別方法和過程。
1.圖片清理
圖片清理是為接下來的機(jī)器學(xué)習(xí)或模板匹配階段做準(zhǔn)備的,指通過灰度化、二值化、干擾點(diǎn)清理等過程,得到比較干凈的圖片數(shù)據(jù),具體樣例見下表。
1.1 彩色去噪
在計(jì)算機(jī)中使用最多的 RGB色彩空間,分別對應(yīng)紅、綠、藍(lán)三種顏色,通過調(diào)配三個分量的比例來組成各種顏色。以最常見的32位顏色為例,一個分量是用8位來表示,最大值是255,灰度圖是指組成顏色的三個分量相等。原始彩色圖片包含的信息量是最大的,如果驗(yàn)證碼圖片中有一些利用顏色反差加的干擾點(diǎn)或者線條,最好能在該階段做初步清理。比較簡單的一種處理方法是采用33矩陣對圖像進(jìn)行平滑處理,即對每個像素取他所在33矩陣所有點(diǎn)的RGB均值,分別作為新的RGB值。稍微做點(diǎn)優(yōu)化,取3*3矩陣中RGB三維歐式距離最接近均值的點(diǎn)作為新值。
1.2 灰度化
在彩色電視機(jī)系統(tǒng)中,通常使用一種叫 YUV 的色彩空間,其中Y表示亮度信號,對于人眼來說,亮度信號(Y)是最敏感的,如果將彩色圖像轉(zhuǎn)換為灰度圖像,僅僅需要轉(zhuǎn)換并保存亮度信號就可以。從RGB到Y(jié)UV空間的Y轉(zhuǎn)換有一個很著名的心理學(xué)公式:Y = 0.299R + 0.587G + 0.114B。
而實(shí)際應(yīng)用時,將系數(shù)縮放1000倍來實(shí)現(xiàn)整數(shù)運(yùn)算:Gray = (R299 + G587 + B114 + 500) / 1000 。注意后面那個除法是整數(shù)除法,所以需要加上500來實(shí)現(xiàn)四舍五入。該公式的另一個簡化變種也很流行:Gray = (R30 + G59 + B11 + 50) / 100。更快的算法是采用移位代替除法,所以可以將系數(shù)縮放成 2的整數(shù)冪,再做右移操作。該整數(shù)取7從精度和速度上最合適:Gray = (R0.2992^7 + G0.5872^7 + B0.1142^7)>>7 = (R38 + G75 + B*15)>>7
1.3 二值化
為了簡化接下來的計(jì)算,需要把灰度圖片轉(zhuǎn)化成黑白二值圖。默認(rèn)情況下值大于127的像素點(diǎn)被設(shè)置為白色,其余像素點(diǎn)設(shè)置為黑色。當(dāng)然,這個閾值也需要根據(jù)圖片的實(shí)際情況計(jì)算調(diào)整。一般采用直方圖統(tǒng)計(jì)確定動態(tài)閾值的方法比較靠譜,白底黑字的取直方圖靠左邊的波谷位置作為閾值,黑底白字則取直方圖右邊的波谷位置作為閾值,將背景和字符作很好的區(qū)分。
1.4 底色統(tǒng)一
如果是黑底白字的圖片,需要轉(zhuǎn)換成白底黑字,如以上圖B。
1.5 干擾點(diǎn)清理
在黑白二值圖片去噪階段,常用的去噪方法為聯(lián)通性去噪,通常采用8向聯(lián)通來計(jì)算連通點(diǎn)個數(shù),若某個點(diǎn)的連通點(diǎn)數(shù)目小于預(yù)設(shè)的閥值,則認(rèn)為這些點(diǎn)都是噪聲點(diǎn)。這一簡單粗暴的清理方法,通常情況下是非常有效的。
2 字符切分
該階段對前期預(yù)處理后的圖片進(jìn)行切割處理,定位和分離出整幅圖片中的每個孤立的字符主體部分。主要采用X軸和Y軸投影的方法,即統(tǒng)計(jì)對應(yīng)坐標(biāo)上黑色像素點(diǎn)的個數(shù)。對于圖片
得到的X軸和Y軸投影分別如下。利用X軸投影可以切割出多帶帶的字符,再分別利用Y軸投影,裁剪掉頂部和底部的空白部分。
OCR軟件識別
我們使用的是開源的OCR識別引擎Tesseract,初期由HP實(shí)驗(yàn)室研發(fā),后來貢獻(xiàn)給了開源軟件業(yè),后經(jīng)由Google進(jìn)行優(yōu)化并重新發(fā)布。調(diào)用代碼以及識別效果如下:
api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_TESSERACT_ONLY) #初始化
api.SetPageSegMode(tesseract.PSM_SINGLE_LINE) #設(shè)置為單行字符串模式
api.SetVariable("tessedit_char_whitelist", whitelist) #設(shè)置白名單
stringOCR = tesseract.ProcessPagesBuffer(mBuffer, len(mBuffer), api)
該方法的優(yōu)點(diǎn)是:開發(fā)量少;比較通用,適合于各種變形較少的驗(yàn)證碼;對于扭曲不嚴(yán)重的字母和數(shù)字識別率高。缺點(diǎn)也很明顯:對于扭曲的字母和數(shù)字識別率大大降低;對于字符間有粘連的驗(yàn)證碼幾乎難以正確識別;很難針對特定網(wǎng)站的驗(yàn)證碼做定制開發(fā)。
4.模板庫匹配
4.1 建立字符模板庫
首先需要針對目標(biāo)網(wǎng)站收集大量的驗(yàn)證碼;然后根據(jù)上一章節(jié)的方法,進(jìn)行圖片清理;最后按照固定的長寬值切分出字符模板圖,保存文件名帶上對應(yīng)字符的標(biāo)記。
4.2 字符匹配
首先,把目標(biāo)驗(yàn)證碼圖片按字符個數(shù)切分,這里的圖片切分方法必須與模板制作時的切分方法一致,得到與模板圖同樣大小的字符圖。接下來通常的做法是使用漢明距離或編輯距離定義相似度,并用KNN方法得到K個最相似的字符,最后從K個字符中選取出現(xiàn)次數(shù)最多的那個作為匹配結(jié)果。參考了文獻(xiàn)[1]中K取值和字符識別率的變化關(guān)系(如下圖)。
然后,我們把K取值為5。并且把相似度重新定義為:matchScore = dotMatch^2 / (dotCaptcha * dotTemplate),其中dotMatch為驗(yàn)證碼字符圖與模板圖對應(yīng)位置都是黑色點(diǎn)的個數(shù),dotCaptcha為驗(yàn)證碼字符圖中黑色點(diǎn)個數(shù),而dotTemplate為模板圖中黑色點(diǎn)個數(shù)。取這個分母是為了防止某些黑色點(diǎn)較多的模板圖在匹配度計(jì)算中始終得到較大值。識別效果如下表:
該方法的優(yōu)點(diǎn)是:原理簡單直觀;可以針對不同網(wǎng)站定制優(yōu)化;對于扭曲的字母和數(shù)字識別率較高。缺點(diǎn)是:開發(fā)量大,需要定制開發(fā);需要收集大量的字符圖片庫;字符變化很多的情況,匹配次數(shù)增加速度下降;對于字符有粘連的圖片識別率低;
支持向量機(jī)
支持向量機(jī)通俗來講是一種二類分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器,其學(xué)習(xí)策略便是間隔最大化,最終可轉(zhuǎn)化為一個凸二次規(guī)劃問題的求解。實(shí)際應(yīng)用上,往往遇到的是非線性可分得情況,因此通過核函數(shù)把低維向量映射到更高維空間,使得樣本滿足線性可分。
驗(yàn)證碼識別問題實(shí)際上是其中單個字符識別問題,而在字符可窮舉的情況下,比如只有英文字符和數(shù)字,單個字符識別問題其實(shí)是一個分類問題。一個英文字母或數(shù)字表示一類,而驗(yàn)證碼中切分后得到的單個字符需要被機(jī)器自動分到某一類。一般情況下,把單個字符的灰度圖片轉(zhuǎn)成整形數(shù)組,數(shù)組的每一個元素表示圖片的一個像素,即一個特征維度。我們切分得到的圖片大小為10x16=160像素,即有160個特征,當(dāng)特征數(shù)量多且特征之間關(guān)系不明確時,采用支持向量機(jī)分類比較合適。
神經(jīng)網(wǎng)絡(luò)
以上驗(yàn)證碼識別都依賴于字符切分,切分的好壞幾乎直接決定識別的準(zhǔn)確程度。而對于有字符粘連的圖片,往往識別率就會低很多。目前驗(yàn)證碼識別最先進(jìn)的是谷歌在識別“街景”圖像中門牌號碼中使用的一套的算法。該算法將定位、分割和識別等幾個步驟統(tǒng)一起來,采用一種“深度卷積神經(jīng)網(wǎng)絡(luò)”(deep convolutional neural network)方法進(jìn)行識別,準(zhǔn)確率可以達(dá)到99%以上。谷歌拿自有的reCAPTCHA驗(yàn)證碼做了測試,結(jié)果發(fā)現(xiàn),對于難度最大的reCAPTCHA驗(yàn)證碼,新算法的準(zhǔn)確率都達(dá)到 99.8%,這可能也好于大多數(shù)人為驗(yàn)證。
驗(yàn)證碼作為一種輔助安全手段在Web安全中有著特殊的地位,了解驗(yàn)證碼識別的方法和原理,不僅有利于繞過驗(yàn)證碼抓取網(wǎng)站內(nèi)容,而且有利于設(shè)計(jì)更安全合理的驗(yàn)證碼。
網(wǎng)易云安全(易盾)行為式驗(yàn)證碼超10億次完美驗(yàn)證,堅(jiān)固守衛(wèi)網(wǎng)站安全第一道防線。網(wǎng)易云易盾提供新一代網(wǎng)站驗(yàn)證碼,包括智能驗(yàn)證碼、滑動驗(yàn)證碼等形式,驗(yàn)證碼接口穩(wěn)定性 99.9%,感知威脅可智能切換驗(yàn)證難度,告別繁瑣驗(yàn)證,保護(hù)業(yè)務(wù)安全,點(diǎn)擊可免費(fèi)試用。
文章來源: 網(wǎng)易云社區(qū)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/25404.html
摘要:驗(yàn)證碼的識別成功率跟圖片質(zhì)量關(guān)系密切,一般拿到后的驗(yàn)證碼都得經(jīng)過灰度化,二值化,去噪,利用就可以很方便的做到。 了解驗(yàn)證碼 什么是驗(yàn)證碼? 所謂驗(yàn)證碼,就是將一串隨機(jī)產(chǎn)生的數(shù)字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗(yàn)證碼信息,輸入表單提交網(wǎng)站驗(yàn)證,驗(yàn)證成功后才能使用某項(xiàng)功能,通俗說就是一種區(qū)分用戶是計(jì)算機(jī)和人的公共全自動程序 驗(yàn)證碼的作用 可以...
摘要:在上一篇博客圖像處理之圖片文字識別中我們介紹了在中如何利用軟件來識別圖片中的英文與中文,本文將具體介紹如何在中利用軟件來識別驗(yàn)證碼數(shù)字加字母。 ??在上一篇博客Python圖像處理之圖片文字識別(OCR)中我們介紹了在Python中如何利用Tesseract軟件來識別圖片中的英文與中文,本文將具體介紹如何在Python中利用Tesseract軟件來識別驗(yàn)證碼(數(shù)字加字母)。??我們在網(wǎng)...
摘要:下面我們便來講種驗(yàn)證碼的識別方式和一些思路。哈哈庫其實(shí),驗(yàn)證碼識別歸根到底還是對各種各樣圖片的識別和操作,中有很對圖像處理的庫,其中就是其中之一。所以在處理驗(yàn)證碼識別之前,必須先了解庫和。第五步,按照規(guī)定軌跡進(jìn)行拖動,完成驗(yàn)證。 寫在前面 現(xiàn)在,很多網(wǎng)站采取各種各樣的措施來反爬蟲,其中之一就是使用驗(yàn)證碼。當(dāng)我們訪問網(wǎng)頁時,必須先通過驗(yàn)證碼才能夠訪問頁面。下面我們便來講2種驗(yàn)證碼的識別方...
摘要:下面我們便來講種驗(yàn)證碼的識別方式和一些思路。哈哈庫其實(shí),驗(yàn)證碼識別歸根到底還是對各種各樣圖片的識別和操作,中有很對圖像處理的庫,其中就是其中之一。所以在處理驗(yàn)證碼識別之前,必須先了解庫和。第五步,按照規(guī)定軌跡進(jìn)行拖動,完成驗(yàn)證。 寫在前面 現(xiàn)在,很多網(wǎng)站采取各種各樣的措施來反爬蟲,其中之一就是使用驗(yàn)證碼。當(dāng)我們訪問網(wǎng)頁時,必須先通過驗(yàn)證碼才能夠訪問頁面。下面我們便來講2種驗(yàn)證碼的識別方...
摘要:下面我們便來講種驗(yàn)證碼的識別方式和一些思路。哈哈庫其實(shí),驗(yàn)證碼識別歸根到底還是對各種各樣圖片的識別和操作,中有很對圖像處理的庫,其中就是其中之一。所以在處理驗(yàn)證碼識別之前,必須先了解庫和。第五步,按照規(guī)定軌跡進(jìn)行拖動,完成驗(yàn)證。 寫在前面 現(xiàn)在,很多網(wǎng)站采取各種各樣的措施來反爬蟲,其中之一就是使用驗(yàn)證碼。當(dāng)我們訪問網(wǎng)頁時,必須先通過驗(yàn)證碼才能夠訪問頁面。下面我們便來講2種驗(yàn)證碼的識別方...
閱讀 2224·2021-09-30 09:47
閱讀 983·2021-08-27 13:01
閱讀 2970·2019-08-30 15:54
閱讀 3695·2019-08-30 15:53
閱讀 834·2019-08-29 14:07
閱讀 724·2019-08-28 18:16
閱讀 810·2019-08-26 18:37
閱讀 1418·2019-08-26 13:27