999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

深度學習下網站驗證碼的破解與防范

2019-05-24 14:13:16王培彬陳少鎮林沛聰藍汝琪熊梓韜潘志宏
電腦知識與技術 2019年11期
關鍵詞:深度模型

王培彬 陳少鎮 林沛聰 藍汝琪 熊梓韜 潘志宏

摘要:隨著互聯網的快速發展,越來越多的網站為了防止用戶利用機器人自動注冊、登錄、灌水,都采用了驗證碼自動識別技術。然而,簡易的驗證碼依然存在安全風險,為了防止網絡爬蟲或者惡意攻擊的登錄操作,本文將通過PaddlePaddle平臺進行驗證碼識別的深度學習,闡述深度學習下網站驗證碼的破解和防范。實驗結果表明:將訓練實例的驗證碼數據訓練成預測模型,使用預測模型來自動識別驗證碼中包含的內容實現驗證碼自動識別,而將驗證碼的字符位置隨機擺放,可有效防止攻擊者對圖片進行裁剪分析。

關鍵詞:驗證碼;自動識別;PaddlePaddle;深度學習;預測模型

中圖分類號:TP391 文獻標識碼:A

文章編號:1009-3044(2019)11-0031-04

Abstract:With the rapid development of the Internet , more and more websites have adopted captcha automatic identification technology in order to prevent users from using robots to automatically register , login and chatter . However , simple captchas still have security risks . In order to prevent the login operation of web crawlers or malicious attacks , this paper will carry out the deep learning of captchas identification of PaddlePaddle platform and explain the cracking and prevention of captchas under deep learning . The experimental results show that the captcha data onto the training example is trained as a prediction model , and the content contained in the captcha is automatically identified by the prediction model , while the random placement of the characters of the captcha can effectively prevent the attacker from cutting and analyzing the image .

Key words:verification code; automatic recognition; paddlepaddle; deep learning; predictive model

當下大部分網站的登錄以驗證碼作為驗證登錄,以防止網絡爬蟲或者惡意攻擊的登錄操作。隨著深度學習的不斷發展,深度學習在圖片識別上的準確率也越來越高。通過利用圖像識別技術[1],可以識別一些網站的驗證碼。我們只有了解的識別的技術原理[2],方可防止網站出現相應的惡意攻擊。

PaddlePaddle是百度研發的開源開放的深度學習平臺[3],有全面的官方支持的工業級應用模型,涵蓋自然語言處理、計算機視覺、推薦引擎等多個領域,并開放多個領先的預訓練中文模型。同時支持稠密參數和稀疏參數場景的大規模深度學習[4]并行訓練,支持千億規模參數、數百個幾點的高效并行訓練,也可提供深度學習并行技術的深度學習框架[5]。PaddlePaddle擁有多端部署能力,支持服務器端、移動端等多種異構硬件設備的高速推理,預測性能有顯著優勢。目前PaddlePaddle已經實現了API的穩定和向后兼容,具有完善的中英雙語使用文檔。

1 PaddlePaddle之驗證碼識別的實現

1.1 數據集介紹與下載

本論文中使用某系統網站作為實驗目標,經過觀察大量的驗證碼發現,該網站的驗證碼只有小寫的字母和數字,所以這些類別比較少,所以使得識別更加容易。通過對該驗證碼進行切割分析[6],可以觀察到驗證碼中的4字符都會出現固定的位置,所以只需要通過固定位置裁剪即可把驗證碼中的每個字符都裁剪出來。該系統的驗證碼如下:

通過爬蟲程序,可以爬取大量的驗證碼圖片,以下的代碼片段就是下載驗證碼圖片的核心代碼。

pic = requests.get('http://xxxxxx.aspx?', timeout=500)

pic_name = self.save_path+'/' +str(uuid.uuid1()) + '.png'

with open(pic_name, 'wb') as f:

將每一張驗證碼命名為其對應的驗證碼內容,是一個龐大的工作量,特別在訓練網絡模型的過程中,標注數據是工作量非常巨大的,但也是必需的,數據標注工作量大也是目前深度學習的難點。

1.2 裁剪驗證碼與生成圖像列表

通過標注大量的數據集之后,需要裁剪所有的驗證碼。通過第一部分已經分析到驗證碼的分布情況,而數據又已經標注了,根據這些標注信息對圖片裁剪,裁剪后的圖片只包含一個字符。

