亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python網(wǎng)站驗(yàn)證碼識(shí)別

 更新時(shí)間:2016年01月25日 10:26:02   作者:Manning  
這篇文章主要介紹了Python網(wǎng)站驗(yàn)證碼識(shí)別的相關(guān)資料,需要的朋友可以參考下

0x00 識(shí)別涉及技術(shù)

驗(yàn)證碼識(shí)別涉及很多方面的內(nèi)容。入手難度大,但是入手后,可拓展性又非常廣泛,可玩性極強(qiáng),成就感也很足。

驗(yàn)證碼圖像處理

驗(yàn)證碼圖像識(shí)別技術(shù)主要是操作圖片內(nèi)的像素點(diǎn),通過對(duì)圖片的像素點(diǎn)進(jìn)行一系列的操作,最后輸出驗(yàn)證碼圖像內(nèi)的每個(gè)字符的文本矩陣。

讀取圖片
圖片降噪
圖片切割
圖像文本輸出

驗(yàn)證字符識(shí)別

驗(yàn)證碼內(nèi)的字符識(shí)別主要以機(jī)器學(xué)習(xí)的分類算法來完成,目前我所利用的字符識(shí)別的算法為KNN(K鄰近算法)和SVM (支持向量機(jī)算法),后面我 會(huì)對(duì)這兩個(gè)算法的適用場景進(jìn)行詳細(xì)描述。

獲取字符矩陣
矩陣進(jìn)入分類算法
輸出結(jié)果

涉及的Python庫

這次研究主要使用了以下這三個(gè)庫

numpy(數(shù)學(xué)處理庫)
Image(圖像處理庫)
ImageEnhance(圖像處理庫)

驗(yàn)證碼識(shí)別技術(shù)難點(diǎn)

驗(yàn)證碼識(shí)別由兩部分組成,分別是驗(yàn)證碼圖片處理和驗(yàn)證碼字符學(xué)習(xí)。

在編碼過程中,我認(rèn)為難度最大的部分是識(shí)別算法的學(xué)習(xí)和使用。
在寫文檔的時(shí)候,我認(rèn)為難度最大的部分是圖像處理部分,圖像處理部分需要對(duì)抗各種干擾因素,對(duì)抗不同類型的驗(yàn)證碼需要不同的算法支持,因此圖像處理程序需要對(duì)各種驗(yàn)證碼具體問題具體分析,不能抱有大而全的思想,務(wù)必注重細(xì)節(jié)處理。

0x01 學(xué)習(xí)與識(shí)別

驗(yàn)證碼識(shí)別的過程分為學(xué)習(xí)過程與識(shí)別過程

學(xué)習(xí)

識(shí)別

上圖代碼運(yùn)用的是SVM的識(shí)別過程

0x02 圖像處理

驗(yàn)證碼圖像處理腦圖

如上圖所示,驗(yàn)證碼圖像處理模塊是一個(gè)結(jié)構(gòu)規(guī)整、內(nèi)部分支復(fù)雜的模塊,整個(gè)驗(yàn)證碼識(shí)別準(zhǔn)確率全靠這個(gè)模塊,可謂是整個(gè)驗(yàn)證碼識(shí)別的根本。如 上文所說,圖像處理模塊玩的是圖片內(nèi)的每一個(gè)像素百度百科:像素,因此這個(gè)模塊好上手。

上面這兩句便可以打開一個(gè)圖像對(duì)象,im對(duì)象內(nèi)置許多方法有興趣可以查看Image庫源碼或者參考Python Imaging Library Handbook 圖片增加對(duì)比度、銳化、調(diào)整亮度、二值化,這四塊是比較規(guī)整的模塊,處理調(diào)用庫函數(shù)即可。下面主要說說圖片降噪和清楚單像素干擾線。

圖片清除噪點(diǎn)

圖片降噪的原理是利用9宮格內(nèi)信息點(diǎn)(信息像素,一般經(jīng)過預(yù)處理的信息像素為黑色)。

上圖黑色部分為(x,y),單像素噪點(diǎn)處理時(shí)分別驗(yàn)證周圍的八個(gè)點(diǎn)是否為白色,如果為白色即可判斷(x,y)為噪點(diǎn)。同理雙像素噪點(diǎn)需要考慮兩個(gè)像 素的排列是橫向還是縱向或者是斜向,之后判斷其周圍10個(gè)像素是否均為白色像素即可。同理三像素噪點(diǎn)也是這樣,我嘗試的情況三像素噪點(diǎn)不包括 橫向排列和縱向排列。

圖片清除干擾線

