<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python項目實戰(zhàn)篇——常用驗證碼標(biāo)注和識別(需求分析和實現(xiàn)思路)

          共 3551字,需瀏覽 8分鐘

           ·

          2021-09-10 13:37

          點擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進行關(guān)注

          回復(fù)“書籍”即可獲贈Python從入門到進階共10本電子書

          愿得此身長報國,何須生入玉門關(guān)。

              大家好,我是Snowball。

          一、前言

              今天給大家分享的實戰(zhàn)項目是常用驗證碼標(biāo)注&識別,從想法誕生到實現(xiàn)思路,再到編碼實戰(zhàn)的整體過程,這個過程我前后整理了上萬字,計劃分章節(jié)來發(fā)布。言歸正傳,一起來看看今天的內(nèi)容吧!今天這篇內(nèi)容主要講解這篇文章的創(chuàng)作靈感、需求分析和實現(xiàn)思路。


              首先介紹一下驗證碼基本概念,驗證碼全稱為全自動區(qū)分計算機和人類的圖靈測試(Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗稱驗證碼,是一種區(qū)分用戶是計算機和人的公共全自動程序。驗證碼的主要目的是強制人機交互來抵御機器自動化攻擊,為了確保服務(wù)器系統(tǒng)的穩(wěn)定和用戶信息的安全,大部分網(wǎng)站采用了驗證碼技術(shù)。圖片驗證碼是目前最常用的一種,本文也主要討論這種驗證碼的識別。


              最初,圖片驗證碼識別的想法最初源于12年的大學(xué)階段,當(dāng)時的學(xué)校教務(wù)系統(tǒng)每次搶課系統(tǒng)就崩潰,而且還要特定時間段跟其他同學(xué)一起搶指定課程,基本搶不到自己想修的課程,那時候就想繞過系統(tǒng)圖片驗證碼通過代碼實現(xiàn)自動搶課,鑒于當(dāng)時自己編碼能力和技術(shù)能力有限,機器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)相關(guān)框架效果較差,最后以各種條件限制實現(xiàn)不了告終~~


              XDM,等等,故事還沒完,時間回到2021年,做為一名勤于搬磚、善于思考學(xué)習(xí)的程序猿,在經(jīng)過幾年社會的毒打后,想著以現(xiàn)在自己的項目經(jīng)驗、學(xué)習(xí)能力和編碼功底,以及行業(yè)內(nèi)機器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)等AI技術(shù)的發(fā)展,能不能把多年以來的想法給實現(xiàn),達到圖片驗證碼高正確率識別預(yù)測,訓(xùn)練一個高度可用的CNN模型。在做項目之前經(jīng)過筆者幾天的資料查詢過程中,確信高可用的驗證碼識別模型想法是可以做的,于是開啟了CNN神經(jīng)網(wǎng)絡(luò)等技術(shù)前置知識的漫長學(xué)習(xí)過程。


              幾個月過后,項目編碼實戰(zhàn)出爐,效果嘛,自我感覺還行,基本達到高可用,500張訓(xùn)練數(shù)據(jù)圖,CNN模型單個字符97%以上準(zhǔn)確率。


              這里先貼項目的工程Git地址,有基礎(chǔ)的同學(xué)可以去直接拉取項目下來把玩源碼:

          [Java后臺-通用驗證碼標(biāo)注系統(tǒng)](https://gitee.com/snowball2dev/DataMarkService) [Vue管理后臺模板-通用驗證碼標(biāo)注系統(tǒng)](https://gitee.com/snowball2dev/DataMarkService-Vue)[Python-圖片驗證碼識別模型案例](https://gitee.com/snowball2dev/VerifyCodeRecognize-Python)[標(biāo)注系統(tǒng)線上效果體驗地址](http://139.9.191.103:8084/)

              好的,XDM,如果到這里還有興趣往下看的話,那么就請跟隨結(jié)合筆者的學(xué)習(xí)、編碼實戰(zhàn)過程來了解常用的驗證碼識別方法和過程。


          二、需求分析

              說到圖片驗證碼識別功能,這個功能初步想想也簡單,網(wǎng)上搜一下關(guān)鍵詞,相關(guān)文章和開源項目非常多。以下是github搜索結(jié)果:

              乍一看,好像真有免費的午餐,隨便下載個CNN-python項目,改幾行代碼,然后開始瘋狂標(biāo)注數(shù)據(jù)過程,就能跑出來模型。


              筆者自己最初也是這么想的,只求簡單粗暴,于是弄了幾個項目下來跑了之后,發(fā)現(xiàn)代碼是可以用,但是效果非常拉跨,單個字符識別正確率很低,70%不到,4-6個字符那正確率就更低了,基本上達不到高正確率,可用性非常一般。對于一個有追求的程序猿,不可能這么就完事了,于是,這就有了這個項目的整活。


              在使用這些開源項目的過程中,發(fā)現(xiàn)下載的項目實現(xiàn)過程大都分為2種思路,第一種無需圖片切割,直接數(shù)據(jù)標(biāo)注訓(xùn)練模型;第二種為圖片驗證碼進行字符切割,然后為單個字符進行分類訓(xùn)練。項目執(zhí)行的具體過程就不演示了,有興趣的讀者開源自行搗鼓,下面就是筆者自己對2種思路適用方式的實踐思考總結(jié):

          1. 第一種無需圖片切割

             優(yōu)點:簡單粗暴,通用性強,直接用各種卷積神經(jīng)網(wǎng)絡(luò)模型硬懟圖片驗證碼提取特征,適合知道驗證碼生成的正向代碼過程,用代碼生成圖片驗證碼數(shù)據(jù)給模型訓(xùn)練。

             缺點:數(shù)據(jù)量小時模型擬合效果差,需要大量人工標(biāo)注數(shù)據(jù),不太適合不知道驗證碼生成規(guī)則,少量標(biāo)注數(shù)據(jù)。


          2. 第二種進行字符切割

             針對驗證碼生成規(guī)則,分析驗證碼各種背景干擾、噪聲點像素、字體形變和累疊、字符位置隨機及個數(shù)不定、反色等情況,對圖片逆向處理,達到局部字符可切割,降低卷積模型層次,降低數(shù)據(jù)標(biāo)注量,實現(xiàn)字符分類。

             優(yōu)點:可針對單一圖片驗證碼做特殊預(yù)處理,可實現(xiàn)部分字符切割,針對字符小圖進行分類訓(xùn)練,小批量數(shù)據(jù)標(biāo)注就可以訓(xùn)練模型達到高擬合效果,達到可用

             缺點:通用性不強,訓(xùn)練模型只適用特定圖片驗證碼,復(fù)雜驗證碼可能無法切割


              XDM,等等,還有一種思路:


              筆者自己學(xué)習(xí)OpenCV時想到的,通過圖片預(yù)處理,輪廓檢測,然后對A-Z,0-9字符通過SIFT算法進行特征提取,最后跟需要匹配的字符進行FLANN匹配,理想很豐滿,然后編寫相關(guān)代碼后發(fā)現(xiàn)由于驗證碼的正向生成過程導(dǎo)致字符特征變化太大,并不適合,于是放棄采用該思路,代碼見上述代碼鏈接中的python項目image_match.py。


          根據(jù)以上思路總結(jié),根本沒有免費的午餐,好的數(shù)據(jù)和特征工程同等重要,要實現(xiàn)好的效果,都是要根據(jù)具體問題具體分析,所以筆者分析自己的圖片驗證碼識別案例,更適合第二種,另外一點原因大批量標(biāo)注數(shù)據(jù)人工成本過高,個人不太喜歡。以下將附帶案例詳細(xì)介紹第二種識別思路的實現(xiàn)過程。


          三、實現(xiàn)思路

              根據(jù)需求初步分析,大概可分為四個步驟:

          1. 數(shù)據(jù)采集/預(yù)處理http批量下載,OpenCV API使用學(xué)習(xí),圖片預(yù)處理

          2. 數(shù)據(jù)標(biāo)注:GUI標(biāo)注功能開發(fā),人工標(biāo)注數(shù)據(jù)階段,模型訓(xùn)練后預(yù)測數(shù)據(jù)可進行數(shù)據(jù)集補充

          3. CNN神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練:windows環(huán)境,cpu/gpu,學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)框架API,微積分、線代、概率論等前置知識,加深對神經(jīng)網(wǎng)絡(luò)模型理解,pytroch框架的使用

          4. 項目部署:linux環(huán)境下,標(biāo)注系統(tǒng)VUE前端部署、標(biāo)注系統(tǒng)Java后端部署、Python模型部署


          以下是Xmind腦圖導(dǎo)出效果:



          四、總結(jié)

              我是Snowball。這篇內(nèi)容主要講解了常用驗證碼標(biāo)注&識別的背景知識, 介紹了驗證碼的基本概念講述了這個文章的的創(chuàng)作靈感、需求分析和實現(xiàn)思路。

              小伙伴們,快快用實踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。

          ------------------- End -------------------

          往期精彩文章推薦:

          歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群

          萬水千山總是情,點個【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~~

          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久影院av | 好吊爽一区二区三区免费 | 中文无码短视频 | 久久人人爽人人爽人人片aV东京热 | 北条麻妃一区二区三区蜜臀色欲 |