經過驗證碼裁剪,并去掉容易混淆的“9”,“o”,“z”字符,總體可分為33個類別,這也使得模型更容易訓練。

由于這些數據集不屬于PaddlePaddle自帶數據集,訓練需自定義數據集,建立圖像列表文件作為數據讀取的途徑,通過編寫一個生成圖像列表的程序,把驗證碼生成一個圖像列表。

將已裁剪的數據集生成圖片列表,通過下面的代碼片段將所有圖像和每張圖片對應的標簽生成圖片的相對路徑和標簽,以便后續訓練過程中讀取數據。其核心代碼片段如下:

for img_path in img_paths:

name_path = path + '/' + img_path # 每張圖片的路徑

isexist = os.path.exists(data_list_path) # 如果不存在這個文件夾,就創建

if not isexist:

os.makedirs(data_list_path)

if class_sum % 10 == 0: # 每10張圖片取一個做測試數據

test_sum += 1

with open(data_list_path + "test.list", 'a') as f:

f.write(name_path + "\t%d" % class_label + "\n")

else:

trainer_sum += 1

with open(data_list_path + "trainer.list", 'a') as f:

f.write(name_path + "\t%d" % class_label + "\n")

class_sum += 1

all_class_images += 1

通過上面的程序,一共會生成trainer.list,test.list,readme.json,其中trainer.list,test.list分布是用來訓練和測試的,readme.json包含數據集的信息,通過這個文件可以獲取到標簽尋對用的字符。

1.3 數據的讀取

建立數據列表之后,需要建立數據讀取程序,通過這個程序生成的reader,reader是PaddlePaddle讀取數據的一種介質。通過使用reader,PaddlePaddle可以在訓練的過程中非常便捷地從磁盤讀取圖片數據,經過預處理再應用于訓練。以下的代碼片段就是通過上一部分生成的圖像列表獲取圖像路徑和標簽。

def train_reader(self, train_list, buffered_size=1024):

def reader():

with open(train_list, 'r') as f:

lines = [line.strip() for line in f]

for line in lines:

img_path, lab = line.strip().split('\t')

yield img_path, int(lab)

return paddle.reader.xmap_readers(self.train_mapper, reader,

cpu_count(), buffered_size)

PaddlePaddle的reader是讀取圖像和對圖片進行預處理,通過上述的方式完成讀取圖片后,需要對圖片進行預處理,如下為圖片預處理的核心代碼片段:

def train_mapper(self, sample):

img, label = sample

# 此處使用本地的image,如果paddlepaddle版本是最新的,也可以使用padd.v2.image

# 因為是灰度圖,所以is_color=False

img = paddle.image.load_image(img, is_color=False)

img = paddle.image.simple_transform(img, 38, self.imageSize, True, is_color=False)

return img.flatten().astype('float32'), label

最后結合以上的圖片讀取和預處理兩部分,可以得到一個訓練使用的reader。在生成reader之前,通過使用PaddlePaddle的reader按照指定的大小隨機裁剪一個方形的圖像,這種隨機裁剪的預處理操作也是數據增強的一種方式。

1.4 使用PaddlePaddle開始訓練

在開始PaddlePaddle的訓練之前,需定義一個神經網絡作為將要訓練的一個模型。本論文使用的神經網絡模型是VGG神經網絡[7],這個模型是牛津大學VGG(Visual Geometry Group)組在2014年ILSVRC提出的,VGG神經模型的核心是五組卷積操作,每兩組之間做Max-Pooling空間降維。同一組內采用多次連續的3X3卷積,卷積核的數目由較淺組的64增多到最深組的512,同一組內的卷積核數目是一樣的。卷積之后接兩層全連接層,之后是分類層。由于每組內卷積層的不同,有11、13、16、19層這幾種模型。根據數據集訓練的數量,本論文對VGG做了一定的適配,卷積部分引入了BN層和Dropout操作,BN層全稱為Batch Normalization。

conv1 = conv_block(img, 64, 2, [0.3, 0], 3)

conv2 = conv_block(conv1, 128, 2, [0.4, 0])

conv3 = conv_block(conv2, 256, 3, [0.4, 0.4, 0])

conv4 = conv_block(conv3, 512, 3, [0.4, 0.4, 0])

conv5 = conv_block(conv4, 512, 3, [0.4, 0.4, 0])

