驗證碼的識別和運用

来源:https://www.cnblogs.com/liumeng00wy/p/18260324
-Advertisement-
Play Games

Spring Cloud是一個相對比較成熟的微服務框架。雖然,Spring Cloud於2016年才推出1.0的release版本, 時間最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分散式系統解決方案。 Spring Cloud是一系列框架的有序集合。它利用Spri ...


驗證碼的主要目的是強制人機交互來抵禦機器自動化攻擊,為了確保伺服器系統的穩定和用戶信息的安全,越來越多的網站採用了驗證碼技術。圖片驗證碼是目前最常用的一種,本文也主要討論這種驗證碼的識別。最近在一個爬蟲項目中遇到了驗證碼,需要機器自動識別繞過。這些驗證碼大都解析度都較低,本身信息量不大。通常被加入一種或多種干擾因素:各種背景干擾,雜訊點像素,字體形變和累疊,字元位置隨機及個數不定,反色等情況。在網上調研了資料和文獻後,分別採用OCR識別和模板庫匹配方法對不同類型驗證碼進行了識別。主要過程可以分解為三個步驟:1.圖片清理,2.字元切分,3.字元識別。以下結合工作經驗和調研內容講解一些常用的驗證碼識別方法和過程。1.圖片清理圖片清理是為接下來的機器學習或模板匹配階段做準備的,指通過灰度化、二值化、干擾點清理等過程,得到比較乾凈的圖片數據
驗證碼中的噪音點通常是用來增加破解難度的隨機元素,它們可以是點、線、形狀或其他非字母數字的圖形。下麵我會描述一個典型的帶有噪音點的驗證碼的例子,並且解釋一下這些噪音是如何被加入到驗證碼中的。

以上圖片是一個對比圖,展示了一個帶噪音點的驗證碼與其乾凈版本的對比。左邊的圖片顯示了包含扭曲的字母和數字的驗證碼,周圍散佈著隨機的噪音點和線條。右邊的圖片則是同一驗證碼的乾凈版本,沒有噪音點或線條,只有清晰的字母和數字可見。這有助於理解噪音點在驗證碼中的實際效果。
為了增加識別難度,驗證碼圖像上添加了以下類型的噪音:

1.隨機點噪音:在整個圖像的背景上隨機分佈的小黑點或小白點,這些點的密度不均勻,有的地方密集,有的地方稀疏。

2.隨機線條噪音:在圖像中添加一些斜的、彎曲的或者直的細線,線條的顏色可能與字母相同或不同,但足以干擾識別。

3.扭曲和變形:字母本身可能經過扭曲處理,比如旋轉、拉伸或壓縮,使得字母的形狀變得不規則。

4.背景干擾:可能有雜色的背景,或是背景圖案,這增加了額外的識別難度。

5.模糊效果:整個圖像或部分區域可能應用了模糊效果,使得字母邊緣變得不清晰。

6.顏色變化:字母可能使用了漸變色,或者背景與字母之間的對比度較低,使得區分更加困難。

** 如何添加噪音**
在生成驗證碼時,噪音可以通過編程語言中的圖形庫來添加,如Python的PIL庫或OpenCV庫。例如,隨機點噪音可以通過在迴圈中隨機選擇圖像中的坐標並設置像素值來實現。線條噪音可以通過繪製隨機角度和長度的線條來完成。扭曲和變形則可以通過圖像變換函數實現,而模糊效果通常由圖像捲積濾波器如高斯模糊來完成。
去除噪音
驗證碼噪音的去除通常涉及圖像處理和機器學習技術,包括但不限於:

濾波:使用高斯濾波、中值濾波等技術減少隨機點噪音。
二值化:通過閾值分割將圖像轉換為黑白,有助於去除背景噪音。
形態學操作:如膨脹和腐蝕,用於清理細小的噪音點。
連通組件分析:識別和分離圖像中的獨立字元。
深度學習:使用捲積神經網路(CNNs)等模型進行特征提取和分類,以識別驗證碼中的有效信息。

艾埃巨擘 www.ai9v.cn

該方法的優點是:原理簡單直觀;可以針對不同網站定製優化;對於扭曲的字母和數字識別率較高。缺點是:開發量大,需要定製開發;需要收集大量的字元圖片庫;字元變化很多的情況,匹配次數增加速度下降;對於字元有粘連的圖片識別率低;5. 支持向量機 支持向量機通俗來講是一種二類分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器,其學習策略便是間隔最大化,最終可轉化為一個凸二次規劃問題的求解。實際應用上,往往遇到的是非線性可分得情況,因此通過核函數把低維向量映射到更高維空間,使得樣本滿足線性可分。 驗證碼識別問題實際上是其中單個字元識別問題,而在字元可窮舉的情況下,比如只有英文字元和數字,單個字元識別問題其實是一個分類問題。一個英文字母或數字表示一類,而驗證碼中切分後得到的單個字元需要被機器自動分到某一類。一般情況下,把單個字元的灰度圖片轉成整形數組,數組的每一個元素表示圖片的一個像素,即一個特征維度。我們切分得到的圖片大小為10x16=160像素,即有160個特征,當特征數量多且特征之間關係不明確時,採用支持向量機分類比較合適。 LIBSVM 是臺灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與回歸的軟體包,他不但提供了編譯好的可在Windows系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操作系統上應用。該軟體還有一個特點,就是對SVM所涉及的參數調節相對比較少,提供了很多的預設參數,利用這些預設參數就可以解決很多問題;並且提供了交互檢驗(Cross Validation)的功能。主要參數使用:多類別(C-SVC=0),radial basis function(kernel_type=2),訓練和預測代碼如下。對於 這樣輕微變形的驗證碼,有字母和數字共36個類別,收集訓練樣本共778個字元圖的情況下,單字元預測準確率接近100%:

