RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python 只需20行代碼即可實(shí)現(xiàn)驗(yàn)證碼識(shí)別

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:李建兵 ? 2018-03-16 15:23 ? 次閱讀

一、探討

識(shí)別圖形驗(yàn)證碼可以說(shuō)是做爬蟲的必修課,涉及到計(jì)算機(jī)圖形學(xué),機(jī)器學(xué)習(xí),機(jī)器視覺(jué),人工智能等等高深領(lǐng)域……

簡(jiǎn)單地說(shuō),計(jì)算機(jī)圖形學(xué)的主要研究?jī)?nèi)容就是研究如何在計(jì)算機(jī)中表示圖形、以及利用計(jì)算機(jī)進(jìn)行圖形的計(jì)算、處理和顯示的相關(guān)原理與算法。圖形通常由點(diǎn)、線、面、體等幾何元素和灰度、色彩、線型、線寬等非幾何屬性組成。計(jì)算機(jī)涉及到的幾何圖形處理一般有 2維到n維圖形處理,邊界區(qū)分,面積計(jì)算,體積計(jì)算,扭曲變形校正。對(duì)于顏色則有色彩空間的計(jì)算與轉(zhuǎn)換,圖形上色,陰影,色差處理等等。

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

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

OpenCV

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

Python Image Library

二、PIL安裝

PIL: Python Imaging Library, 是Python平臺(tái)的圖像處理標(biāo)準(zhǔn)庫(kù),功能非常強(qiáng)大。

在Debian/Ubantu Linux下直接通過(guò)apt安裝:

$sudo apt-get install python-imaging

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

$ sudo easy_install PIL

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

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

三、一般思路

驗(yàn)證碼識(shí)別的一般思路為:

1、圖片降噪

2、圖片切割

3、圖像文本輸出

3.1 圖片降噪

所謂降噪就是把不需要的信息通通去除,比如背景,干擾線,干擾像素等等,只剩下需要識(shí)別的文字,讓圖片變成2進(jìn)制點(diǎn)陣最好。

對(duì)于彩色背景的驗(yàn)證碼:每個(gè)像素都可以放在一個(gè)5維的空間里,這5個(gè)維度分別是,X,Y,R,G,B,也就是像素的坐標(biāo)和顏色,在計(jì)算機(jī)圖形學(xué)中,有很多種色彩空間,最常用的比如RGB,印刷用的CYMK,還有比較少見的HSL或者HSV,每種色彩空間的維度都不一樣,但是可以通過(guò)公式互相轉(zhuǎn)換。在RGB空間中不好區(qū)分顏色,可以把色彩空間轉(zhuǎn)換為HSV或HSL。色彩空間參見http://baike.baidu.com/view/3427413.htm

驗(yàn)證碼圖片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()

灰度看起來(lái)是這樣的:

3、二值化處理

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

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

threshold = 140

table = []

foriinrange(256):

ifi < threshold:

table.append(0)

else:

table.append(1)

out = imgry.point(table,'1')

out.show()

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

3.2 圖片切割

識(shí)別驗(yàn)證碼的重點(diǎn)和難點(diǎn)就在于能否成功分割字符,對(duì)于顏色相同又完全粘連的字符,比如google的驗(yàn)證碼,目前是沒(méi)法做到5%以上的識(shí)別率的。不過(guò)google的驗(yàn)證碼基本上人類也只有30%的識(shí)別率。本文使用的驗(yàn)證碼例子比較容易識(shí)別??梢圆挥们懈?,有關(guān)圖片切割的方法參見這篇博客:http://www.cnblogs.com/apexchu/p/4231041.html

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

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

鏈接:https://code.google.com/p/pytesser/

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

4.1 pytesser安裝

如果沒(méi)有安裝PIL,請(qǐng)到這里下載安裝:http://www.pythonware.com/products/pil/

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

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

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

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

4.2 調(diào)用pytesser識(shí)別

pytesser提供了兩種識(shí)別圖片方法,通過(guò)image對(duì)象和圖片地址,代碼判斷如下:

fromPIL importImage

frompytesser importpytesser

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

printpytesser.image_file_to_string('7039.jpg')

printpytesser.image_to_string(image)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84627