drop = paddle.layer.dropout(input=conv5, dropout_rate=0.5)

fc1 = paddle.layer.fc(input=drop, size=512, act=paddle.activation.Linear())

bn = paddle.layer.batch_norm(input=fc1,

act=paddle.activation.Relu(),

layer_attr=paddle.attr.Extra(drop_rate=0.5))

fc2 = paddle.layer.fc(input=bn, size=512, act=paddle.activation.Linear())

# 通過神經網絡模型再使用Softmax獲得分類器(全連接)

out = paddle.layer.fc(input=fc2,

size=10,

act=paddle.activation.Softmax())

在開始PaddlePaddle的訓練時,需先導入依賴包,其中有PaddlePaddle的V2包和讀取數據的程序。然后創建一個類,再在類中創建一個初始化函數,在初始化函數中來初始化PaddlePaddle。此外,可以通過輸入是否是參數文件路徑,或者是損失函數,如果為參數文件路徑,可使用已訓練完成的參數生產參數。如果不傳入參數文件路徑,可使用傳入的損失函數生成參數。之后通過圖像的標簽信息和分類器生成損失函數,使用損失函數生成初始化參數,再生成優化方法,來創建訓練器。最后,在程序中調用相應的函數,就可以開始訓練了。其關鍵代碼實現如下:

out = vgg_bn_drop(datadim=datadim)

cost = paddle.layer.classification_cost(input=out, label=lbl)

parameters = self.get_parameters(cost=cost)

momentum_optimizer = paddle.optimizer.Momentum(momentum=0.9)

trainer = paddle.trainer.SGD(cost, parameters, =momentum_optimizer)

trainer.train(reader, 100, event_handler, feeding)

由于訓練的過程中把圖片設置成灰度圖來處理,所以數據集也非常小,訓練的速度相對比較快。

在訓練過程中,可以借助VisualDL可視化工具查看模型訓練的情況,從圖1來可以模型收斂得非常好,準確率幾乎接近百分之百。

在每一個Pass訓練結束之后,都是用測試集對模型進行一次測試,觀察模型在測試集的預測情況。從圖2來看,模型在測試集的預測有非常好,沒有出現過擬合的情況。

1.5 使用PaddlePaddle進行預測

通過之前的訓練,得到模型參數,可以使用這些參數進行預測驗證碼圖片。由于傳進來的是一個完整的驗證碼,所以需要對驗證碼進行裁剪[8]。然后把裁剪后的數據傳給PaddlePaddle進行預測。因預測出來的是一個label值,所以還需通過label找到對應的字符。

通過以上操作后,在main入口中調用相對應的程序即可進行驗證碼的預測流程。其關鍵代碼實現如下:

def load_image(file):

im = Image.open(file)

im = im.resize((32, 32), Image.ANTIALIAS)

im = np.array(im).astype(np.float32)

im = im.transpose((2, 0, 1))

im = im[(2, 1, 0), :, :] # BGR

im = im.flatten()

im = im / 255.0

return im

test_data = []

test_data.append((load_image(image_path),))

probs = paddle.infer(out, parameters, test_data)

lab = np.argsort(-probs) [0][0]

通過PaddlePaddle進行預測,最終得到預測結果輸出如下:

第1張預測結果為:0,可信度為:0.966999

第2張預測結果為:9,可信度為:0.664706

第3張預測結果為:1,可信度為:0.780999

第4張預測結果為:3,可信度為:0.959722

預測結果為:0a13

結合大量的數據集訓練和預測結果輸出,該驗證碼識別的可信度很高。因此該模型對驗證碼的識別還是挺準確的。

2 結論

PaddlePaddle是一個易學易用、安全高效的分布式深度學習平臺,兼容多種異構硬件,具有優異的訓練和預測性能。本實驗通過PaddlePaddle對某網站的驗證碼數據訓練一個預測模型,通過使用這個預測模型可以自動識別驗證碼中包含的內容,而且識別的準確率還挺高。針對這種驗證碼的字符比較清晰,而且每個字符的位置固定,有利于他人對驗證碼進行切割分析,訓練出一個能夠自動識別驗證碼的神經網絡模型。所以在深度學習高速發展的今天,這種驗證碼很容易被破解,危害網站系統的安全。為了防止這種類型的惡意攻擊,網站開發者可以將驗證碼的字符位置隨機擺放,防止攻擊者對圖片進行裁剪分析,實驗也證明對應傾斜角度過大或者重疊部分太多的字符很難識別,網站開發者可以充分利用這一點來防止攻擊者利用圖像識別技術破解網站驗證碼,維護網站安全。

