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

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

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

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

利用機器學習在15分鐘內(nèi)破解驗證碼,再也不擔心買不到12306的票啦

機器學習算法與人工智能 ? 來源:未知 ? 作者:楊鑫 ? 2018-03-06 17:00 ? 次閱讀

每個人都討厭驗證碼——只有輸入了那些討厭的圖片上的文本,才能訪問網(wǎng)站。驗證碼的設計是為了防止計算機自動填寫表格,驗證你是一個真實的“人”。但隨著深度學習計算機視覺的興起,現(xiàn)在他們往往容易被擊敗。

我一直在讀一本由AdrianRosebrock所寫的書《Deep Learning for Computer Vision with Python》(Python計算機視覺深度學習)。在這本書中,Adrian回顧了如何通過機器學習破解e – zpass紐約網(wǎng)站上的驗證碼系統(tǒng):

Adrian沒有訪問生成驗證碼圖像的應用程序的源代碼。為了破解這個系統(tǒng),他不得不下載數(shù)百個示例圖像,并手動解決它們以訓練他的系統(tǒng)。

但是,如果我們想要破解一個開源的驗證碼系統(tǒng),我們?nèi)ツ睦镌L問源代碼呢?

我訪問了WordPress.org插件登記網(wǎng)站,并搜索了“CAPTCHA”。上面的結果被稱為“Really Simple CAPTCHA”,并且有超過100萬的安裝量:

WordPress.org插件登記地址:https://wordpress.org/plugins/

最棒的是,這里有它的源代碼!因為有生成驗證碼的源代碼,所以這應該很容易被破解。為了讓事情變得更有挑戰(zhàn)性,讓我們給自己一個時間限制。我們能在15分鐘內(nèi)徹底破解這個驗證碼系統(tǒng)嗎?讓我們試一試!

重要提示:這絕不是批評“Really Simple CAPTCHA”插件或其作者。插件作者自己說它已經(jīng)不安全了,建議你使用其他的東西。這只是一個有趣并且快速的技術挑戰(zhàn)。但如果你是100萬用戶之一,或許你應該有所防備了:)

挑戰(zhàn)

首先,讓我們需要知道 Really Simple CAPTCHA生成什么樣的圖像。在演示網(wǎng)站上,我們看到:

Really Simple CAPTCHA地址:https://wordpress.org/plugins/really-simple-captcha/

演示驗證碼圖片

驗證碼圖像看起來是四個字母。讓我們在PHP源代碼中驗證這一點:

public function __construct() { /* Characters available in images */ $this->chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; /* Length of a word in an image */ $this->char_length = 4; /* Array of fonts. Randomly picked up per character */ $this->fonts = array( dirname( __FILE__ ) . '/gentium/GenBkBasR.ttf', dirname( __FILE__ ) . '/gentium/GenBkBasI.ttf', dirname( __FILE__ ) . '/gentium/GenBkBasBI.ttf', dirname( __FILE__ ) . '/gentium/GenBkBasB.ttf', );

是的,它生成了4個字母的驗證碼,使用4種不同字體的隨機組合。我們可以看到,在代碼中它從不使用“O”或“I”,以此避免用戶的混淆。這就給我們留下了32個可能的字母和數(shù)字。

到目前為止的時間:2分鐘

我們的工具集

在我們進一步討論之前,我們先來討論一下解決這個問題需要的工具:

Python 3

Python是一種很有趣的編程語言,包含很好的機器學習和計算機視覺庫。

OpenCV

OpenCV是一個流行的計算機視覺和圖像處理框架。我們將使用OpenCV來處理驗證碼圖像。它有一個Python API,因此我們可以直接在Python中使用。

Keras

Keras是用Python編寫的深度學習框架。它使得定義、訓練和使用具有最小編碼的深度神經(jīng)網(wǎng)絡變得很容易。

TensorFlow

TensorFlow是谷歌的機器學習庫。我們將在Keras中編碼,但是Keras并沒有真正實現(xiàn)神經(jīng)網(wǎng)絡邏輯本身。相反,它使用谷歌在幕后的TensorFlow庫來完成繁重的任務。

好了,回到挑戰(zhàn)。

創(chuàng)建數(shù)據(jù)集

訓練任何機器學習系統(tǒng),都需要訓練數(shù)據(jù)。要破解驗證碼系統(tǒng),我們需要這樣的訓練數(shù)據(jù):

我們有了WordPress插件的源代碼,就可以修改它來保存10000個驗證碼圖像,以及每個圖像的預期答案。

在對代碼進行了幾分鐘的破解并添加了一個簡單的for循環(huán)之后,我有了一個包含訓練數(shù)據(jù)的文件夾—10,000個PNG文件,將正確的答案作為其文件名:

這是唯一的我不給你示例代碼的部分。我們這樣做是為了教學,我不希望你真的去垃圾郵件網(wǎng)站。但是我會給你我在最后生成的10000張照片,這樣你就可以復制我的結果。

到目前為止的時間:5分鐘

簡化問題

現(xiàn)在我們有了訓練數(shù)據(jù),我們可以直接用它來訓練神經(jīng)網(wǎng)絡:

如果有足夠的訓練數(shù)據(jù),這種方法可能有效——但是我們可以使問題變得簡單得多。問題越簡單,訓練數(shù)據(jù)越少,我們解決需要的計算力就越少。我們畢竟只有15分鐘!

幸運的是,驗證碼圖像通常只由四個字母組成。如果我們能把圖像分割開來,這樣每個字母都是一個單獨的圖像,那么我們只需訓練神經(jīng)網(wǎng)絡識別單個字母:

我沒有時間去瀏覽10000個訓練圖像,并且用Photoshop將它們手工分割成單獨的圖像。這需要幾天的時間,但我只剩下10分鐘了。我們不能將圖像分割成4個等分大小的塊,因為驗證碼隨機將字母放置在不同的水平位置,如下圖所示:

每個圖像中的字母都是隨機放置的,使圖像分割變得更加困難。

幸運的是,我們?nèi)匀豢梢詫崿F(xiàn)自動化。在圖像處理中,我們經(jīng)常需要檢測具有相同顏色的像素的“blob”。這些連續(xù)像素點的邊界稱為輪廓。OpenCV有一個內(nèi)置的findContours()函數(shù),我們可以用它來檢測這些連續(xù)區(qū)域。

