12 字符驗(yàn)證碼

12 字符驗(yàn)證碼

一、驗(yàn)證碼簡(jiǎn)介

什么是驗(yàn)證碼?

驗(yàn)證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動(dòng)區(qū)分計(jì)算機(jī)和人類的圖靈測(cè)試)的縮寫(xiě)隧膘。

是一種用來(lái)區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序。

驗(yàn)證碼的作用?

認(rèn)證碼是一種人機(jī)識(shí)別手段,最終目的是區(qū)分正常用戶和機(jī)器的操作辛润。

可以防止:惡意破解密碼、注冊(cè)见秤、刷票砂竖、論壇灌水真椿,防止黑客對(duì)用戶的密碼進(jìn)行暴力破解。

一般是提出一個(gè)問(wèn)題乎澄,這個(gè)問(wèn)題可以由計(jì)算機(jī)生成并評(píng)判突硝,但是必須只有人類才能解答。由于計(jì)算機(jī)無(wú)法解答這個(gè)的問(wèn)題置济,所以回答出問(wèn)題的用戶就可以被認(rèn)為是人類解恰。

驗(yàn)證碼類別

驗(yàn)證碼自面世以來(lái)就一直在更新,迭代浙于。

圖形驗(yàn)證碼:這類驗(yàn)證碼大多是計(jì)算機(jī)隨機(jī)產(chǎn)生一個(gè)字符串修噪,在把字符串增加噪點(diǎn)、干擾線路媚、變形、重疊樊销、不同顏色整慎、扭曲組成一張圖片來(lái)增加識(shí)別難度。

滑動(dòng)驗(yàn)證碼:也叫行為驗(yàn)證碼围苫,比較流行的一種驗(yàn)證碼裤园,通過(guò)用戶的操作行為來(lái)完成驗(yàn)證,其中最出名的就是極驗(yàn)剂府。

滑動(dòng)驗(yàn)證碼的原理就是使用機(jī)器學(xué)習(xí)中的深度學(xué)習(xí)技術(shù)拧揽,根據(jù)一些特征來(lái)區(qū)分是否為正常用戶。通過(guò)記錄用戶的滑動(dòng)速度腺占,還有每一小段時(shí)間的瞬時(shí)速度淤袜,用戶鼠標(biāo)點(diǎn)擊情況,以及滑動(dòng)后的匹配程度來(lái)識(shí)別衰伯。而且铡羡,不是說(shuō)滑動(dòng)到正確位置就是驗(yàn)證通過(guò),而是根據(jù)特征識(shí)別來(lái)區(qū)分是否為真用戶意鲸,滑到正確位置只是一個(gè)必要條件烦周。

點(diǎn)觸驗(yàn)證碼:點(diǎn)擊類驗(yàn)證碼都是給出一張包含文字的圖片,通過(guò)文字提醒用戶點(diǎn)擊圖中相同字的位置進(jìn)行驗(yàn)證怎顾。

二读慎、Pillow庫(kù)

PIL庫(kù)
PIL (Python Image Library) 已經(jīng)算是 Python 處理圖片的標(biāo)準(zhǔn)庫(kù)了,兼具強(qiáng)大的功能和簡(jiǎn)潔的 API.
但是PIL庫(kù)的更新非常緩慢槐雾, 并且它只支持到python2.7夭委,不支持python3

Pillow
由于PIL庫(kù)更新太慢了,于是于是一群志愿者在PIL庫(kù)的基礎(chǔ)上創(chuàng)建了一個(gè)新的分支版本蚜退,命名為Pillow.
Pillow目前最新支持到python3.6闰靴,它的維護(hù)和開(kāi)發(fā)十分活躍彪笼,兼容PIL庫(kù)的絕大多數(shù)語(yǔ)法,并且增加了許多新的特性蚂且,推薦直接使用Pillow

注意點(diǎn)
Pillow和PIL不能共存在一個(gè)環(huán)境中配猫,如果你之前安裝了PIL的話,需要?jiǎng)h除掉才能在安裝Pillow
由于是繼承自PIL的分支杏死, 所以Pillow庫(kù)的導(dǎo)入是這樣的
Import PIL

1泵肄、PIL基本概念

PIL中所涉及的基本概念有如下幾個(gè):通道(bands)、尺寸(size)淑翼、坐標(biāo)系統(tǒng)(coordinate system)腐巢。

通道

每張圖片都是由一個(gè)或者多個(gè)數(shù)據(jù)通道構(gòu)成,如果這些通道具有相同的維數(shù)和深度玄括,PIL允許將這些通道進(jìn)行疊加
以RGB圖像為例冯丙,每張圖片都是由三個(gè)數(shù)據(jù)通道疊加構(gòu)成,分別為R 遭京、G 胃惜、B。
對(duì)于灰度圖像(沒(méi)有色彩的圖片哪雕, RGB色彩分量全部相等)船殉,只有一個(gè)通道。
灰度指的是黑白圖像中點(diǎn)的顏色深度斯嚎,范圍一般是0到255利虫, 白色為255,黑色為0