原文標(biāo)題:20行 Python 代碼實(shí)現(xiàn)驗(yàn)證碼識(shí)別

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    無(wú)法驗(yàn)證郵箱,總是提示驗(yàn)證碼錯(cuò)誤,驗(yàn)證碼明明是正確的。

    `無(wú)法驗(yàn)證郵箱,總是提示驗(yàn)證碼錯(cuò)誤,驗(yàn)證碼明明是正確的。是不是系統(tǒng)的bug?`
    發(fā)表于 05-12 10:41

    平臺(tái)是如何高效的破解市面上各家驗(yàn)證碼平臺(tái)的各種形式驗(yàn)證碼的?

    驗(yàn)證碼與打平臺(tái)的對(duì)抗講起。何為打平臺(tái)?打平臺(tái)的基本原理是利用人工智能技術(shù)實(shí)現(xiàn)對(duì)驗(yàn)證碼設(shè)計(jì)原
    發(fā)表于 11-01 15:21

    【國(guó)民技術(shù)N32項(xiàng)目移植】手機(jī)驗(yàn)證碼項(xiàng)目移植4--手機(jī)驗(yàn)證碼計(jì)算

    ,同時(shí)看到device_id的第4個(gè)數(shù)就是驗(yàn)證碼中的第4個(gè)數(shù)。四 在windows平臺(tái)計(jì)算驗(yàn)證碼如下圖,把同樣的TOTP算法代碼移植到到windows平臺(tái),編譯后,同一時(shí)間計(jì)算的驗(yàn)證碼
    發(fā)表于 02-24 14:45

    搜狗開放12306驗(yàn)證碼識(shí)別技術(shù)助力搶票軟件

    12306的驗(yàn)證碼,已經(jīng)擊敗了全國(guó)99%的購(gòu)票者,我已經(jīng)找不到回家的路了隨著春運(yùn)搶票高峰期來(lái)臨,12306驗(yàn)證碼識(shí)別成為用戶討論的熱點(diǎn)。日前,搜狗瀏覽器、QQ瀏覽器等應(yīng)用相繼推出搶票功能,幫助用戶秒
    發(fā)表于 10-13 16:21 ?1次下載

    多樣變換的手寫驗(yàn)證碼自動(dòng)識(shí)別算法

    提出了一種多樣變換的手寫驗(yàn)證碼自動(dòng)識(shí)別算法,對(duì)彩色驗(yàn)證碼進(jìn)行識(shí)別主要包括彩色驗(yàn)證碼的二值化、手寫字符的區(qū)域分割、同一字符的區(qū)域連接、使用卷積
    發(fā)表于 12-20 14:14 ?0次下載

    一套基于GAN的驗(yàn)證碼AI識(shí)別系統(tǒng),能在0.5秒之內(nèi)識(shí)別驗(yàn)證碼

    近日,英國(guó)蘭卡斯特大學(xué)、中國(guó)西北大學(xué)、北京大學(xué)的計(jì)算機(jī)科學(xué)家們共同開發(fā)了一種AI系統(tǒng),能夠在短短0.5秒內(nèi)識(shí)別出多種驗(yàn)證碼。該系統(tǒng)已在不同的33個(gè)驗(yàn)證碼系統(tǒng)中進(jìn)行了成功測(cè)試,其中11個(gè)來(lái)自世界上最受歡迎的一些網(wǎng)站,包括eBay和
    的頭像 發(fā)表于 12-16 10:02 ?5033次閱讀

    以一個(gè)真實(shí)網(wǎng)站的驗(yàn)證碼為例,實(shí)現(xiàn)了基于一下KNN的驗(yàn)證碼識(shí)別

    很多網(wǎng)站登錄都需要輸入驗(yàn)證碼,如果要實(shí)現(xiàn)自動(dòng)登錄就不可避免的要識(shí)別驗(yàn)證碼。本文以一個(gè)真實(shí)網(wǎng)站的驗(yàn)證碼為例,
    的頭像 發(fā)表于 12-24 17:27 ?7775次閱讀

    如何使用Python機(jī)器學(xué)習(xí)解決驗(yàn)證碼的資料說(shuō)明

    寫爬蟲有一個(gè)繞不過(guò)去的問(wèn)題就是驗(yàn)證碼,現(xiàn)在驗(yàn)證碼分類大概有4種: 圖像類 滑動(dòng)類 點(diǎn)擊類 語(yǔ)音類
    的頭像 發(fā)表于 05-03 13:43 ?2306次閱讀

    驗(yàn)證碼層出不窮?試試這個(gè)自動(dòng)跳過(guò)驗(yàn)證碼的工具

    目前網(wǎng)絡(luò)上越來(lái)越多使用驗(yàn)證碼了,驗(yàn)證碼的本意是阻止機(jī)器刷流量擠占服務(wù)器資源,這本來(lái)無(wú)可厚非;但是驗(yàn)證碼已經(jīng)變得越來(lái)越過(guò)分,別說(shuō)機(jī)器人了,連人也經(jīng)常沒(méi)法辨認(rèn)!這就相當(dāng)煩了,特別是被廣泛使用更多
    的頭像 發(fā)表于 11-15 10:42 ?5958次閱讀

    爬蟲實(shí)現(xiàn)目標(biāo)網(wǎng)站驗(yàn)證碼登陸

    在爬蟲訪問(wèn)目標(biāo)網(wǎng)站的過(guò)程中,很多網(wǎng)站為了避免被惡意訪問(wèn),需要設(shè)置驗(yàn)證碼登錄,這樣是為了避免非人類的訪問(wèn)。今天我們學(xué)習(xí)下如何使用Python爬蟲實(shí)現(xiàn)驗(yàn)證碼登錄并且將生成的
    發(fā)表于 12-11 15:27 ?2427次閱讀

    帶帶弟弟OCR通用驗(yàn)證碼識(shí)別SDK免費(fèi)開源版

    在使用爬蟲登錄網(wǎng)站的時(shí)候,經(jīng)常輸入用戶名和密碼后會(huì)遇到驗(yàn)證碼,簡(jiǎn)單一點(diǎn)的有字母驗(yàn)證碼,復(fù)雜一點(diǎn)的有滑塊驗(yàn)證碼,點(diǎn)選文章和點(diǎn)選圖片驗(yàn)證碼。這些都是爬蟲中的老大難問(wèn)題,今天介紹一款通用
    的頭像 發(fā)表于 03-30 17:26 ?4662次閱讀

    burpsuit驗(yàn)證碼爆破教程

    填寫驗(yàn)證碼識(shí)別接口,這里有百度的可以用,但是有次數(shù)限制,需要修改為自己的token,不推薦,但是如果想使用,只需要在接口的大框框里右鍵--模板庫(kù)--百度,點(diǎn)擊,就會(huì)自動(dòng)填充百度ocr的模板
    的頭像 發(fā)表于 05-11 11:09 ?1598次閱讀
    burpsuit<b class='flag-5'>驗(yàn)證碼</b>爆破教程

    驗(yàn)證碼到底在驗(yàn)證啥?聊一聊驗(yàn)證碼是怎么為難我們?nèi)祟惖?/a>

    在文章開頭,老狐先給大家玩一個(gè)驗(yàn)證碼的游戲,猜出圖中驗(yàn)證碼字母。
    的頭像 發(fā)表于 08-12 10:25 ?2098次閱讀
    <b class='flag-5'>驗(yàn)證碼</b>到底在<b class='flag-5'>驗(yàn)證</b>啥?聊一聊<b class='flag-5'>驗(yàn)證碼</b>是怎么為難我們?nèi)祟惖? />    </a>
</div>                            <div   id=

    Java 中驗(yàn)證碼的使用

    今天我們講一下在 Java 中驗(yàn)證碼的使用。 驗(yàn)證碼生成 本效果是利用easy-captcha工具包實(shí)現(xiàn),首先需要添加相關(guān)依賴到pom.xml中,代碼如下: com .github.w
    的頭像 發(fā)表于 09-25 11:11 ?1027次閱讀
    Java 中<b class='flag-5'>驗(yàn)證碼</b>的使用

    SpringBoot分布式驗(yàn)證碼登錄方案

    傳統(tǒng)的項(xiàng)目大都是基于session交互的,前后端都在一個(gè)項(xiàng)目里面,比如傳統(tǒng)的SSH項(xiàng)目或者一些JSP系統(tǒng),當(dāng)前端頁(yè)面觸發(fā)到獲取驗(yàn)證碼請(qǐng)求,可以將驗(yàn)證碼里面的信息存在上下文中,所以登錄的時(shí)候只需要 用戶名、密碼、
    的頭像 發(fā)表于 10-12 17:34 ?719次閱讀
    SpringBoot分布式<b class='flag-5'>驗(yàn)證碼</b>登錄方案
    RM新时代网站-首页