我們將從一個原始的驗證碼圖像開始:

然后我們將圖像轉換成純黑白像素點(這稱為色彩閾值法),這樣就很容易找到連續(xù)區(qū)域的輪廓邊界:

接下來,我們將使用OpenCV的findContours()函數(shù)來檢測圖像中包含相同顏色連續(xù)像素塊的分離部分:

接著把每個區(qū)域作為一個單獨的圖像文件保存。因為我們知道每個圖像應該包含從左到右的四個字母,所以我們可以用這些知識來標記我們保存的字母。我們按這個順序把它們存起來,并用相應的字母名稱來保存每一個圖像字母。

但是等一下—我發(fā)現(xiàn)問題了!有時驗證碼有這樣重疊的字母:

這意味著我們最終將提取將兩個字母拼湊在一起的區(qū)域:

如果我們不處理這個問題,我們就會產(chǎn)生糟糕的訓練數(shù)據(jù)。我們需要解決這個問題,這樣我們就不會偶然地讓機器將這兩個squashed – together字母識別為一個字母。

有一個簡單的竅門:如果一個區(qū)域的寬比它的高度大,那就意味著我們可能有兩個字母擠壓在一起了。在這種情況下,我們可以把這兩個字母放在中間,把它分成兩個獨立的字母:

現(xiàn)在我們有了一種提取單個字母的方法,讓我們在所有的驗證碼圖像中運行它。目的是收集每個字母的不同變體。我們可以把每個字母都保存在自己的文件夾里。

這是我摘取所有字母后,“W”文件夾的圖片:

到目前為止的時間:10分鐘

構建并訓練神經(jīng)網(wǎng)絡

因為我們只需要識別單個字母的圖像,所以并需要一個非常復雜的神經(jīng)網(wǎng)絡結構。識別字母比識別像貓和狗這樣的復雜圖像要容易得多。

我們將使用一個簡單的卷積神經(jīng)網(wǎng)絡架構,它有兩個卷積層和兩個完全連通的層:

定義這個神經(jīng)網(wǎng)絡架構只需要使用Keras的幾行代碼:

# Build the neural network! model = Sequential() # First convolutional layer with max pooling model.add(Conv2D(20, (5, 5), padding="same", input_shape=(20, 20, 1), activation="relu")) model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) # Second convolutional layer with max pooling model.add(Conv2D(50, (5, 5), padding="same", activation="relu")) model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) # Hidden layer with 500 nodes model.add(Flatten()) model.add(Dense(500, activation="relu")) # Output layer with 32 nodes (one for each possible letter/number we predict) model.add(Dense(32, activation="softmax")) # Ask Keras to build the TensorFlow model behind the scenes model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

現(xiàn)在我們可以運行它了。

# Train the neural network model.fit(X_train, Y_train, validation_data=(X_test, Y_test), batch_size=32, epochs=10, verbose=1)

