亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Python語言和支持向量機的字符驗證碼識別

        2017-06-02 09:24:03楊雄
        關(guān)鍵詞:Python語言支持向量機

        楊雄

        摘要:驗證碼的主要目的是區(qū)分人類和計算機,用來防止自動化腳本程序?qū)W(wǎng)站的一些惡意行為,目前絕大部分網(wǎng)站都利用驗證碼來阻止惡意腳本程序的入侵。本文以某高校教務(wù)系統(tǒng)的字符驗證碼作為研究對象,利用圖像處理的方法,對驗證碼圖像進行二值化、去離散噪聲、字符分割、歸一化、特征提取、訓(xùn)練和字符識別等過程實現(xiàn)了驗證碼識別,并使用Python語言實現(xiàn)。最后在分析識別結(jié)果的基礎(chǔ)上,從驗證碼識別的角度提出生成更加安全驗證碼的一些建議。

        關(guān)鍵詞:支持向量機(SVM);驗證碼;Python語言

        中圖分類號:TP3 文獻標識碼:A 文章編號:1007-9416(2017)04-0072-03

        1 引言

        隨著互聯(lián)網(wǎng)的迅速發(fā)展和應(yīng)用,網(wǎng)絡(luò)為我們提供了越來越多的資源,也為我們的生活和工作提供了極大的便利,但同時也帶來了大量的互聯(lián)網(wǎng)安全問題,比如刷票、用戶批量注冊、密碼暴力破解、社區(qū)惡意發(fā)帖等。

        驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區(qū)分計算機和人類的圖靈測試)的縮寫[1],是能夠區(qū)分用戶是人還是計算機的公共自動化程序,該程序提出的問題由計算機生成并評判,但必須只有人類才能回答。由于計算機無法解答驗證碼的問題,所以可以認為能夠回答出問題的用戶就是人類。目前大部分學(xué)校的教務(wù)系統(tǒng)都采用了字符圖像驗證碼。

        支持向量機(SVM)是在統(tǒng)計學(xué)習(xí)的 VC維理論和結(jié)構(gòu)風(fēng)險最小化(Structure Risk Minimization,SRM)原理基礎(chǔ)上,發(fā)展起來的一種全新的機器學(xué)習(xí)算法[2]。該算法在解決小樣本、非線性及高維模式識別中有許多特有的優(yōu)勢。支持向量機根據(jù)其求解問題的不同分為支持向量分類機和支持向量回歸機兩種類型。本文提出的驗證碼識別算法是基于C-SVC的支持向量分類機[3]。

        但隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,最初的字符圖像驗證碼已經(jīng)不能夠完全保障網(wǎng)絡(luò)的安全,為了評估這類驗證碼的安全性,需要從識別角度進行研究。因此,本文以某高校教務(wù)系統(tǒng)使用的驗證碼作為識別對象,提出一種基于SVM的驗證碼識別算法,使用Python的圖像處理庫和SVM機器學(xué)習(xí)庫來實現(xiàn)驗證碼識別程序,根據(jù)識別率來評估網(wǎng)站的安全性,從而提出一些改進意見。

        2 驗證碼預(yù)處理

        為了防止計算機自動化腳本的攻擊,字符圖像驗證碼往往由服務(wù)器產(chǎn)生隨機字符序列后再加入一些干擾因素使計算機難以識別。本文將要識別的驗證碼示例如圖1所示。

        可以看到,該類驗證碼加入的干擾因素主要是點線干擾噪聲,其加大了圖像識別的難度。因此,在進行驗證碼識別前,需要對驗證碼圖像進行預(yù)處理,步驟包括二值化、去除離散噪聲、字符分割和尺寸歸一化。

        2.1 二值化

        圖像的二值化處理就是將圖像上的點的像素值設(shè)置為0或255,使圖像的集合性質(zhì)只與像素值為0或255的點的位置有關(guān)。將圖像中所有小于閥值的像素被判定為屬于字符區(qū)域,其像素值設(shè)為0, 而大于或等于閥值的像素被排除在字符區(qū)域以外,像素值設(shè)為255。對圖像驗證碼進行二值化處理的關(guān)鍵是閾值的選擇與確定。二值化處理[4]選取閾值方法很多,經(jīng)過實驗比較,本文采用全局固定閾值法[5]選取閾值,然后再對驗證碼圖像進行二值化處理。

        設(shè)原始灰度圖像為f(x,y),二值化處理后的圖像為g(x,y),則二值化過程可表示為:

        式中f(x,y)是原始圖像坐標為(x,y)的點的像素值,g(x,y)是二值化處理后的該點的像素值,0表示黑點,255表示白色。在實際的處理系統(tǒng)中,進行圖像二值化處理的關(guān)鍵是要確定合適的閾值,使得字符與背景能夠分享開來,而且結(jié)果圖像必須具備良好的保形性,不能夠丟掉原來有用的信息,不產(chǎn)生額外的空缺等。通過實驗,采用固定閾值80能夠得到較完美的效果。

        使用Python語言實現(xiàn)的主要步驟包括:將RGB彩圖轉(zhuǎn)為灰度圖和將灰度圖,再按照設(shè)定閾值轉(zhuǎn)化為二值圖。

        二值化后的驗證碼示例如圖2所示,基本將背景噪聲去除了。

        2.2 去除離散噪聲

        經(jīng)過二值化處理后,驗證碼圖像還存在或多或少的離散噪聲,尤其在字符周圍。本文消除驗證碼字符周圍離散噪聲采用的是連通域去噪法:當發(fā)現(xiàn)一個像素值為0的點時,記為:A,統(tǒng)計點A周邊九宮格里的像素值同樣為0的像素點數(shù)量,記為:Sum(A),如果Sum(A)少于一個定值K,則認為此點為孤立點,將其排除在字符區(qū)域以外,將點A像素值設(shè)為255。經(jīng)過實驗,當K值取2時,能夠去除絕大部分的離散噪聲,得到較好的效果。

        在具體處理時需要將所有的像素點按如下圖分成三大類:頂點X、非頂點的邊界點Y和內(nèi)部點Z。如圖3所示。

        其中:X類點需要計算周邊相鄰的3個點,Y類點則需要計算周邊相鄰的5個點,而Z類點則計算周邊相鄰的8個點。

        經(jīng)過去除離散噪聲操作的驗證碼圖像如圖4所示,已經(jīng)去除了給絕大部分干擾噪聲。

        2.3 字符分割

        字符圖像驗證碼本質(zhì)是由一系列的單個字符圖片拼接而成。將去除離散噪聲后的驗證碼圖片放大到像素級別,可獲取各個字符位置參數(shù)信息:整個圖片大小是 40*10(單位為像素),單個字符大小為 7*10,字符間隔3個像素,左相距1個像素,右相距1個像素,字符上下相距0個像素,如圖5所示。

        這樣就可以使用投影分割算法將驗證碼圖像分割成只包含單個字符的圖片,只需要定位每個字符在整個圖片中所占據(jù)的像素區(qū)域,然后就可以根據(jù)像素位置進行分割,分割后的單個字符圖片如圖6所示。

        2.4 尺寸歸一化

        本文所選擇的研究對象進行字符分割后單個字符的尺寸已經(jīng)統(tǒng)一為7*10的規(guī)格,所以不需要做額外處理。

        3 基于支持向量機的驗證碼識別

        支持向量機算法的關(guān)鍵是選取核函數(shù)的類型,主要有線性內(nèi)核,多項式內(nèi)核,徑向基內(nèi)核(RBF),sigmoid核。本文選定RBF核為SVM的核函數(shù)進行支持向量機分類識別:

        本文提出的驗證碼識別算法實現(xiàn)使用的是Python的機器學(xué)習(xí)庫libSVM ,libSVM是臺灣大學(xué)林智仁(Lin Chih-Jen)教授等開發(fā)設(shè)計的一個簡單、易于使用和快速有效的SVM模式識別與回歸的軟件包[6],libSVM使用的一般步驟是:

        (1)準備數(shù)據(jù)集,轉(zhuǎn)化為 libSVM支持的數(shù)據(jù)格式;

        (2)考慮選用核函數(shù)(本文使用RBF 核函數(shù));

        (3)采用交叉驗證,選擇最佳參數(shù)C與g;

        (4)用得到的最佳參數(shù)C與g 對整個訓(xùn)練集進行訓(xùn)練得到SVM模型;

        (5)利用得到的SVM模型進行預(yù)測[7]。

        3.1 素材標記

        因為機器開始時是不具備任何字符的觀念,所以需要對機器學(xué)習(xí)的素材進行手工標識,告訴機器哪些圖片的內(nèi)容是1,哪些圖片的內(nèi)容是A,這個過程叫做 “素材標記”。本文所選擇的研究對象,其字符包括0~9和A~Z,所以具體標記素材的方法是:為0~9和 A~Z分別建立目錄,目錄名稱為相應(yīng)數(shù)字或字母,人為判定單個字符圖片內(nèi)容,并將其拖到指定目錄中,每個目錄中大約存放100張左右的素材。

        3.2 字符特征提取

        字符分割后圖片大小已經(jīng)歸一化,均為:寬7個像素,高10個像素,本文選擇驗證碼單個字符所有點像素特征作為特征向量,因此定義出70個特征:70個像素點上面的像素值。當像素表示對象時(即其像素值為0),其特征值為1,否則其特征值為0,最后得到一組70維的特征。

        3.3 生成特征和標識對應(yīng)的訓(xùn)練數(shù)據(jù)集

        將已經(jīng)標記好的0~9和A~Z目錄下的單個字符圖片特征化,按照libSVM指定的格式生成一組帶特征值和標記值的向量文件。生成的特征文件部分內(nèi)容如圖7所示。

        每一行特征碼代表一張圖片,第一列就是該特征碼所代表的字符,示例文件中66即表示字符‘B,其他列分別表示70組特征值,冒號前為索引號,冒號后為特征值。

        3.4 訓(xùn)練特征標記數(shù)據(jù)生成SVM模型

        使用Python的機器學(xué)習(xí)庫libSVM,首先調(diào)用svm_read_problem函數(shù),選擇RBF 核函數(shù),輸入特征文件,然后調(diào)用svm_train函數(shù)進行訓(xùn)練,最后調(diào)用svm_save_model以文件形式保存SVM模型。

        3.5 使用SVM模型預(yù)測新的未知驗證碼圖片集

        生成SVM模型后,需要使用訓(xùn)練集之外的全新的標記后的圖片作為測試集來對模型進行測試。首先生成需要識別的字符驗證碼的特征碼,將其全部標記為0,然后將生成的文件作為測試樣本,接著調(diào)用函數(shù)svm_predict進行預(yù)測,最終返回識別結(jié)果。

        4 實驗結(jié)果分析

        本文對指定高校教務(wù)系統(tǒng)的動態(tài)驗證碼形成持續(xù)不斷地識別,將識別的結(jié)果作為名稱保存此驗證圖片,主要步驟如下:

        (1)通過http接口,獲得驗證碼圖片。

        (2)對驗證碼圖片進行二值化、去除離散噪聲等預(yù)處理。

        (3)使用SVM模型文件對分割后的4張單字符圖片分別進行識別。

        (4)將識別結(jié)果拼接。共識別了9000張圖片,識別率能達到100%,部分識別效果如圖8所示。

        5 結(jié)語

        通過實驗數(shù)據(jù)可知,該高校的教務(wù)系統(tǒng)的驗證碼能夠100%被識別出來,說明其驗證碼無法有效保障網(wǎng)絡(luò)的安全,形同虛設(shè)。因為良好的驗證碼的前提就是要滿足安全性,所以需要加強驗證碼環(huán)節(jié)的安全性,提出如下建議:

        (1)驗證碼字符個數(shù)不固定,因為字符數(shù)目不確定性增加機器程序識別的難度;

        (2)字符適當扭曲或字符位置不固定,這使驗證字符串即無固定的開始位置,也無固定的字符間隔,增加了機器識別的難度[8];

        (3)使用行為驗證碼,通過用戶的操作行為來完成驗證。

        參考文獻

        [1]von Ahn L, Blum M, Hopper N, et al.The CAPTCHA project[EB/OL].

        [2]Sun T,Neuro Y.Detail-preserving median based filters in image processing[J].Pattern Recognition Letters,1994,15(4):341-347.

        [3]李卓,柴濱景,胡繼東.支持向量機在油田系統(tǒng)建模中的應(yīng)用[J].現(xiàn)代電子技術(shù),2007,30(1):162-164.

        [4]Gonzalez R C.數(shù)字圖像處理[M].2版.北京:電子工業(yè)出版社,2007.

        [5]王興芬,李雪燕,張繼松.基于支持向量機的網(wǎng)上銀行驗證碼識別研究[J].計算機工程與應(yīng)用,2012,48(29):73-77.

        [6]Chang CC, Lin CJ. LIBSVM: a library for support vector machines[EB/OL].[2015-08].

        [7]趙振書,孫建平,朱雯.SVM在汽輪機軸系系統(tǒng)狀態(tài)監(jiān)測中的應(yīng)用[J].儀器儀表用戶,2012, 19(4):41-43.

        [8]葉振.一種新型圖像驗證碼系統(tǒng)[J].數(shù)字技術(shù)與應(yīng)用,2014(8):185-185.

        猜你喜歡
        Python語言支持向量機
        面向計算生態(tài)的Python語言入門課程教學(xué)方案
        計算機教育(2017年8期)2017-09-01 13:44:40
        論Python程序設(shè)計語言
        基于Python語言的面向?qū)ο笳n程實踐教學(xué)探討
        動態(tài)場景中的視覺目標識別方法分析
        論提高裝備故障預(yù)測準確度的方法途徑
        價值工程(2016年32期)2016-12-20 20:36:43
        基于熵技術(shù)的公共事業(yè)費最優(yōu)組合預(yù)測
        價值工程(2016年29期)2016-11-14 00:13:35
        基于Android的Python語言英漢維電子詞典設(shè)計與實現(xiàn)
        基于支持向量機的金融數(shù)據(jù)分析研究
        狠狠躁夜夜躁人人爽天天天天97| 亚洲一区二区国产一区| 国产亚洲精品综合一区| 久久久久久国产精品免费免费男同| 狠狠人妻久久久久久综合| 激情亚洲的在线观看| 色小姐在线视频中文字幕| 免费a级毛片18禁网站| 女人被爽到呻吟gif动态图视看| av无码天一区二区一三区| 欧美精品久久久久久久自慰| 午夜福利不卡无码视频| 一区二区三区午夜视频在线观看 | 亚洲乱精品中文字字幕| 久久人妻中文字幕精品一区二区| 欧美村妇激情内射| a在线观看免费网站大全| 人妻无码AⅤ中文系列久久免费| 中文字幕一区二区三在线| 丝袜美腿高清在线观看| 久久精品欧美日韩精品| 少妇三级欧美久久| 国产黑色丝袜在线观看网站91| 蜜桃传媒免费在线播放| 亚洲色欲久久久综合网| 国产一级在线现免费观看| av男人的天堂第三区| 无套内内射视频网站| 国产亚洲av手机在线观看| 综合图区亚洲另类偷窥| 看中文字幕一区二区三区| 成熟了的熟妇毛茸茸| 少妇人妻大乳在线视频不卡 | 精品日本一区二区视频| 中文字幕乱码人妻在线| 五月丁香六月综合缴清无码 | 人妻精品动漫h无码网站| 亚洲VA欧美VA国产VA综合| 亚洲一区二区三区在线| av大全亚洲一区二区三区| 成人性做爰aaa片免费看|