對(duì)于一張圖片的通道數(shù)量和名稱堡僻,可以通過(guò)方法getbands()來(lái)獲取糠惫。方法getbands()是PIL中Image子模塊的方法,它會(huì)返回一個(gè)字符串組成的元祖钉疫,元祖中包括了每一個(gè)通道的名稱寞钥。

尺寸

圖片尺寸(size)指的是圖片的寬度和高度
通過(guò)size屬性可以獲取圖片的尺寸,它的返回值是一個(gè)元祖陌选,元祖里面有兩個(gè)值理郑,分別是水平和垂直方向上的像素個(gè)數(shù)

坐標(biāo)系統(tǒng)

PIL使用笛卡爾像素坐標(biāo)系統(tǒng),圖像的左上角為左邊的原點(diǎn)(0咨油,0)您炉,這就意味著,x軸的數(shù)值是從左到右增長(zhǎng)的役电,y軸的數(shù)值是從上到下增長(zhǎng)的赚爵。
在我們處理圖像的時(shí)候,常常需要去表示一個(gè)矩形的圖像區(qū)域。Pillow中很多方法都需要傳入一個(gè)表示矩形區(qū)域的元祖
這個(gè)元祖包含四個(gè)值冀膝,分別表示矩形四條邊距離x軸或者y軸的距離唁奢。順序是(左,頂窝剖,右麻掸,底)
例如,一個(gè)800x600的像素圖像表示為(0赐纱, 0脊奋, 800, 600)

from PIL import Image

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

# 獲取通道
print('通道:', im.getbands())
# 獲取尺寸size
print('尺寸:',im.size)

# 調(diào)用系統(tǒng)默認(rèn)圖片打開(kāi)應(yīng)用打開(kāi)
im.show()

2疙描、PIL操作圖像

Image是Pillow中最為重要的類诚隙,實(shí)現(xiàn)了Pillow中大部分的功能,創(chuàng)建這個(gè)類的實(shí)例主要有三個(gè)方式:

1.從文件中加載圖像

2.創(chuàng)建一個(gè)新的圖像

3.處理其他的圖像獲得

from PIL import Image

im1 = Image.open('yasuo.jpg')

im2 = Image.new('RGB', (200,200), 'red')

im3 = im1.crop((100, 100, 200, 200))

im2.show()
im3.show()

三起胰、簡(jiǎn)單驗(yàn)證碼處理

1久又、灰度化

像素點(diǎn)是最小的圖片單元,一張圖片由很多像素點(diǎn)構(gòu)成效五,一個(gè)像素點(diǎn)的顏色是由RGB三個(gè)值來(lái)表現(xiàn)的籽孙,所以一個(gè)像素點(diǎn)對(duì)應(yīng)三個(gè)顏色向量矩陣,我們對(duì)圖像的處理就是對(duì)這個(gè)像素點(diǎn)的操作火俄。

圖片的灰度化,就是讓像素點(diǎn)矩陣中的每一個(gè)像素點(diǎn)滿足 R=G=B讲冠,此時(shí)這個(gè)值叫做灰度值瓜客,白色為0,黑色為255

灰度轉(zhuǎn)化一般公式為:

R=G=B = 處理前的 RX0.3 + GX0.59 + B*0.11

from PIL import Image

im1 = Image.open('yasuo.jpg')

# 灰度化
im2 = im1.convert('L')

im2.show()

2竿开、二值化

圖像的二值化谱仪,就是將圖像的像素點(diǎn)矩陣中的每個(gè)像素點(diǎn)的灰度值設(shè)置為0(黑色)或255(白色),從而實(shí)現(xiàn)二值化否彩,將整個(gè)圖像呈現(xiàn)出明顯的只有黑和白的視覺(jué)效果疯攒。

二值化原理是利用設(shè)定的一個(gè)閾值來(lái)判斷圖像像素是0還是255, 一般小于閾值的像素點(diǎn)變?yōu)?列荔, 大于的變成255

這個(gè)臨界灰度值就被稱為閾值敬尺,閾值的設(shè)置很重要,閾值過(guò)大或過(guò)小都會(huì)對(duì)圖片造成損壞

選擇閾值的原則是:既要盡可能保存圖片信息贴浙,又要盡可能減少背景和噪聲的干擾

常用閾值選擇的方法是:

灰度平局值法: 取127 (0~255的中數(shù)砂吞, (0+255)/2 = 127)

