国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何識別圖片驗證碼?

y1chuan / 631人閱讀

摘要:圖片驗證碼是目前最常用的一種。神經網絡以上驗證碼識別都依賴于字符切分,切分的好壞幾乎直接決定識別的準確程度。目前驗證碼識別最先進的是谷歌在識別街景圖像中門牌號碼中使用的一套的算法。

全自動區分計算機和人類的圖靈測試(Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗稱驗證碼,是一種區分用戶是計算機和人的公共全自動程序。驗證碼的主要目的是強制人機交互來抵御機器自動化攻擊,為了確保服務器系統的穩定和用戶信息的安全,越來越多的網站采用了驗證碼技術。圖片驗證碼是目前最常用的一種。

最近在一個爬蟲項目中遇到了驗證碼,需要機器自動識別繞過。這些驗證碼大都分辨率都較低,本身信息量不大。在網上調研了資料和文獻后,分別采用OCR識別和模板庫匹配方法對不同類型驗證碼進行了識別。主要過程可以分解為三個步驟:1.圖片清理,2.字符切分,3.字符識別。以下結合工作經驗和調研內容講解一些常用的驗證碼識別方法和過程。

1.圖片清理

圖片清理是為接下來的機器學習或模板匹配階段做準備的,指通過灰度化、二值化、干擾點清理等過程,得到比較干凈的圖片數據,具體樣例見下表。

1.1 彩色去噪

在計算機中使用最多的 RGB色彩空間,分別對應紅、綠、藍三種顏色,通過調配三個分量的比例來組成各種顏色。以最常見的32位顏色為例,一個分量是用8位來表示,最大值是255,灰度圖是指組成顏色的三個分量相等。原始彩色圖片包含的信息量是最大的,如果驗證碼圖片中有一些利用顏色反差加的干擾點或者線條,最好能在該階段做初步清理。比較簡單的一種處理方法是采用33矩陣對圖像進行平滑處理,即對每個像素取他所在33矩陣所有點的RGB均值,分別作為新的RGB值。稍微做點優化,取3*3矩陣中RGB三維歐式距離最接近均值的點作為新值。

1.2 灰度化

在彩色電視機系統中,通常使用一種叫 YUV 的色彩空間,其中Y表示亮度信號,對于人眼來說,亮度信號(Y)是最敏感的,如果將彩色圖像轉換為灰度圖像,僅僅需要轉換并保存亮度信號就可以。從RGB到YUV空間的Y轉換有一個很著名的心理學公式:Y = 0.299R + 0.587G + 0.114B。

而實際應用時,將系數縮放1000倍來實現整數運算:Gray = (R299 + G587 + B114 + 500) / 1000 。注意后面那個除法是整數除法,所以需要加上500來實現四舍五入。該公式的另一個簡化變種也很流行:Gray = (R30 + G59 + B11 + 50) / 100。更快的算法是采用移位代替除法,所以可以將系數縮放成 2的整數冪,再做右移操作。該整數取7從精度和速度上最合適:Gray = (R0.2992^7 + G0.5872^7 + B0.1142^7)>>7 = (R38 + G75 + B*15)>>7

1.3 二值化

為了簡化接下來的計算,需要把灰度圖片轉化成黑白二值圖。默認情況下值大于127的像素點被設置為白色,其余像素點設置為黑色。當然,這個閾值也需要根據圖片的實際情況計算調整。一般采用直方圖統計確定動態閾值的方法比較靠譜,白底黑字的取直方圖靠左邊的波谷位置作為閾值,黑底白字則取直方圖右邊的波谷位置作為閾值,將背景和字符作很好的區分。

1.4 底色統一

如果是黑底白字的圖片,需要轉換成白底黑字,如以上圖B。

1.5 干擾點清理

在黑白二值圖片去噪階段,常用的去噪方法為聯通性去噪,通常采用8向聯通來計算連通點個數,若某個點的連通點數目小于預設的閥值,則認為這些點都是噪聲點。這一簡單粗暴的清理方法,通常情況下是非常有效的。

2 字符切分

該階段對前期預處理后的圖片進行切割處理,定位和分離出整幅圖片中的每個孤立的字符主體部分。主要采用X軸和Y軸投影的方法,即統計對應坐標上黑色像素點的個數。對于圖片

得到的X軸和Y軸投影分別如下。利用X軸投影可以切割出多帶帶的字符,再分別利用Y軸投影,裁剪掉頂部和底部的空白部分。

OCR軟件識別

我們使用的是開源的OCR識別引擎Tesseract,初期由HP實驗室研發,后來貢獻給了開源軟件業,后經由Google進行優化并重新發布。調用代碼以及識別效果如下:

api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_TESSERACT_ONLY) #初始化
api.SetPageSegMode(tesseract.PSM_SINGLE_LINE) #設置為單行字符串模式
api.SetVariable("tessedit_char_whitelist", whitelist) #設置白名單
stringOCR = tesseract.ProcessPagesBuffer(mBuffer, len(mBuffer), api)

