爬蟲(chóng)對(duì)抗系列-驗(yàn)證碼

參考博客:
1.https://www.cnblogs.com/Jimc/p/9772930.html
2.https://www.cnblogs.com/qqandfqr/p/7866650.html

1.普通圖形驗(yàn)證碼

普通圖形驗(yàn)證碼一般由四位純數(shù)字、純字母或者字母數(shù)字組合構(gòu)成,是最常見(jiàn)的驗(yàn)證碼氛魁,也是最簡(jiǎn)單的驗(yàn)證碼硕噩,利用 tesserocr 或者 pytesseract 庫(kù)即可識(shí)別此類(lèi)驗(yàn)證碼,前提是已經(jīng)安裝好 Tesseract-OCR 軟件

Tesserocr

tesserocr 是 Python 的一個(gè) OCR 識(shí)別庫(kù) 窍荧,但其實(shí)是對(duì) tesseract 做的一 層 Python API 封裝恨憎,所以它的核心是 tesseract。 因此瓤荔,在安裝 tesserocr 之前,我們需要先安裝 tesseract 输硝。

Tesseract安裝
要安裝tesserocr,首先要下載tesseract,它是給tesserocr提供支持的愉粤。下載地址為:https://digi.bib.uni-mannheim.de/tesseract/拿撩。

打開(kāi)之后可以看到有很多文件,帶dev的為開(kāi)發(fā)版本压恒,不帶dev的為穩(wěn)定版本,我們選擇下載不帶dev的版本型宙,比如最新的這個(gè):tesseract-ocr-w64-setup-v4.1.0.20190314.exe伦吠。下載完成之后運(yùn)行安裝,一直點(diǎn)擊next搁嗓,直到出現(xiàn)如下頁(yè)面


在Additional language data中包含了OCR支持識(shí)別的各國(guó)語(yǔ)言包箱靴,可以根據(jù)情況選擇,我這里就選擇了中文的:

image

添加系統(tǒng)環(huán)境變量:把剛才的安裝路徑“C:\Program Files (x86)\Tesseract-OCR”添加到紅線劃的PATH和Path棍矛,注意狈癞,添加時(shí)候開(kāi)頭用“;”跟之前的變量隔開(kāi),結(jié)尾以“;”結(jié)尾慨绳。下面是我的配置信息樣本:

image.png
1.1 Tesserocr安裝

相關(guān)鏈接
tesserocr GitHub: https://github.com/sirfz/tesserocr
tesserocr PyPI: https://pypi.python.org/pypi/tesserocr
tesseract 下載地址: http://digi.bib.uni-mannheim.de/tesseract
tesseract GitHub: https://github.com/tesseract-ocr/tesseract
tesseract 語(yǔ)言包: http://github.com/tesseract-ocr/tessdata
tesseract 文檔: https://github.com/tesseract-ocr/tesseract/wiki/Documentation

常見(jiàn)Python包的安裝方式有三種:
1. pip 安裝

pip install tesserocr pillow

2. conda 安裝

conda install tesserocr

#一條可行的命令:
conda install -c simonflueckiger tesserocr

3. whl包 安裝
這種方法一般不會(huì)報(bào)錯(cuò)

C:\Users\dell\Downloads
$ pip install tesserocr-2.4.0-cp36-cp36m-win_amd64.whl
Processing c:\users\dell\downloads\tesserocr-2.4.0-cp36-cp36m-win_amd64.whl
Installing collected packages: tesserocr
Successfully installed tesserocr-2.4.0
1.2 Tesserocr應(yīng)用

簡(jiǎn)單示例:

import tesserocr
from PIL import Image

image = Image.open('code.png')
result = tesserocr.image_to_text(image)
print(result)

新建一個(gè) Image 對(duì)象脐雪,調(diào)用 tesserocr 的 image_to_text() 方法,傳入 Image 對(duì)象即可完成識(shí)別战秋,另一種方法:

import tesserocr
print(tesserocr.file_to_text('code.png'))
1.3 pytesseract

pytesseract 庫(kù)識(shí)別驗(yàn)證碼
簡(jiǎn)單示例:

import pytesseract
from PIL import Image
img = Image.open('code.png')
img = img.convert('RGB')
img.show()
print(pytesseract.image_to_string(img))

pytesseract 的各種方法:

  • get_tesseract_version:返回 Tesseract 的版本信息脂信;
  • image_to_string:將圖像上的 Tesseract OCR 運(yùn)行結(jié)果返回到字符串;
  • image_to_boxes:返回包含已識(shí)別字符及其框邊界的結(jié)果狰闪;
  • image_to_data:返回包含框邊界,置信度和其他信息的結(jié)果幔欧。需要 Tesseract 3.05+丽声;
  • image_to_osd:返回包含有關(guān)方向和腳本檢測(cè)的信息的結(jié)果。

有關(guān)參數(shù):