labels = [] samples = []for ch in captchaTemplate.keys(): for table in captchaTemplate[ch]: labels.append(ord(ch)) samples.append(map(lambda e:e/255., table)) problem = svm_problem(labels, samples) model = svm_train(problem, '-t 2 -c 500')print len(samples) data = map(lambda e:e/255., list(Image.open(TESTFILE).getdata(TESTFILE))) y = ord('z') prediction = svm_predict([y,], [data,], model)print prediction

該方法的優點是:無需設計快速的圖像匹配演算法;只要圖片切分方法合適,對於扭曲傾斜的字母和數字識別率也較高;並且可以針對不同類型的驗證碼做定製優化。缺點是:支持向量機原理比較複雜,無法直觀解釋,需要瞭解支持向量機等機器學習方法。6. 神經網路 以上驗證碼識別都依賴於字元切分,切分的好壞幾乎直接決定識別的準確程度。而對於有字元粘連的圖片,往往識別率就會低很多。目前驗證碼識別最先進的是谷歌在識別“街景”圖像中門牌號碼中使用的一套的演算法。該演算法將定位、分割和識別等幾個步驟統一起來,採用一種“深度捲積神經網路”(deep convolutional neural network)方法進行識別,準確率可以達到99%以上。谷歌拿自有的reCAPTCHA驗證碼做了測試,結果發現,對於難度最大的reCAPTCHA驗證碼,新演算法的準確率都達到 99.8%,這可能也好於大多數人為驗證。 驗證碼作為一種輔助安全手段在Web安全中有著特殊的地位,瞭解驗證碼識別的方法和原理,不僅有利於繞過驗證碼抓取網站內容,而且有利於設計更安全合理的驗證碼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ‍ 寫在開頭 點贊 + 收藏 學會 需求背景 從第三方採購的vue2 + ElementUI實現的雲管平臺,乙方說2011年左右就開始有這個項目了(那時候有Vue了嗎,思考.jpg)。十幾年的項目,我何德何能可以擔此責任。裡面的代碼經過多人多年迭代可以用慘不忍睹來形容,吐槽歸吐槽 ...
  • 摘要:本文深入探討了Nuxt 3的組件開發與管理,從基礎概念、安裝配置、目錄結構、組件分類與開發實踐、生命周期與優化,到測試與維護策略。詳細介紹了Nuxt 3的核心特點,如伺服器端渲染(SSR)、靜態站點生成(SSG)以及與Vue生態系統的無縫集成。文章以Nuxt 3為基礎,指導開發者如何高效構建高... ...
  • 問題分析 當我們需要用摺疊面板的時候,往往會考慮element-ui的el-collaspe,然而大多數時候原生預設的樣式並無法拿來就用。我們往往會自定義組件的樣式,或者在預設的基礎上進行修改。最近在Vue項目中進行組件修改的時候,無意間某個文件自動設置成了scoped(應該是插件自動化生成的結構代 ...
  • 前言 眾所周知,在vue2的時候使用一個vue組件要麼全局註冊,要麼局部註冊。但是在setup語法糖中直接將組件import導入無需註冊就可以使用,你知道這是為什麼呢?註:本文中使用的vue版本為3.4.19。 關註公眾號:【前端歐陽】,給自己一個進階vue的機會 看個demo 我們先來看個簡單的d ...
  • CSS 屬性計算過程 你是否瞭解 CSS 的屬性計算過程呢? 有的同學可能會講,CSS屬性我倒是知道,例如: p{ color : red; } 上面的 CSS 代碼中,p 是元素選擇器,color 就是其中的一個 CSS 屬性。 但是要說 CSS 屬性的計算過程,還真的不是很清楚。 沒關係,通過此 ...
  • ‍ 寫在開頭 點贊 + 收藏 學會 前端常用的截圖保存的方法 利用 Blob 對象和 URL.createObjectURL:可以將截圖數據轉換為 Blob 對象,然後使用 URL.createObjectURL 方法生成一個臨時的 URL,將這個 URL 賦值給 <a> 標簽的 ...
  • 主要對面向過程編程與面向對象編程進行對比,介紹了軟體危機的背景,講解了面向對象編程設計思想的由來,對面向對象方法學:OOA-OOD-OOP進行簡單介紹。 ...
  • 表格配置屬性說明文檔 頁面添加引用: import BaseTable from ‘@/components/BaseTable/index.vue 1、grid-edit-width 表格操作欄寬度 例如:grid-edit-width:250 2、gridOtherConfig 屬性 說明 示例 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...