參考文獻:

[1] 何福泉,李偉烽,林培娜,等.驗證碼的識別技術分析與研究[J].甘肅科技縱橫,2019,48(2):1-4.

[2] 基于卷積神經網絡的12306驗證碼識別[D].華南理工大學, 2017.

[3] AICon 2018開幕百度PaddlePaddle引開發者熱議[J].智能機器人,2018(1):19.

[4] 尹寶才,王文通,王立春.深度學習研究綜述[J].北京工業大學學報, 2015(1):48-59.

[5] 張錚,王順帆,董雷.基于深度學習的驗證碼識別[J].湖北工業大學學報,2018,33(2):5-8+25.

[6] 陳少鎮,王培彬,藍汝琪,曾梓鑫,楊森.移動互聯網+師生互動的課程表設計與應用[J].電腦知識與技術,2018,14(04):76-79.

[7] 劉歡,邵蔚元,郭躍飛.卷積神經網絡在驗證碼識別上的應用與研究[J].計算機工程與應用, 2016, 52(18):1-7.

[8] 楊航,蔡浩.中文圖片驗證碼識別方法的研究[J].汕頭大學學報(自然科學版),2018,33(3):47-53.

【通聯編輯:唐一東】

猜你喜歡
深度模型
一半模型
深度理解一元一次方程
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
深度觀察
深度觀察
深度觀察
深度觀察
3D打印中的模型分割與打包
FLUKA幾何模型到CAD幾何模型轉換方法初步研究
主站蜘蛛池模板: 色婷婷色丁香| 99视频有精品视频免费观看| 日韩精品亚洲人旧成在线| 欧洲av毛片| 九色在线视频导航91| 国产香蕉在线| 日韩中文欧美| 欧美精品在线看| 国产性生交xxxxx免费| 女人18毛片久久| 欧美一区二区自偷自拍视频| 国产人成在线观看| 国产欧美一区二区三区视频在线观看| 国产精品一区不卡| 久久夜色精品国产嚕嚕亚洲av| 少妇精品网站| 免费一级成人毛片| 97久久人人超碰国产精品| 亚洲天堂网在线播放| 欧美在线一二区| 亚洲va视频| 国产在线一二三区| 在线综合亚洲欧美网站| 欧美成人aⅴ| 欧美另类第一页| 在线国产三级| 99re经典视频在线| 国产电话自拍伊人| 欧美a√在线| 精品夜恋影院亚洲欧洲| 国产特级毛片| 日本在线视频免费| 国产成人久视频免费| 欧美黄色网站在线看| 天天综合天天综合| 国产xxxxx免费视频| 激情综合五月网| 青草视频久久| www.99在线观看| 91精品免费高清在线| 亚洲Av激情网五月天| 国产精品网拍在线| 亚洲毛片一级带毛片基地| 强乱中文字幕在线播放不卡| 综合社区亚洲熟妇p| 欧美精品在线免费| 国产女主播一区| 亚洲最新在线| 青青青国产精品国产精品美女| 国产欧美日韩91| 亚洲成人免费看| 国产人人射| 伊人久久大线影院首页| 国产免费怡红院视频| 亚洲一区网站| 国产成人福利在线视老湿机| 国产精品视频免费网站| 国产精品专区第1页| 日本道综合一本久久久88| 少妇被粗大的猛烈进出免费视频| 九九热视频精品在线| 国产亚洲精品在天天在线麻豆| 成人国产免费| 国产不卡一级毛片视频| 伊人久综合| 亚洲男人的天堂久久精品| 欧美综合一区二区三区| 久久 午夜福利 张柏芝| 国产成人h在线观看网站站| 午夜一区二区三区| 亚洲精品福利视频| 女人18毛片一级毛片在线 | 国产无遮挡裸体免费视频| 欧美国产精品拍自| 欧美人在线一区二区三区| 亚洲成网站| 国产一区二区三区免费| 国产亚洲成AⅤ人片在线观看| 亚洲视频免| 日本AⅤ精品一区二区三区日| 国产精品视频白浆免费视频| 中文字幕 日韩 欧美|