Python 機(jī)器學(xué)習(xí) 識(shí)別驗(yàn)證碼 來(lái)個(gè)'沃貝'自動(dòng)簽到(1: 圖像處理)

聲明:沃貝簽到網(wǎng)站已經(jīng)在10月初歸西, 但技術(shù)是不過(guò)時(shí)的哦拧揽。

前言叨B叨

我不知道有多少同學(xué)知道沃貝,用聯(lián)通的同學(xué)也不見(jiàn)得都知道, 因?yàn)槲乙彩呛髞?lái)別人科普給我才知道聯(lián)通旗下有這么個(gè)網(wǎng)站, 每天簽到,一個(gè)月到頭可以得950M流量. 對(duì)于我這種14塊月租套餐的用戶來(lái)說(shuō),還是很不錯(cuò)的福利. 但是, 問(wèn)題來(lái)了, 每天簽到, 很煩躁的說(shuō), 于是就想著做個(gè)自動(dòng)簽到, 順便以 python 機(jī)器學(xué)習(xí) 的名義, 廢話路上說(shuō), 來(lái)不及了, 快上車!

如下圖所示, 驗(yàn)證碼識(shí)別一般分為如下幾個(gè)步驟, 今天我們主要說(shuō)下紅框部分, 圖像采集和處理.

一. 采集圖像

先去到網(wǎng)站上的登錄窗口, 找到二維碼的地址, 然后寫(xiě)個(gè)循環(huán)把圖片下載下來(lái)做樣本, 多多益善,我這只下了50張.

在截圖中可以看到, 這個(gè)驗(yàn)證碼還不是個(gè)一般的驗(yàn)證碼, 是個(gè)二般的. 特征為: 純數(shù)字, 字體有旋轉(zhuǎn), 背景有雜色, 還有干擾線. 所有這些特征, 除了純數(shù)字以外, 全部是來(lái)阻止程序自動(dòng)識(shí)別的絆腳石. 接下來(lái), 我們就來(lái)一步一步地掃清障礙, 還我4個(gè)清純的數(shù)字s.

二.圖像處理

處理圖像之前, 先把pillow裝上:

pip install pillow

2. 首先來(lái)灰度化,二值化, 就是把背景雜色過(guò)濾掉變得非黑即白.這里的閾值設(shè)置的是170, 可根據(jù)不同的驗(yàn)證碼設(shè)置不同的值.

然后圖像會(huì)變成這樣:

3. 接下來(lái)去噪. 這個(gè)去噪不比ps里, 用橡皮擦擦就沒(méi)了, 里面還是有些門(mén)道(算法)的. 比如[鄰域像素算法]:

即對(duì)于像素值>245的鄰域像素剃盾,判別為屬于背景色,如果一個(gè)像素上下左右4各像素值有超過(guò)2個(gè)像素屬于背景色强法,那么該像素就是噪聲。這里還需要考慮到邊界問(wèn)題.

去噪后, 效果如下圖. 對(duì)于以上鄰域算法僅僅是針對(duì)像素為1的干擾線, 對(duì)于像素大于一的干擾線沒(méi)做處理. 不過(guò)這個(gè)對(duì)于機(jī)器學(xué)習(xí)的話問(wèn)題不大, 因?yàn)槲覀冏詈笊傻臉颖緯?huì)有很多種類, 然后讓程序去推測(cè)當(dāng)前識(shí)別的對(duì)象的可信度.

4. 接下來(lái)應(yīng)該是切割驗(yàn)證碼(開(kāi)始那個(gè)流程圖感覺(jué)不太對(duì), 應(yīng)該是先分割后再校正傾斜度)

切割驗(yàn)證碼用的是投影算法, 即坐標(biāo)從上到下, 從左到右遍歷, 如果發(fā)現(xiàn)是空白,就跳過(guò),直到掃描到像素值為255的點(diǎn),開(kāi)始輸出, 輸出到縱坐標(biāo)上沒(méi)有像素值為255的點(diǎn),如下圖所示:

相關(guān)代碼呢, 太長(zhǎng)了, 貼上來(lái)估計(jì)你也不愿意看. 我在后面把所有代碼上傳到GitHub(地址附在文章底部), 大家有興趣就down下來(lái)研究研究.