該方法的優點是:開發量少;比較通用,適合于各種變形較少的驗證碼;對于扭曲不嚴重的字母和數字識別率高。缺點也很明顯:對于扭曲的字母和數字識別率大大降低;對于字符間有粘連的驗證碼幾乎難以正確識別;很難針對特定網站的驗證碼做定制開發。

4.模板庫匹配

4.1 建立字符模板庫

首先需要針對目標網站收集大量的驗證碼;然后根據上一章節的方法,進行圖片清理;最后按照固定的長寬值切分出字符模板圖,保存文件名帶上對應字符的標記。

4.2 字符匹配

首先,把目標驗證碼圖片按字符個數切分,這里的圖片切分方法必須與模板制作時的切分方法一致,得到與模板圖同樣大小的字符圖。接下來通常的做法是使用漢明距離或編輯距離定義相似度,并用KNN方法得到K個最相似的字符,最后從K個字符中選取出現次數最多的那個作為匹配結果。參考了文獻[1]中K取值和字符識別率的變化關系(如下圖)。

然后,我們把K取值為5。并且把相似度重新定義為:matchScore = dotMatch^2 / (dotCaptcha * dotTemplate),其中dotMatch為驗證碼字符圖與模板圖對應位置都是黑色點的個數,dotCaptcha為驗證碼字符圖中黑色點個數,而dotTemplate為模板圖中黑色點個數。取這個分母是為了防止某些黑色點較多的模板圖在匹配度計算中始終得到較大值。識別效果如下表:

該方法的優點是:原理簡單直觀;可以針對不同網站定制優化;對于扭曲的字母和數字識別率較高。缺點是:開發量大,需要定制開發;需要收集大量的字符圖片庫;字符變化很多的情況,匹配次數增加速度下降;對于字符有粘連的圖片識別率低;

支持向量機

支持向量機通俗來講是一種二類分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器,其學習策略便是間隔最大化,最終可轉化為一個凸二次規劃問題的求解。實際應用上,往往遇到的是非線性可分得情況,因此通過核函數把低維向量映射到更高維空間,使得樣本滿足線性可分。

驗證碼識別問題實際上是其中單個字符識別問題,而在字符可窮舉的情況下,比如只有英文字符和數字,單個字符識別問題其實是一個分類問題。一個英文字母或數字表示一類,而驗證碼中切分后得到的單個字符需要被機器自動分到某一類。一般情況下,把單個字符的灰度圖片轉成整形數組,數組的每一個元素表示圖片的一個像素,即一個特征維度。我們切分得到的圖片大小為10x16=160像素,即有160個特征,當特征數量多且特征之間關系不明確時,采用支持向量機分類比較合適。

神經網絡

