在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python 只需20行代碼即可實現驗證碼識別

馬哥Linux運維 ? 來源:未知 ? 作者:李建兵 ? 2018-03-16 15:23 ? 次閱讀

一、探討

識別圖形驗證碼可以說是做爬蟲的必修課,涉及到計算機圖形學,機器學習機器視覺人工智能等等高深領域……

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

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

支持向量機(SVM)

OpenCV

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

Python Image Library

二、PIL安裝

PIL: Python Imaging Library, 是Python平臺的圖像處理標準庫,功能非常強大。

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

$sudo apt-get install python-imaging

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

$ sudo easy_install PIL

Windos平臺可以直接去PIL官網下載exe安裝包。http://pythonware.com/products/pil/

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

三、一般思路

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

1、圖片降噪

2、圖片切割

3、圖像文本輸出

3.1 圖片降噪

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

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

驗證碼圖片7039.jpg:

1、導入Image包,打開圖片:

fromPIL importImage

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

2、把彩色圖像轉化為灰度圖像。RBG轉化到HSI彩色空間,采用I分量:

imgry = im.convert('L')

imgry.show()

灰度看起來是這樣的:

3、二值化處理

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

把像素點大于閾值的設置,1,小于閾值的設置為0。生成一張查找表,再調用point()進行映射。

threshold = 140

table = []

foriinrange(256):

ifi < threshold:

table.append(0)

else:

table.append(1)

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

out.show()

處理結果看起來是這樣的:

3.2 圖片切割

識別驗證碼的重點和難點就在于能否成功分割字符,對于顏色相同又完全粘連的字符,比如google的驗證碼,目前是沒法做到5%以上的識別率的。不過google的驗證碼基本上人類也只有30%的識別率。本文使用的驗證碼例子比較容易識別。可以不用切割,有關圖片切割的方法參見這篇博客:http://www.cnblogs.com/apexchu/p/4231041.html

四、利用pytesser模塊實現識別

pytesser是谷歌OCR開源項目的一個模塊,在python中導入這個模塊即可將圖片中的文字轉換成文本。

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

pytesser 調用了 tesseract。在python中調用pytesser模塊,pytesser又用tesseract識別圖片中的文字。

4.1 pytesser安裝

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

安裝pytesser,下載地址:http://code.google.com/p/pytesser/ ,下載后直接將其解壓到項目代碼下,或者解壓到python安裝目錄的Libsite-packages下,并將其添加到path環境變量中,不然在導入模塊時會出錯。

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

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

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

4.2 調用pytesser識別

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

fromPIL importImage

frompytesser importpytesser

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

printpytesser.image_file_to_string('7039.jpg')

printpytesser.image_to_string(image)

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68617
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84692

