文章插圖

文章插圖
一、前言
今天給大家分享的實戰項目是常用驗證碼標注&識別,從想法誕生到實現思路,再到編碼實戰的整體過程,這個過程我前后整理了上萬字,計劃分章節來發布 。言歸正傳,一起來看看今天的內容吧!今天這篇內容主要講解這篇文章的創作靈感、需求分析和實現思路 。
首先介紹一下驗證碼基本概念,驗證碼全稱為全自動區分計算機和人類的圖靈測試(Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗稱驗證碼,是一種區分用戶是計算機和人的公共全自動程序 。驗證碼的主要目的是強制人機交互來抵御機器自動化攻擊,為了確保服務器系統的穩定和用戶信息的安全,大部分網站采用了驗證碼技術 。圖片驗證碼是目前最常用的一種,本文也主要討論這種驗證碼的識別 。
最初,圖片驗證碼識別的想法最初源于12年的大學階段,當時的學校教務系統每次搶課系統就崩潰,而且還要特定時間段跟其他同學一起搶指定課程,基本搶不到自己想修的課程,那時候就想繞過系統圖片驗證碼通過代碼實現自動搶課,鑒于當時自己編碼能力和技術能力有限,機器學習、神經網絡相關框架效果較差,最后以各種條件限制實現不了告終~~
XDM,等等,故事還沒完,時間回到2021年,做為一名勤于搬磚、善于思考學習的程序猿,在經過幾年社會的毒打后,想著以現在自己的項目經驗、學習能力和編碼功底,以及行業內機器學習、神經網絡等AI技術的發展,能不能把多年以來的想法給實現,達到圖片驗證碼高正確率識別預測,訓練一個高度可用的CNN模型 。在做項目之前經過筆者幾天的資料查詢過程中,確信高可用的驗證碼識別模型想法是可以做的,于是開啟了CNN神經網絡等技術前置知識的漫長學習過程 。
幾個月過后,項目編碼實戰出爐,效果嘛,自我感覺還行,基本達到高可用,500張訓練數據圖,CNN模型單個字符97%以上準確率 。
這里先貼項目的工程Git地址,有基礎的同學可以去直接拉取項目下來把玩源碼:
[Java后臺-通用驗證碼標注系統](https://gitee.com/snowball2dev/DataMarkService) [Vue管理后臺模板-通用驗證碼標注系統](https://gitee.com/snowball2dev/DataMarkService-Vue)[Python-圖片驗證碼識別模型案例](https://gitee.com/snowball2dev/VerifyCodeRecognize-Python)[標注系統線上效果體驗地址](http://139.9.191.103:8084/)好的,XDM,如果到這里還有興趣往下看的話,那么就請跟隨結合筆者的學習、編碼實戰過程來了解常用的驗證碼識別方法和過程 。二、需求分析
說到圖片驗證碼識別功能,這個功能初步想想也簡單,網上搜一下關鍵詞,相關文章和開源項目非常多 。以下是github搜索結果:
筆者自己最初也是這么想的,只求簡單粗暴,于是弄了幾個項目下來跑了之后,發現代碼是可以用,但是效果非常拉跨,單個字符識別正確率很低,70%不到,4-6個字符那正確率就更低了,基本上達不到高正確率,可用性非常一般 。對于一個有追求的程序猿,不可能這么就完事了,于是,這就有了這個項目的整活 。
在使用這些開源項目的過程中,發現下載的項目實現過程大都分為2種思路,第一種無需圖片切割,直接數據標注訓練模型;第二種為圖片驗證碼進行字符切割,然后為單個字符進行分類訓練 。項目執行的具體過程就不演示了,有興趣的讀者開源自行搗鼓,下面就是筆者自己對2種思路適用方式的實踐思考總結:
1. 第一種無需圖片切割
優點:簡單粗暴,通用性強,直接用各種卷積神經網絡模型硬懟圖片驗證碼提取特征,適合知道驗證碼生成的正向代碼過程,用代碼生成圖片驗證碼數據給模型訓練 。
缺點:數據量小時模型擬合效果差,需要大量人工標注數據,不太適合不知道驗證碼生成規則,少量標注數據 。
2. 第二種進行字符切割
針對驗證碼生成規則,分析驗證碼各種背景干擾、噪聲點像素、字體形變和累疊、字符位置隨機及個數不定、反色等情況,對圖片逆向處理,達到局部字符可切割,降低卷積模型層次,降低數據標注量,實現字符分類 。
優點:可針對單一圖片驗證碼做特殊預處理,可實現部分字符切割,針對字符小圖進行分類訓練,小批量數據標注就可以訓練模型達到高擬合效果,達到可用
缺點:通用性不強,訓練模型只適用特定圖片驗證碼,復雜驗證碼可能無法切割XDM,等等,還有一種思路:
筆者自己學習OpenCV時想到的,通過圖片預處理,輪廓檢測,然后對A-Z,0-9字符通過SIFT算法進行特征提取,最后跟需要匹配的字符進行FLANN匹配,理想很豐滿,然后編寫相關代碼后發現由于驗證碼的正向生成過程導致字符特征變化太大,并不適合,于是放棄采用該思路,代碼見上述代碼鏈接中的python項目image_match.py 。
根據以上思路總結,根本沒有免費的午餐,好的數據和特征工程同等重要,要實現好的效果,都是要根據具體問題具體分析,所以筆者分析自己的圖片驗證碼識別案例,更適合第二種,另外一點原因大批量標注數據人工成本過高,個人不太喜歡 。以下將附帶案例詳細介紹第二種識別思路的實現過程 。
三、實現思路
根據需求初步分析,大概可分為四個步驟:
1. 數據采集/預處理:http批量下載,OpenCV API使用學習,圖片預處理
2. 數據標注:GUI標注功能開發,人工標注數據階段,模型訓練后預測數據可進行數據集補充
3. CNN神經網絡模型訓練:windows環境,cpu/gpu,學習神經網絡框架API,微積分、線代、概率論等前置知識,加深對神經網絡模型理解,pytroch框架的使用
4. 項目部署:linux環境下,標注系統VUE前端部署、標注系統Java后端部署、Python模型部署
以下是Xmind腦圖導出效果:
【驗證碼圖案不顯示 驗證碼不顯示怎么辦?】我是Snowball 。這篇內容主要講解了常用驗證碼標注&識別的背景知識,介紹了驗證碼的基本概念,講述了這個文章的的創作靈感、需求分析和實現思路 。
- cad創建填充邊界快捷命令 cad填充圖案怎么生成邊界線
- 源碼分享網站源碼 免費java源碼分享網站源碼
- 手機短信驗證平臺 免費 短信驗證服務平臺
- apple重設密碼無法驗證賬戶 蘋果更改密碼無法驗證賬戶
- B站怎么獲得激活碼 b站激活碼在哪里激活
- 專利號查詢網上查詢號碼 國家發明專利號查詢網上查詢
- C語言二分法代碼 二分法的c語言程序
- 電腦管理員密碼忘了怎么辦 密碼鎖管理員密碼忘了怎么辦
- java定義二維數組并賦值代碼 Java給二維數組賦值
- 為什么導出excel亂碼 excel導出來亂碼