平均值法:計(jì)算像素點(diǎn)矩陣中的所有像素點(diǎn)的灰度值的平均值avg

迭代法:選擇一個(gè)近似閾值作為估計(jì)值的初始值,然后進(jìn)行分割圖像崎溃,根據(jù)產(chǎn)生的子圖像的特征來(lái)選取新的閾值蜻直,在利用新的閾值分割圖像,經(jīng)過(guò)多次循環(huán),使得錯(cuò)誤分割的圖像像素點(diǎn)降到最小概而。

from PIL import Image

im1 = Image.open('yasuo.jpg')

w,h = im1.size

# 獲取像素點(diǎn)集合
pixdata = im1.load()

im1.show()

for x in range(w):
    for y in range(h):
        p = list(pixdata[x, y])
        if p[0] <127:
            p[0] = 0
            p[1] = 0
            p[2] = 0
        else:
            p[0] = 255
            p[1] = 255
            p[2] = 255
        pixdata[x, y] = tuple(p)

im1.show()

3呼巷、降噪

經(jīng)過(guò)了二值化處理,整個(gè)圖片像素就被分為了兩個(gè)值0和255赎瑰, 如果一個(gè)像素點(diǎn)是圖片或者干擾因素的一部分王悍,那么她的灰度值一定是0(黑色),如果一個(gè)點(diǎn)是背景乡范,其灰度值應(yīng)該是255配名,白色

所以對(duì)于孤立的噪點(diǎn),他的周圍應(yīng)該都是白色晋辆,或者大多數(shù)點(diǎn)都是白色的渠脉,所以在判斷的時(shí)候條件應(yīng)該放寬,一個(gè)點(diǎn)是黑色并且相鄰的點(diǎn)為白色的點(diǎn)的個(gè)數(shù)大于一個(gè)固定的值瓶佳,那么這個(gè)點(diǎn)就是噪點(diǎn)芋膘。

我們根據(jù)一個(gè)點(diǎn)A的RGB值,與周圍的8個(gè)點(diǎn)的RBG值比較霸饲,設(shè)定一個(gè)值N(0 <N <8)为朋,當(dāng)A的RGB值與周圍8個(gè)點(diǎn)的RGB相等或者小于N時(shí),此點(diǎn)為噪點(diǎn)

四厚脉、OCR識(shí)別

OCR (Optical Character Recognition)光學(xué)字符識(shí)別习寸, 指的是對(duì)文本資料的圖像文件進(jìn)行分析識(shí)別處理,獲取文集及版面信息的過(guò)程

Tesseract-OCR是一個(gè)開(kāi)源的字符識(shí)別引擎傻工,我們可以用他來(lái)識(shí)別一些簡(jiǎn)單的驗(yàn)證碼霞溪。

Windows安裝:

安裝文件在

Linux安裝:

sudo apt-get install tesseract-ocr

sudo apt-get install libtesseract-dev

Mac安裝:

brew install tesseract

Pytesser3是一個(gè)在Python內(nèi)使用Tesseract-Ocr的庫(kù),安裝非常簡(jiǎn)單:

pip install Pytesser3

然后需要進(jìn)行配置中捆, 將pytesser3包下面init文件內(nèi)tesseract_exe_name的值設(shè)置為為你的tesseract.exe的路徑

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸯匹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子泄伪,更是在濱河造成了極大的恐慌殴蓬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蟋滴,死亡現(xiàn)場(chǎng)離奇詭異染厅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)津函,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)糟秘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人球散,你說(shuō)我怎么就攤上這事尿赚∩⑹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵凌净,是天一觀的道長(zhǎng)悲龟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)冰寻,這世上最難降的妖魔是什么须教? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮斩芭,結(jié)果婚禮上轻腺,老公的妹妹穿的比我還像新娘。我一直安慰自己划乖,他們只是感情好贬养,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著琴庵,像睡著了一般误算。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上迷殿,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天儿礼,我揣著相機(jī)與錄音,去河邊找鬼庆寺。 笑死蚊夫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懦尝。 我是一名探鬼主播知纷,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼导披!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起埃唯,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撩匕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后墨叛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體止毕,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年漠趁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扁凛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闯传,死狀恐怖谨朝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤字币,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布则披,位于F島的核電站,受9級(jí)特大地震影響洗出,放射性物質(zhì)發(fā)生泄漏士复。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一翩活、第九天 我趴在偏房一處隱蔽的房頂上張望阱洪。 院中可真熱鬧,春花似錦菠镇、人聲如沸冗荸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)俏竞。三九已至,卻和暖如春堂竟,著一層夾襖步出監(jiān)牢的瞬間魂毁,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工出嘹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留席楚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓税稼,卻偏偏與公主長(zhǎng)得像烦秩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子郎仆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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