image_to_data(image, lang='', config='', nice=0, output_type=Output.STRING)
  • image:圖像對(duì)象浴井;
  • lang:Tesseract 語(yǔ)言代碼字符串霉撵;
  • config:任何其他配置為字符串,例如:config=’–psm 6’喊巍;
  • nice:修改 Tesseract 運(yùn)行的處理器優(yōu)先級(jí)。Windows不支持呵曹。尼斯調(diào)整了類(lèi)似 unix 的流程的優(yōu)點(diǎn)何暮;
  • output_type:類(lèi)屬性,指定輸出的類(lèi)型海洼,默認(rèn)為string。

lang 參數(shù)域帐,常見(jiàn)語(yǔ)言代碼如下:

  • chi_sim:簡(jiǎn)體中文
  • chi_tra:繁體中文
  • eng:英文
  • rus:俄羅斯語(yǔ)
  • fra:法語(yǔ)
  • deu:德語(yǔ)
  • jpn:日語(yǔ)
1.4 驗(yàn)證碼處理

利用 Image 對(duì)象的 convert() 方法傳入不同參數(shù)可以對(duì)驗(yàn)證碼做一些額外的處理,如轉(zhuǎn)灰度民假、二值化等操作龙优,經(jīng)過(guò)處理過(guò)后的驗(yàn)證碼會(huì)更加容易被識(shí)別,識(shí)別準(zhǔn)確度更高彤断,各種參數(shù)及含義:

  • 1:1位像素,黑白筒愚,每字節(jié)一個(gè)像素存儲(chǔ)菩浙;
  • L:8位像素句伶,黑白;
  • P:8位像素先嬉,使用調(diào)色板映射到任何其他模式楚堤;
  • RGB:3x8位像素,真彩色身冬;
  • RGBA:4x8位像素,帶透明度掩模的真彩色滚躯;
  • CMYK:4x8位像素嘿歌,分色;
  • YCbCr:3x8位像素宙帝,彩色視頻格式;
  • I:32位有符號(hào)整數(shù)像素愿待;
  • F:32位浮點(diǎn)像素。
# 示例
import pytesseract
from PIL import Image
image = Image.open('code.png')
image = image.convert('L')
image.show()
result = pytesseract.image_to_string(image)
print(result)

Image 對(duì)象的 convert() 方法參數(shù)傳入 L年扩,即可將圖片轉(zhuǎn)化為灰度圖像访圃,轉(zhuǎn)換前后對(duì)比:

import pytesseract
from PIL import Image
image = Image.open('code.png')
image = image.convert('1')
image.show()
result = pytesseract.image_to_string(image)
print(result)

Image 對(duì)象的 convert() 方法參數(shù)傳入 1,即可將圖片進(jìn)行二值化處理况脆,處理前后對(duì)比:

2. 漢字驗(yàn)證碼:

圖片文字識(shí)別


圖片.png
import requests
from aip import AipOcr

image = requests.get('https://static.pandateacher.com/7b5d6d8d9dea5691705d04fef2306b52.png').content
APP_ID = '11756541'
API_KEY = '2YhkLuyQGljPUYnmi1CFgxOP'
SECRET_KEY = '4rrHe2BF828bI8bQy6bLlx1MelXqa8Z7'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
res = client.basicAccurate(image)

if 'words_result' in res.keys():
    for item in res['words_result']:
        print(item['words'])
#---------------------------------------------------------------------
優(yōu)美勝于丑陋
明了勝于晦澀
簡(jiǎn)潔勝于復(fù)雜
復(fù)雜勝于凌亂
扁平勝于嵌套
間隔勝于緊湊
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末格了,一起剝皮案震驚了整個(gè)濱河市盛末,隨后出現(xiàn)的幾起案子否淤,更是在濱河造成了極大的恐慌,老刑警劉巖石抡,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啰扛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡隐解,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)膜眠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)溜嗜,“玉大人,你說(shuō)我怎么就攤上這事辟躏⊥寥” “怎么了会涎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵瑞凑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我练慕,道長(zhǎng)技掏,這世上最難降的妖魔是什么铃将? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任劲阎,我火速辦了婚禮鸠真,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吠卷。我一直安慰自己撤嫩,他們只是感情好序攘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布寻拂。 她就那樣靜靜地躺著,像睡著了一般瞄沙。 火紅的嫁衣襯著肌膚如雪慌核。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,954評(píng)論 1 283
  • 那天垫桂,我揣著相機(jī)與錄音粟按,去河邊找鬼霹粥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛后控,可吹牛的內(nèi)容都是我干的空镜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼馋袜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舶斧!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起茴厉,我...
    開(kāi)封第一講書(shū)人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤矾缓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嗜闻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡样眠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年檐束,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了束倍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甥桂,死狀恐怖邮旷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情廊移,我是刑警寧澤探入,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布懂诗,位于F島的核電站,受9級(jí)特大地震影響植旧,放射性物質(zhì)發(fā)生泄漏离唐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一完沪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧覆积,春花似錦熟呛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椎瘟。三九已至昔逗,卻和暖如春篷朵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笔链。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工腮猖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澈缺。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像莱预,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子依沮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345