以上驗證碼識別都依賴于字符切分,切分的好壞幾乎直接決定識別的準確程度。而對于有字符粘連的圖片,往往識別率就會低很多。目前驗證碼識別最先進的是谷歌在識別“街景”圖像中門牌號碼中使用的一套的算法。該算法將定位、分割和識別等幾個步驟統一起來,采用一種“深度卷積神經網絡”(deep convolutional neural network)方法進行識別,準確率可以達到99%以上。谷歌拿自有的reCAPTCHA驗證碼做了測試,結果發現,對于難度最大的reCAPTCHA驗證碼,新算法的準確率都達到 99.8%,這可能也好于大多數人為驗證。

驗證碼作為一種輔助安全手段在Web安全中有著特殊的地位,了解驗證碼識別的方法和原理,不僅有利于繞過驗證碼抓取網站內容,而且有利于設計更安全合理的驗證碼。

網易云安全(易盾)行為式驗證碼超10億次完美驗證,堅固守衛網站安全第一道防線。網易云易盾提供新一代網站驗證碼,包括智能驗證碼、滑動驗證碼等形式,驗證碼接口穩定性 99.9%,感知威脅可智能切換驗證難度,告別繁瑣驗證,保護業務安全,點擊可免費試用。

文章來源: 網易云社區

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25404.html

相關文章

  • node識別驗證

    摘要:驗證碼的識別成功率跟圖片質量關系密切,一般拿到后的驗證碼都得經過灰度化,二值化,去噪,利用就可以很方便的做到。 了解驗證碼 什么是驗證碼? 所謂驗證碼,就是將一串隨機產生的數字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網站驗證,驗證成功后才能使用某項功能,通俗說就是一種區分用戶是計算機和人的公共全自動程序 驗證碼的作用 可以...

    levy9527 評論0 收藏0
  • Python圖像處理之圖片驗證識別

    摘要:在上一篇博客圖像處理之圖片文字識別中我們介紹了在中如何利用軟件來識別圖片中的英文與中文,本文將具體介紹如何在中利用軟件來識別驗證碼數字加字母。 ??在上一篇博客Python圖像處理之圖片文字識別(OCR)中我們介紹了在Python中如何利用Tesseract軟件來識別圖片中的英文與中文,本文將具體介紹如何在Python中利用Tesseract軟件來識別驗證碼(數字加字母)。??我們在網...

    kk_miles 評論0 收藏0
  • 驗證識別

    摘要:下面我們便來講種驗證碼的識別方式和一些思路。哈哈庫其實,驗證碼識別歸根到底還是對各種各樣圖片的識別和操作,中有很對圖像處理的庫,其中就是其中之一。所以在處理驗證碼識別之前,必須先了解庫和。第五步,按照規定軌跡進行拖動,完成驗證。 寫在前面 現在,很多網站采取各種各樣的措施來反爬蟲,其中之一就是使用驗證碼。當我們訪問網頁時,必須先通過驗證碼才能夠訪問頁面。下面我們便來講2種驗證碼的識別方...

    keke 評論0 收藏0
  • 驗證識別

    摘要:下面我們便來講種驗證碼的識別方式和一些思路。哈哈庫其實,驗證碼識別歸根到底還是對各種各樣圖片的識別和操作,中有很對圖像處理的庫,其中就是其中之一。所以在處理驗證碼識別之前,必須先了解庫和。第五步,按照規定軌跡進行拖動,完成驗證。 寫在前面 現在,很多網站采取各種各樣的措施來反爬蟲,其中之一就是使用驗證碼。當我們訪問網頁時,必須先通過驗證碼才能夠訪問頁面。下面我們便來講2種驗證碼的識別方...

    willin 評論0 收藏0
  • 驗證識別

    摘要:下面我們便來講種驗證碼的識別方式和一些思路。哈哈庫其實,驗證碼識別歸根到底還是對各種各樣圖片的識別和操作,中有很對圖像處理的庫,其中就是其中之一。所以在處理驗證碼識別之前,必須先了解庫和。第五步,按照規定軌跡進行拖動,完成驗證。 寫在前面 現在,很多網站采取各種各樣的措施來反爬蟲,其中之一就是使用驗證碼。當我們訪問網頁時,必須先通過驗證碼才能夠訪問頁面。下面我們便來講2種驗證碼的識別方...

    k00baa 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<