Python驗證碼識別:利用pytesser識別簡單圖形驗證碼

一、探討

識別圖形驗證碼可以說是做爬蟲的必修課莺褒,涉及到計算機圖形學(xué)白粉,機器學(xué)習(xí)传泊,機器視覺,人工智能等等高深領(lǐng)域……

簡單地說鸭巴,計算機圖形學(xué)的主要研究內(nèi)容就是研究如何在計算機中表示圖形眷细、以及利用計算機進行圖形的計算、處理和顯示的相關(guān)原理與算法鹃祖。圖形通常由點溪椎、線、面、體等幾何元素和灰度池磁、色彩奔害、線型楷兽、線寬等非幾何屬性組成地熄。計算機涉及到的幾何圖形處理一般有 2維到n維圖形處理,邊界區(qū)分芯杀,面積計算端考,體積計算,扭曲變形校正揭厚。對于顏色則有色彩空間的計算與轉(zhuǎn)換却特,圖形上色,陰影筛圆,色差處理等等裂明。

在破解驗證碼中需要用到的知識一般是 像素,線太援,面等基本2維圖形元素的處理和色差分析闽晦。常見工具為:

支持向量機(SVM)

OpenCV

圖像處理軟件(Photoshop,Gimp…)

Python Image Library

推薦下我自己創(chuàng)建的Python學(xué)習(xí)交流群960410445,這是Python學(xué)習(xí)交流的地方提岔,不管你是小白還是大牛仙蛉,小編都?xì)g迎,不定期分享干貨碱蒙,包括我整理的一份適合零基礎(chǔ)學(xué)習(xí)Python的資料和入門教程荠瘪。

二、PIL安裝

PIL: Python Imaging Library, 是Python平臺的圖像處理標(biāo)準(zhǔn)庫赛惩,功能非常強大哀墓。

在Debian/Ubantu Linux下直接通過apt安裝:

$sudo apt-get install python-imaging

Max和其他版本的Linux可以直接使用easy_install或pip安裝,安裝前需要把編譯環(huán)境裝好:

$ sudo easy_install PIL

Windos平臺可以直接去PIL官網(wǎng)下載exe安裝包喷兼。http://pythonware.com/products/pil/

注:官網(wǎng)提供的安裝包是32位的篮绰,63位系統(tǒng)請前往這里http://www.lfd.uci.edu/~gohlke/pythonlibs/#pillow下載替代包pillow。

三褒搔、一般思路

驗證碼識別的一般思路為:

1阶牍、圖片降噪

2、圖片切割

3星瘾、圖像文本輸出

3.1 圖片降噪

所謂降噪就是把不需要的信息通通去除走孽,比如背景,干擾線琳状,干擾像素等等磕瓷,只剩下需要識別的文字,讓圖片變成2進制點陣最好。

對于彩色背景的驗證碼:每個像素都可以放在一個5維的空間里困食,這5個維度分別是边翁,X,Y,R,G,B,也就是像素的坐標(biāo)和顏色硕盹,在計算機圖形學(xué)中符匾,有很多種色彩空間,最常用的比如RGB瘩例,印刷用的CYMK啊胶,還有比較少見的HSL或者HSV,每種色彩空間的維度都不一樣垛贤,但是可以通過公式互相轉(zhuǎn)換焰坪。在RGB空間中不好區(qū)分顏色,可以把色彩空間轉(zhuǎn)換為HSV或HSL聘惦。

驗證碼圖片7039.jpg:

1某饰、導(dǎo)入Image包,打開圖片:

fromPIL importImage

im =Image.open('7039.jpg')

2善绎、把彩色圖像轉(zhuǎn)化為灰度圖像黔漂。RBG轉(zhuǎn)化到HSI彩色空間,采用I分量:

imgry =im.convert('L')

imgry.show()

灰度看起來是這樣的:

3涂邀、二值化處理

二值化是圖像分割的一種常用方法瘟仿。在二值化圖象的時候把大于某個臨界灰度值的像素灰度設(shè)為灰度極大值,把小于這個值的像素灰度設(shè)為灰度極小值比勉,從而實現(xiàn)二值化(一般設(shè)置為0-1)劳较。根據(jù)閾值選取的不同,二值化的算法分為固定閾值和自適應(yīng)閾值浩聋,這里選用比較簡單的固定閾值观蜗。

把像素點大于閾值的設(shè)置,1,小于閾值的設(shè)置為0衣洁。生成一張查找表墓捻,再調(diào)用point()進行映射。

處理結(jié)果看起來是這樣的:

3.2 圖片切割