經(jīng)過訓練數(shù)據(jù)集10次之后,我們達到了接近100%的準確度。我們應該能夠在任何我們需要的時候自動繞過這個驗證碼。

時間過了:15分鐘

使用訓練的模型來以解決驗證碼

現(xiàn)在我們有了一個經(jīng)過訓練的神經(jīng)網(wǎng)絡,用它來破解驗證碼是很簡單的:

1. 從WordPress插件的網(wǎng)站上獲取真正的驗證碼圖像。

2. 用我們用來創(chuàng)建訓練數(shù)據(jù)集的方法將驗證碼圖像分割成四個不同的字母圖像。

3. 讓我們的神經(jīng)網(wǎng)絡對每個字母圖像做一個單獨的預測。

4. 用四個預測字母作為驗證碼的答案。

下面是我們的模型如何解碼真實的驗證碼:

或從命令行:

試一下

如果你想親自嘗試,你可以在這里獲取代碼。它包括10,000個示例圖像和本文中每個步驟的所有代碼。班闊說明如何運行模型的README.md文件。

代碼地址:https://s3-us-west-2.amazonaws.com/mlif-example-code/solving_captchas_code_examples.zip

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

    關注

    66

    文章

    8473

    瀏覽量

    133745
  • 安全驗證
    +關注

    關注

    0

    文章

    7

    瀏覽量

    9325
  • 機器學習技術

    關注

    0

    文章

    7

    瀏覽量

    3010
  • 機器學習算法

    關注

    2

    文章

    47

    瀏覽量

    6561

原文標題:驗證碼,再見!利用機器學習在15分鐘內(nèi)破解驗證碼