原文標題:20行 Python 代碼實現驗證碼識別

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    無法驗證郵箱,總是提示驗證碼錯誤,驗證碼明明是正確的。

    `無法驗證郵箱,總是提示驗證碼錯誤,驗證碼明明是正確的。是不是系統的bug?`
    發表于 05-12 10:41

    平臺是如何高效的破解市面上各家驗證碼平臺的各種形式驗證碼的?

    驗證碼與打平臺的對抗講起。何為打平臺?打平臺的基本原理是利用人工智能技術實現驗證碼設計原
    發表于 11-01 15:21

    【國民技術N32項目移植】手機驗證碼項目移植4--手機驗證碼計算

    ,同時看到device_id的第4個數就是驗證碼中的第4個數。四 在windows平臺計算驗證碼如下圖,把同樣的TOTP算法代碼移植到到windows平臺,編譯后,同一時間計算的驗證碼
    發表于 02-24 14:45

    搜狗開放12306驗證碼識別技術助力搶票軟件

    12306的驗證碼,已經擊敗了全國99%的購票者,我已經找不到回家的路了隨著春運搶票高峰期來臨,12306驗證碼識別成為用戶討論的熱點。日前,搜狗瀏覽器、QQ瀏覽器等應用相繼推出搶票功能,幫助用戶秒
    發表于 10-13 16:21 ?1次下載

    多樣變換的手寫驗證碼自動識別算法

    提出了一種多樣變換的手寫驗證碼自動識別算法,對彩色驗證碼進行識別主要包括彩色驗證碼的二值化、手寫字符的區域分割、同一字符的區域連接、使用卷積
    發表于 12-20 14:14 ?0次下載

    一套基于GAN的驗證碼AI識別系統,能在0.5秒之內識別驗證碼

    近日,英國蘭卡斯特大學、中國西北大學、北京大學的計算機科學家們共同開發了一種AI系統,能夠在短短0.5秒內識別出多種驗證碼。該系統已在不同的33個驗證碼系統中進行了成功測試,其中11個來自世界上最受歡迎的一些網站,包括eBay和
    的頭像 發表于 12-16 10:02 ?5041次閱讀

    以一個真實網站的驗證碼為例,實現了基于一下KNN的驗證碼識別

    很多網站登錄都需要輸入驗證碼,如果要實現自動登錄就不可避免的要識別驗證碼。本文以一個真實網站的驗證碼為例,
    的頭像 發表于 12-24 17:27 ?7778次閱讀

    如何使用Python機器學習解決驗證碼的資料說明

    寫爬蟲有一個繞不過去的問題就是驗證碼,現在驗證碼分類大概有4種: 圖像類 滑動類 點擊類 語音類
    的頭像 發表于 05-03 13:43 ?2310次閱讀

    驗證碼層出不窮?試試這個自動跳過驗證碼的工具

    目前網絡上越來越多使用驗證碼了,驗證碼的本意是阻止機器刷流量擠占服務器資源,這本來無可厚非;但是驗證碼已經變得越來越過分,別說機器人了,連人也經常沒法辨認!這就相當煩了,特別是被廣泛使用更多
    的頭像 發表于 11-15 10:42 ?5976次閱讀

    爬蟲實現目標網站驗證碼登陸

    在爬蟲訪問目標網站的過程中,很多網站為了避免被惡意訪問,需要設置驗證碼登錄,這樣是為了避免非人類的訪問。今天我們學習下如何使用Python爬蟲實現驗證碼登錄并且將生成的
    發表于 12-11 15:27 ?2430次閱讀

    帶帶弟弟OCR通用驗證碼識別SDK免費開源版

    在使用爬蟲登錄網站的時候,經常輸入用戶名和密碼后會遇到驗證碼,簡單一點的有字母驗證碼,復雜一點的有滑塊驗證碼,點選文章和點選圖片驗證碼。這些都是爬蟲中的老大難問題,今天介紹一款通用
    的頭像 發表于 03-30 17:26 ?4686次閱讀

    burpsuit驗證碼爆破教程

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

    驗證碼到底在驗證啥?聊一聊驗證碼是怎么為難我們人類的

    在文章開頭,老狐先給大家玩一個驗證碼的游戲,猜出圖中驗證碼字母。
    的頭像 發表于 08-12 10:25 ?2109次閱讀
    <b class='flag-5'>驗證碼</b>到底在<b class='flag-5'>驗證</b>啥?聊一聊<b class='flag-5'>驗證碼</b>是怎么為難我們人類的

    Java 中驗證碼的使用

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

    SpringBoot分布式驗證碼登錄方案

    傳統的項目大都是基于session交互的,前后端都在一個項目里面,比如傳統的SSH項目或者一些JSP系統,當前端頁面觸發到獲取驗證碼請求,可以將驗證碼里面的信息存在上下文中,所以登錄的時候只需要 用戶名、密碼、
    的頭像 發表于 10-12 17:34 ?726次閱讀
    SpringBoot分布式<b class='flag-5'>驗證碼</b>登錄方案
    主站蜘蛛池模板: 亚洲国产成人久久一区www| 色国产视频| 免费看黄色网| 在线观看免费视频资源| 97久久伊人精品影院| 午夜黄色一级片| 色成人综合| 澳门久久| 亚洲视频在线一区二区| 美女无遮挡拍拍拍免费视频| 怡红院黄色| 日韩中文电影| 一级不卡毛片| 国产精品福利久久| 中文字幕xxx| 一区二区视频在线| 精品国产免费人成高清| brazzers720欧美丰满| 啪啪午夜免费| 伊人久久狼人| 国产一区二区三区欧美精品| 天天躁夜夜躁狠狠躁躁88| 福利午夜最新| 狠狠色噜噜狠狠狠狠2018| 四虎永久免费地址在线网站| 久久精品综合视频| 天天综合久久久网| 男女视频在线观看| 国产一区二区三区欧美精品| 3344在线| 亚洲高清美女一区二区三区| 成人网18免费下| 精品精品国产理论在线观看| 亚洲 欧美 成人| 色婷婷一区二区三区四区成人 | 精品一区二区在线观看| 伊人电影综合网| 51久久| 啪一啪日一日| 欧美香蕉视频| 伊人网视频|