對(duì)于單像素的干擾線目前可以解決,但是大寬度干擾線則會(huì)產(chǎn)生判斷上的誤差,目前不好解決。

上圖的干擾線為單像素,因此通過算法即可解決。

干擾線處理后的圖片如上圖所示。

圖片切割

對(duì)于去噪后的圖片,我們需要對(duì)圖片進(jìn)行切割,切割的目的是為了提取信息,方便把圖片中的數(shù)字轉(zhuǎn)化為01形式的文本。 我所采用的切割方式是投影法.

如上圖所示,對(duì)于切割數(shù)字3,首先需要找到垂線A和B,判斷步驟是:縱向從左向右掃描圖片,找到第一條含有信息點(diǎn)的直線記為A,繼續(xù)向右掃描, 當(dāng)從A開始,找到第一條無信息點(diǎn)的直線記為B,從投影的角度來看,A與B之間X軸上的投影的信息值均大于0,切割A(yù)與B之間的圖像后,以新圖像為 基礎(chǔ),找出C與D,至此便可切割出數(shù)字3。

圖片切割目前可以僅可對(duì)非粘連字符進(jìn)行切割,對(duì)于粘連字符,我的程序并沒能很好的處理。

信息輸出

當(dāng)獲取了切割好的圖片,由于圖片只有黑色與白色,因此遍歷每一個(gè)像素點(diǎn),根據(jù)像素點(diǎn)的顏色來進(jìn)行0,1輸出,一般認(rèn)為黑色像素輸出1,白色像素 輸出0。

0x03 識(shí)別算法概述

字符識(shí)別算法整體流程很好理解,舉個(gè)例子,字符像素文本A進(jìn)入識(shí)別算法,通過對(duì)算法的結(jié)果進(jìn)行判斷,便可以完成識(shí)別過程。我實(shí)踐了兩種識(shí)別算 法,第一種是KNN算法,第二種是SVM算法,下面我將以個(gè)人的角度來闡述下這兩種算法的原理以及適用場景,個(gè)人水平有限,算法細(xì)節(jié)可以參考我 之后給出的鏈接。

KNN(K鄰近算法)

KNN算法是一種簡單的算法,KNN算法基本思想是把數(shù)據(jù)轉(zhuǎn)化為點(diǎn),通過計(jì)算兩點(diǎn)之間的距離來進(jìn)行判斷。 在n維度下,兩點(diǎn)間距離可以表示為 S = math.sqrt((x1-y1)^2+(x2-y2)^2+.+(xn-yn)^2)。

SVM(支持向量機(jī))

SVM算法相比較KNN算法來說,原理上要復(fù)雜復(fù)雜的多,SVM算法基本思想是把數(shù)據(jù)轉(zhuǎn)化為點(diǎn),通過把點(diǎn)映射到n維空間上,通過n-1維的超平面 切割,找到最佳切割超平面,通過判斷點(diǎn)在超平面的哪一邊,來判斷點(diǎn)屬于哪一類字符。

但是SVM算法的特點(diǎn)只能在兩類中間比較,因此把字符識(shí)別運(yùn)用到該算法上,還需要在比較過程中加以一個(gè)遍歷算法,遍歷算法可以減少大量無效計(jì) 算,遍歷的場景是一個(gè)有向無環(huán)圖。

算法細(xì)節(jié)文檔鏈接

jerrylead 的blog : Machine Learning
支持向量機(jī)通俗導(dǎo)論(理解SVM的三層境界)

0x04 識(shí)別算法適用場景

KNN與SVM的適用場景存在一定區(qū)別。

KNN算法在運(yùn)行過程上來說,并不存在學(xué)習(xí)過程,只是遍歷已知分類進(jìn)行距離上的判斷,根據(jù)待測數(shù)據(jù)與已知分類進(jìn)行比較,找出與待測距離最近的n個(gè)數(shù)據(jù)來進(jìn)行匹配,因此當(dāng)已分類的樣本越來越多,KNN算法的運(yùn)算時(shí)間會(huì)越來越長。

SVM算法在運(yùn)行過程中,是存在學(xué)習(xí)的過程的,通過對(duì)已知分類標(biāo)簽進(jìn)行兩兩組合,找出每個(gè)組合的切割方程。待測數(shù)據(jù)只需要一個(gè)一個(gè)計(jì)算切割方程,根據(jù)切割方程的返回值來判斷下一個(gè)執(zhí)行的是哪個(gè)方程即可。0-9數(shù)字的判斷,只需要執(zhí)行9次方程計(jì)算即可。SVM多類分類方法

因此如果大規(guī)模識(shí)別驗(yàn)證碼,我建議適用SVM作為識(shí)別算法。

0x05 實(shí)踐細(xì)節(jié)注意事項(xiàng)

這部分內(nèi)容是我所遇到的問題。

規(guī)則化圖像

當(dāng)切割的驗(yàn)證碼以數(shù)字呈現(xiàn)在文本里,他們的像素是各不相同的,需要把這些標(biāo)準(zhǔn)化,我選擇標(biāo)準(zhǔn)化在27*30像素是一個(gè)經(jīng)驗(yàn)值。此外,還需要把新圖 像放置在標(biāo)準(zhǔn)化像素的正中央。

使用SVM構(gòu)建超平面方程

SVM算法的重點(diǎn)是尋找切割方程,首先需要把待判斷的兩種元素存入到dataArr和labelArr中,通smoP方程尋找b和alphas。

利用方程組預(yù)測——遍歷dag圖

由于svm是二分類器,只能判斷是或者不是,只需要使用k一1個(gè)決策函數(shù)即可得出結(jié)果,不存在誤分、拒分區(qū)域;另外,由于其特殊的結(jié)構(gòu),故有一定的容錯(cuò)性,分類精度較一般的二叉樹方法高。

對(duì)于0123456789 共10個(gè)字符 共有45種非重復(fù)組合。利用dag只需判斷9次即可找出目標(biāo)。

0x06 實(shí)踐總結(jié)

運(yùn)用機(jī)器學(xué)習(xí)算法時(shí),如果不理解實(shí)現(xiàn)原理,先直接套接口,總之先實(shí)現(xiàn)功能,不必強(qiáng)求對(duì)算法的徹底理解。 2. 識(shí)別算法是通用的。

處理不同驗(yàn)證碼,應(yīng)該有不同的處理策略。

測試發(fā)現(xiàn),主要耗時(shí)發(fā)生在構(gòu)建方程過程中,構(gòu)建方程耗時(shí)105s,識(shí)別1s。

圖像去噪時(shí)對(duì)于大寬度的干擾線沒有好的解決辦法(干擾線寬度大于3像素)。 6. 圖像切割在面臨圖像粘連時(shí),目前無很好的處理方法。

相關(guān)文章

  • python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人

    python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人

    本篇文章主要介紹了python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Python實(shí)現(xiàn)PS濾鏡功能之波浪特效示例

    Python實(shí)現(xiàn)PS濾鏡功能之波浪特效示例

    這篇文章主要介紹了Python實(shí)現(xiàn)PS濾鏡功能之波浪特效,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)PS濾鏡波浪特效的原理與相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python實(shí)現(xiàn)多張圖片合成一張馬賽克圖片

    Python實(shí)現(xiàn)多張圖片合成一張馬賽克圖片

    這篇文章主要介紹了了Python如何實(shí)現(xiàn)將多張圖片合成一張馬賽克圖片。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • 詳解pandas安裝若干異常及解決方案總結(jié)

    詳解pandas安裝若干異常及解決方案總結(jié)

    這篇文章主要介紹了詳解pandas安裝若干異常及解決方案總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Python?類和對(duì)象詳細(xì)介紹

    Python?類和對(duì)象詳細(xì)介紹

    這篇文章主要介紹了Python?類和對(duì)象詳細(xì)介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • Python實(shí)現(xiàn)希爾排序算法的原理與用法實(shí)例分析

    Python實(shí)現(xiàn)希爾排序算法的原理與用法實(shí)例分析

    這篇文章主要介紹了Python實(shí)現(xiàn)希爾排序算法,簡單講述了希爾排序的原理并結(jié)合具體實(shí)例形式分析了Python希爾排序的具體實(shí)現(xiàn)方法與使用技巧,需要的朋友可以參考下
    2017-11-11
  • 使用openCV去除文字中亂入的線條實(shí)例

    使用openCV去除文字中亂入的線條實(shí)例

    這篇文章主要介紹了使用openCV去除文字中亂入的線條實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 簡單介紹Python中的floor()方法

    簡單介紹Python中的floor()方法

    這篇文章主要介紹了Python中的floor()方法,是Python入門的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • matplotlib更改窗口圖標(biāo)的方法示例

    matplotlib更改窗口圖標(biāo)的方法示例

    這篇文章主要介紹了matplotlib更改窗口圖標(biāo)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 已安裝tensorflow-gpu,但keras無法使用GPU加速的解決

    已安裝tensorflow-gpu,但keras無法使用GPU加速的解決

    今天小編就為大家分享一篇已安裝tensorflow-gpu,但keras無法使用GPU加速的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02

最新評(píng)論