文章出處:【微信號:machinelearningai,微信公眾號:機器學習算法與人工智能】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    10分鐘上手寫代碼,LuatOS協(xié)程輕松掌握!

    10分鐘學會LuatOS協(xié)程,從此你的程序也能像通勤族利用碎片時間一樣游刃有余。現(xiàn)在就去動手試一試,開啟異步編程新體驗! 寫給第一次聽說協(xié)程的你?: 別怕!協(xié)程不是復雜概念,看完這篇,10分鐘就能
    的頭像 發(fā)表于 04-10 15:18 ?84次閱讀
    10<b class='flag-5'>分鐘</b>上手寫代碼,LuatOS協(xié)程輕松掌握!

    二維掃描模組,取機集成條碼識別解決方案的關鍵利器

    在當今數(shù)字化時代,人們對于便捷、高效的生活體驗有著越來越高的追求。票務領域,傳統(tǒng)取機的諸多問題逐漸凸顯,如取機卡頓、漏掃等情況,給用戶帶來了極大的困擾。而二維掃描模組(屏幕掃碼
    的頭像 發(fā)表于 03-19 15:24 ?127次閱讀
    二維<b class='flag-5'>碼</b>掃描模組,取<b class='flag-5'>票</b>機集成條碼識別解決方案的關鍵利器

    傳統(tǒng)機器學習方法和應用指導

    在上一篇文章中,我們介紹了機器學習的關鍵概念術語。本文中,我們會介紹傳統(tǒng)機器學習的基礎知識和多種算法特征,供各位老師選擇。 01 傳統(tǒng)
    的頭像 發(fā)表于 12-30 09:16 ?824次閱讀
    傳統(tǒng)<b class='flag-5'>機器</b><b class='flag-5'>學習</b>方法和應用指導

    LDC1614EVMUPLOAD固件過程中意外斷開連接,然后就再也不能正常連接了,怎么處理?

    請教一下LDC1614EVMUPLOAD固件過程中意外斷開連接,然后就再也不能正常連接了。請問應該如何處理
    發(fā)表于 12-27 06:09

    信號板上面的ADS1255開機不到1分鐘就發(fā)燙,為什么?

    我現(xiàn)在遇到一個問題,信號板上面的ADS1255開機不到1分鐘就發(fā)燙,我不知道是什么原因,可能是我原理圖有問題也可能是PCB布局的問題,現(xiàn)在我把原理圖貼上,還請幫我一起查下原因,謝謝了啊。AVDD
    發(fā)表于 12-03 06:32

    什么是機器學習?通過機器學習方法能解決哪些問題?

    來源:Master編程樹“機器學習”最初的研究動機是讓計算機系統(tǒng)具有人的學習能力以便實現(xiàn)人工智能。因為沒有學習能力的系統(tǒng)很難被認為是具有智能的。目前被廣泛采用的
    的頭像 發(fā)表于 11-16 01:07 ?698次閱讀
    什么是<b class='flag-5'>機器</b><b class='flag-5'>學習</b>?通過<b class='flag-5'>機器</b><b class='flag-5'>學習</b>方法能解決哪些問題?

    eda機器學習中的應用

    機器學習項目中,數(shù)據(jù)預處理和理解是成功構建模型的關鍵。探索性數(shù)據(jù)分析(EDA)是這一過程中不可或缺的一部。 1. 數(shù)據(jù)清洗 數(shù)據(jù)清洗 是機器
    的頭像 發(fā)表于 11-13 10:42 ?639次閱讀

    冷機啟動板卡時,LMX2572鎖定時間2分鐘以上,為什么?

    冷機啟動板卡時,LMX2572鎖定時間2分鐘以上。當LMX2572鎖定后重新啟動,鎖定時間1-3秒內(nèi)
    發(fā)表于 11-11 08:09

    OPA657利用TINA進行仿真時找不到光電探測元件怎么解決?

    新手,利用TINA進行仿真時找不到光電探測元件,實在百度不到,麻煩各位大佬指點一下,麻煩
    發(fā)表于 08-19 07:25

    波型輸出正常,但工作不到分鐘時間TPA3221總是無故燒毀,為什么?

    波型輸出正常,但工作不到分鐘時間TPA3221總是無故燒毀,絕對不是過流或過熱。
    發(fā)表于 08-14 07:50

    【「時間序列與機器學習」閱讀體驗】+ 簡單建議

    細微差異導致的錯誤,這無疑增加了調(diào)試的難度。因此,我個人建議,書中若能在關鍵代碼段旁邊添加二維,鏈接到可在線運行或驗證的代碼環(huán)境,將極大地提升讀者的學習效率和體驗。這樣一來,讀者不僅可以快速
    發(fā)表于 08-12 11:21

    機器學習中的交叉驗證方法

    機器學習中,交叉驗證(Cross-Validation)是一種重要的評估方法,它通過將數(shù)據(jù)集分割成多個部分來評估模型的性能,從而避免過擬合或欠擬合問題,并幫助選擇最優(yōu)的超參數(shù)。本文將
    的頭像 發(fā)表于 07-10 16:08 ?2154次閱讀

    如何理解機器學習中的訓練集、驗證集和測試集

    理解機器學習中的訓練集、驗證集和測試集,是掌握機器學習核心概念和流程的重要一步。這三者不僅構成了模型學習
    的頭像 發(fā)表于 07-10 15:45 ?5718次閱讀

    復用CDM的原理及其相關技術詳解

    復用是用一組包含互相正交的碼字的組攜帶多路信號。采用同一波長的擴頻序列,頻譜資源利用率高,與WDM結合,可以大大增加系統(tǒng)容量。
    的頭像 發(fā)表于 05-01 17:09 ?4161次閱讀
    <b class='flag-5'>碼</b><b class='flag-5'>分</b>復用CDM的原理及其相關技術詳解

    谷歌為iOS用戶提供&quot;快速刪除&quot;功能,快速清理15分鐘瀏覽記錄

    當前,iOS版Chrome瀏覽器提供“過去1小時”、“過去24小時”、“過去7天”、“過去4周”及“無限制”等多種清除瀏覽數(shù)據(jù)選項,現(xiàn)已細化至“15分鐘”。
    的頭像 發(fā)表于 04-23 14:10 ?6490次閱讀
    主站蜘蛛池模板: h在线观看网站 | 在线视频影院 | 四虎影院网址大全 | 三级完整在线观看高清视频 | xxxx黄色| 日本免费黄色 | 一级一片一a一片 | 最新黄色大片 | 在线亚洲色图 | 高清人人天天夜夜曰狠狠狠狠 | 夜夜春夜夜夜夜猛噜噜噜噜噜 | 色国产精品 | 你懂的 在线观看 | 免费网站黄 | 亚洲成a人片8888kkkk | 日本www高清 | 狼干综合 | 天天在线影院 | xxxxxx日本老师hd68| 日本三级免费看 | 啪啪中文字幕 | 久久精品9 | 三级四级特黄在线观看 | 欧美日本免费 | 欧美在线视频免费 | 国产女在线 | 奇米色影院 | 色噜噜狠狠色综合欧洲selulu | 清朝荒淫牲艳史在线播放 | 天天天天干 | 午夜免费视频观看在线播放 | 乱码精品一区二区三区 | 欧美影院一区二区三区 | 欧美97色| 久久久久女人精品毛片九一 | 色播五月综合 | 久久伊人影视 | 久草视频在线免费看 | 日韩久久精品视频 | 又粗又大又爽又色又过瘾视频 | 欧美在线你懂的 |