識別驗證碼的重點和難點就在于能否成功分割字符坊夫,對于顏色相同又完全粘連的字符砖第,比如google的驗證碼,目前是沒法做到5%以上的識別率的环凿。不過google的驗證碼基本上人類也只有30%的識別率梧兼。本文使用的驗證碼例子比較容易識別。

四智听、利用pytesser模塊實現(xiàn)識別

pytesser是谷歌OCR開源項目的一個模塊羽杰,在python中導(dǎo)入這個模塊即可將圖片中的文字轉(zhuǎn)換成文本渡紫。

pytesser 調(diào)用了 tesseract。在python中調(diào)用pytesser模塊考赛,pytesser又用tesseract識別圖片中的文字惕澎。

4.1 pytesser安裝

如果沒有安裝PIL,請到這里下載安裝:http://www.pythonware.com/products/pil/

安裝pytesser颜骤,下載地址:http://code.google.com/p/pytesser/ 唧喉,下載后直接將其解壓到項目代碼下,或者解壓到python安裝目錄的Libsite-packages下复哆,并將其添加到path環(huán)境變量中欣喧,不然在導(dǎo)入模塊時會出錯。

下載Tesseract OCR engine:http://code.google.com/p/tesseract-ocr/? 梯找,下載后解壓,找到tessdata文件夾益涧,用其替換掉pytesser解壓后的tessdata文件夾即可锈锤。

另外如果現(xiàn)在都是從PIL庫中運入Image,沒有使用Image模塊闲询,所以需要把pytesser.py中的import Image改為from PIL import Image, 其次還需要在pytesser文件夾中新建一個__init__.py的空文件久免。

ps:如果覺得后面兩步比較麻煩,可以直接到云盤中下載? ??http://yun.baidu.com/s/1jHJvNiI?扭弧,操作如步驟2阎姥。

4.2 調(diào)用pytesser識別

pytesser提供了兩種識別圖片方法,通過image對象和圖片地址鸽捻,代碼判斷如下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呼巴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子御蒲,更是在濱河造成了極大的恐慌衣赶,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厚满,死亡現(xiàn)場離奇詭異府瞄,居然都是意外死亡,警方通過查閱死者的電腦和手機碘箍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門遵馆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丰榴,你說我怎么就攤上這事货邓。” “怎么了多艇?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵逻恐,是天一觀的道長。 經(jīng)常有香客問我,道長复隆,這世上最難降的妖魔是什么拨匆? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮挽拂,結(jié)果婚禮上惭每,老公的妹妹穿的比我還像新娘。我一直安慰自己亏栈,他們只是感情好台腥,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绒北,像睡著了一般黎侈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闷游,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天峻汉,我揣著相機與錄音,去河邊找鬼脐往。 笑死休吠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的业簿。 我是一名探鬼主播瘤礁,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梅尤!你這毒婦竟也來了柜思?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤克饶,失蹤者是張志新(化名)和其女友劉穎酝蜒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矾湃,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡亡脑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了邀跃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霉咨。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拍屑,靈堂內(nèi)的尸體忽然破棺而出途戒,到底是詐尸還是另有隱情,我是刑警寧澤僵驰,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布喷斋,位于F島的核電站唁毒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏星爪。R本人自食惡果不足惜浆西,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望顽腾。 院中可真熱鬧近零,春花似錦、人聲如沸抄肖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漓摩。三九已至裙士,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幌甘,已是汗流浹背潮售。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锅风,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓鞍泉,卻偏偏與公主長得像皱埠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咖驮,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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

  • 分享一篇文章边器,原文來自:j_hao104的個人頁面。 一托修、探討 識別圖形驗證碼可以說是做爬蟲的必修課忘巧,涉及到計算機...
    妄心xyx閱讀 767評論 1 9
  • 0x00 簡介驗證碼作為一種輔助安全手段在Web安全中有著特殊的地位,驗證碼安全和web應(yīng)用中的眾多漏洞相比似乎微...
    windgod閱讀 2,264評論 0 19
  • 秋末總是給人一種靜謐凄涼之感睦刃,是不是秋末出生的姑娘多多少少會有一些“冷清”的氣質(zhì)砚嘴。 看到一片楓葉落在沙土上,午后的...
    喬伊月閱讀 250評論 0 1
  • 最近體驗到了一款云享換彈能量棒涩拙,有些感受來跟大家分享一下际长。 其實一開始看到這款能量棒的時候,我是拒絕的掐禁,為什么呢忠怖?...
    云享之家閱讀 634評論 0 0
  • 耶攀圈!放學(xué)了,今天星期五如绸,馬上就要周末了嘱朽,我不回家的話,可以在這里玩?zhèn)€痛快怔接,有星期日我們好像要出去吃肯德基搪泳,太好啦,...
    李岳成閱讀 158評論 2 1