5. 校正傾斜度, 然后重新調(diào)整大小. 校正傾斜度這里用的是旋轉(zhuǎn)卡殼算法, 如下圖所示, 當(dāng)兩條平行線之間的舉例最短的時(shí)候, 就認(rèn)為是字符正確的方向.

代碼如下:

這里在旋轉(zhuǎn)的時(shí)候是從-60度到60度, 是依據(jù)當(dāng)前驗(yàn)證碼傾斜規(guī)律設(shè)定的. 調(diào)整完后效果如圖. 可以發(fā)現(xiàn)有些字符并不是很正, 但是將就吧

其實(shí)如果是用機(jī)器學(xué)習(xí)的去識(shí)別字符的話, 校正傾斜度可做可不做, 因?yàn)闄C(jī)器學(xué)習(xí)是靠大量樣本來(lái)對(duì)比識(shí)別的, 如果你的歪歪扭扭的樣本足夠多, 一樣可以識(shí)別.

6. 歸一化. 把以上的幾個(gè)步驟寫(xiě)到一個(gè)循環(huán)里, 跑他個(gè)N遍, 這時(shí)候, 我們就有了好多好多的數(shù)字圖片, 這時(shí)苦力活來(lái)了...我們需要將每張數(shù)字圖片歸類, 在本地創(chuàng)建0-9十個(gè)文件夾, 將數(shù)字圖片按顯示值放入相應(yīng)的文件夾里.

其實(shí)這里在我們校正傾斜度的時(shí)候可以先使用tesseract先識(shí)別一下數(shù)字, 然后將其存放在相應(yīng)文件夾里, 這樣可以減輕一部分工作量, 但是有時(shí)候識(shí)別的不準(zhǔn)確,或者是無(wú)法識(shí)別, 所以還得我們手工去檢查一下.

pip install pytessearct

Pytessearct說(shuō)明:

a湾笛、Python-tesseract是一個(gè)基于google's Tesseract-OCR的獨(dú)立封裝包饮怯;

b、Python-tesseract功能是識(shí)別圖片文件中文字嚎研,并作為返回參數(shù)返回識(shí)別結(jié)果;

c、Python-tesseract默認(rèn)支持tiff舵盈、bmp格式圖片剃允,只有在安裝PIL之后,才能支持jpeg杆勇、gif贪壳、png等其他圖片格式;

使用如下python 語(yǔ)句識(shí)別字符后,存入對(duì)應(yīng)文件夾

recNum = pytesseract.image_to_string(cur_img,config='-psm 10 outputbase digits')

最后整理完揍是這個(gè)樣子

結(jié)語(yǔ)

至此, 識(shí)別驗(yàn)證碼的第一部分港完了, 得到了一堆小小的數(shù)字圖片.

后面將會(huì)進(jìn)一步講講驗(yàn)證碼識(shí)別部分. 敬請(qǐng)期待.

說(shuō)好的GitHub鏈接

https://github.com/shark526/WowSign

參考鏈接:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蚜退,一起剝皮案震驚了整個(gè)濱河市闰靴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钻注,老刑警劉巖蚂且,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異幅恋,居然都是意外死亡杏死,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)淑翼,“玉大人腐巢,你說(shuō)我怎么就攤上這事≈现郏” “怎么了系忙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)惠豺。 經(jīng)常有香客問(wèn)我银还,道長(zhǎng),這世上最難降的妖魔是什么洁墙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任蛹疯,我火速辦了婚禮,結(jié)果婚禮上热监,老公的妹妹穿的比我還像新娘捺弦。我一直安慰自己,他們只是感情好孝扛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布列吼。 她就那樣靜靜地躺著,像睡著了一般苦始。 火紅的嫁衣襯著肌膚如雪寞钥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天陌选,我揣著相機(jī)與錄音理郑,去河邊找鬼。 笑死咨油,一個(gè)胖子當(dāng)著我的面吹牛您炉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播役电,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赚爵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了法瑟?” 一聲冷哼從身側(cè)響起囱晴,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瓢谢,沒(méi)想到半個(gè)月后畸写,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡氓扛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年枯芬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了论笔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡千所,死狀恐怖狂魔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情淫痰,我是刑警寧澤最楷,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站待错,受9級(jí)特大地震影響籽孙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜火俄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一犯建、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓜客,春花似錦适瓦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至疯攒,卻和暖如春嗦随,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卸例。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工称杨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肌毅,地道東北人筷转。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悬而,于是被迫代替她去往敵國(guó)和親呜舒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容