利用深度學習識別滑動驗證碼缺口位置


做爬蟲的同學肯定或多或少會為驗證碼苦惱過,在最初的時候,大部分驗證碼都是圖形驗證碼。但是前幾年「極驗」驗證碼橫空出世,行為驗證碼變得越來越流行,其中之一的形式便是滑塊驗證碼。

滑塊驗證碼是怎樣的呢?如圖所示,驗證碼是一張矩形圖,圖片左側會出現一個滑塊,右側會出現一個缺口,下側會出現一個滑軌。左側的滑塊會隨着滑軌的拖動而移動,如果能將左側滑塊正好滑動到右側缺口處,就算完成了驗證。

由於這種驗證碼交互形式比較友好,且安全性、美觀度上也會更高,像這種類似的驗證碼也變得越來越流行。另外不僅僅是「極驗」,其他很多驗證碼服務商也推出了類似的驗證碼服務,如「網易易盾」等,上圖所示的就是「網易易盾」的滑動驗證碼。

沒錯,確實這種滑動驗證碼的出現讓很多網站變得更安全。但是做爬蟲的可就苦惱了,如果采用自動化的方法來繞過這種滑動驗證碼,關鍵部分在於以下兩點:

  • 找出目標缺口的位置。
  • 模擬人的滑動軌跡將滑塊滑動到缺口處。

那么問題來了,第一步怎么做呢?

我們怎么識別目標缺口到底在圖片的哪個地方?大家可能想到的答案有:

  • 直接手工一把梭。
  • 利用圖像處理算法檢測缺口處特征。
  • 對接打碼平台,獲取缺口位置。

另外對於極驗來說,之前還有一種方法來識別缺口,那就是對比原圖和缺口圖的不同之處,通過遍歷像素點來找出缺口的位置,但這種方法就比較投機了。如果換家驗證碼服務商,不給我們原圖,我們就無從比較計算了。

總之,我們的目標就是輸入一張圖,輸出缺口的的位置。

上面的方法呢,要么費時費錢、要么准確率不高。那還有沒有其他的解決方案呢?

當然有。

現在深度學習這么火,基於深度學習的圖像識別技術已經發展得比較成熟了。那么我們能不能利用它來識別缺口位置呢?

答案是,沒問題,我們只需要將這個問題歸結成一個深度學習的「目標檢測」問題就好了。

聽到這里,現在可能有的同學已經望而卻步了,深度學習?我一點基礎都沒有呀,咋辦?

不用擔心,本節介紹的內容全程沒有一行代碼,不需要任何深度學習基礎,我們只需要動動手點一點就能搭建一個識別驗證碼缺口的深度學習的模型。

這么神奇?是的,那么本節我就帶大家來實現一下吧。

目標檢測

首先在開始之前簡單說下目標檢測。什么叫目標檢測?顧名思義,就是把我們想找的東西找出來。比如給一張「狗」的圖片,如圖所示:

我們想知道這只狗在哪,它的舌頭在哪,找到了就把它們框選出來,這就是目標檢測。

經過目標檢測算法處理之后,我們期望得到的圖片是這樣的:

可以看到這只狗和它的舌頭就被框選出來了,這就完成了一個不錯的目標檢測。

現在比較流行的目標檢測算法有 R-CNN、Fast R-CNN、Faster R-CNN、SSD、YOLO 等,感興趣同學的可以了解一下,當然看不懂也沒有什么影響。

另外再提一個地方,不懂深度學習的同學可以看看,懂的直接跳過下面一段。

我們既然要搭建一個模型來實現一個目標檢測算法,那模型怎么知道我們究竟想識別個什么東西?就比如上圖,模型咋知道我們想識別的是狗而不是草,是舌頭而不是鼻子。這是因為,既然叫深度學習,那得有學習的東西。所以,搭建一個深度學習模型需要訓練數據。啥也不告訴模型,模型從哪里去學習?所以,我們得預先有一些標注好位置的圖片供模型去學習(訓練),比如准備好多張狗的圖片和狗的輪廓標注位置,模型在訓練過程中會自動學習到圖片和標注位置的關系。模型訓練好了之后,我們給模型一個沒有見過的類似的狗的圖,模型也能找出來目標的位置了。

所以,遷移到驗證碼缺口識別這個任務上來,我們第一步就是給模型提供一些訓練數據,訓練數據就包括驗證碼的圖片和缺口的位置標注輪廓信息。

好,既然如此,我們第一步就得准備一批驗證碼數據供標注和訓練了。

准備訓練數據

這里我用的是網易易盾的驗證碼,鏈接為:http://dun.163.com/trial/jigsaw

我寫爬蟲爬下來了一些驗證碼的圖,具體怎么爬的就不再贅述了,簡單粗暴直接干就行了。

爬下來的驗證碼圖類似這樣子:

我們不需要滑軌的部分,只保留驗證碼本身的圖片和上面的兩個缺口就行了,下面是我准備的一些驗證碼圖:

我爬了大約上千張吧,越多越好。當然對於今天的任務來說,其實幾十上百張已經就夠了。

標注缺口位置

下一步就是把缺口的位置標注出來了。想一想這一步又不太好辦,我難道還得每張圖片量一量嗎?這費了勁了,那咋整啊?

很多同學可能到了這一步就望而卻步了,更別提后面的搭建模型訓練了。

但我們在文章開頭說了,我們不需要寫一行代碼,點一點就能把模型搭建好。怎么做到的呢?我們可以借助於一些平台和工具。

在這里就要請出今天的主角—— ModelArts 了,這是我發現的華為雲的一個深度學習平台,借助它我們可以完成數據標注、模型訓練、模型部署三個步驟,最重要的是,我們不需要寫代碼,只需要點來點去就可以完成了。

讓我們進入 ModelArts 來看看:

它已經內置了一些深度學習模型,包括圖像分類、物體檢測、預測分析等等,我們可以直接利用它們來快速搭建屬於自己的模型。

在這里我們就切換到「自動學習」的選項卡,創建一個物體檢測的項目。

進入項目里面,可以看到最上面會顯示三個步驟:

  • 數據標注
  • 模型訓練
  • 部署上線

也就是說,經過這三步,我們就可以搭建和部署一個深度學習模型。

頁面如圖所示:

那我們先來第一步——數據標注,這里我把一些驗證碼的圖上傳到頁面中,在這里我上傳了 112 張圖:

上傳完畢之后我們可以點擊每一張圖片進行標注了,這個平台提供了非常方便的標注功能,只需要鼠標拖拽個輪廓就完成了,112 張圖標注完也就幾分鍾,標注的時候就框選這么個輪廓就行了,如圖所示:

在這里邊界需要把整個缺口的圖全框選出來,其中上邊界和右邊界和標注框相切即可,總之確保標注框正好把缺口圖框選出來就行,平台會自動保存和記錄標注的像素點位置。

標注完一個,它會提示要添加一個名字,我在這里添加的名字叫「邊界」,可以隨意指定。

等全部標注完畢,點擊「保存並返回」按鈕即可。

訓練

好,標注完了我們就可以開始訓練了。我們在這里不需要寫任何的代碼,因為平台已經給我們寫好了,內置了目標檢測的深度學習模型,我們只需要提供數據訓練就行了,如圖所示:

在這里,我們只需要設置一下「最大訓練時長」就好了,這么點圖片其實幾分鍾就能訓練完了,「最大訓練時長」隨意填寫即可,最小不小於 0.05,填寫完了之后就可以點擊「開始訓練」按鈕訓練了。

等幾分鍾,就會訓練完成了,可以看到類似如圖的頁面:

這里顯示了模型的各個參數和指標。

是的,你沒看錯,我們沒有寫任何代碼,只過了幾分鍾,模型就已經訓練完,並且可以部署上線了。

部署測試

然后進行下一步,部署上線,直接點擊左上角的部署按鈕即可:

過一會兒, 部署成功之后便可以看到類似這樣的界面:

在這里我們可以上傳任意的驗證碼圖片進行測試,比如我隨意上傳一張沒有標注過的驗證碼圖,然后它會給我們展示出預測結果,如圖所示:

可以看到,它就把缺口的位置檢測出來了,同時在右側顯示了具體的像素值和置信度:

 1 {
 2     "detection_classes": [
 3         "邊界"
 4     ],
 5     "detection_boxes": [
 6         [
 7             16.579784393310547,
 8             331.89569091796875,
 9             124.46369934082031,
10             435.0449523925781
11         ]
12     ],
13     "detection_scores": [
14         0.9999219179153442
15     ]
16 }

是的,檢測的結果還是比較准確的。

有了這個結果,我們下一步模擬滑動到標注結果的左邊界位置就好了!具體的模擬過程這里就不展開講了。 另外平台同時還提供了模型部署后的 URL 接口和接口調用指南,也就是我們只需要向接口上傳任意的驗證碼圖片,就可以得到缺口的位置了!調用方式可以見:https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0063.html

嗯,就是這樣,我們通過非常簡單的操作,不需要任何代碼,幾分鍾就搭建了一個深度學習模型,准確率也還不錯。

當然這里我們只標注了 100 多張,標注得越多,標注得越精確,模型的准確率也會越高的。

以上便是利用 ModelArts 搭建滑動驗證碼缺口識別模型的方法,十分簡潔高效。大家感興趣可以了解下 ModelArts:https://www.huaweicloud.com/product/modelarts.html,謝謝。

HDC.Cloud 華為開發者大會2020 即將於2020年2月11日-12日在深圳舉辦,是一線開發者學習實踐鯤鵬通用計算、昇騰AI計算、數據庫、區塊鏈、雲原生、5G等ICT開放能力的最佳舞台。

歡迎報名參會https://www.huaweicloud.com/HDC.Cloud.html?utm_source=&utm_medium=&utm_campaign=&utm_content=techcommunity

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM