摘 要: 為了提高移動智能終端中應用程序登錄過程的快捷性和安全性,設計了一種基于人臉識別技術的應用程序自動登錄方法。通過事先注冊人臉特征信息,并與應用程序及其登錄信息關聯,這些關聯信息經加密后以本地文件存放;當啟動應用程序時,只要通過了人臉特征信息認證,就能自動提取并填寫登錄信息。應用表明,該方法增強了應用程序登錄過程的便捷性和安全性。
關鍵詞: 人臉識別;人臉特征信息;應用程序登錄
智能手機和平板電腦等移動智能設備日益普及,系統處理數據的能力也越來越強,以前很多在PC上的應用,如登錄郵件系統、網上銀行等,都移植到這些移動智能設備上,極大地滿足了人們隨時隨地使用這些服務的需求。但是,每次登錄這些應用程序都需要輸入賬號/用戶名、密碼(甚至第二個密碼)等,這就需要用戶準確地記憶數量眾多的各種應用程序的登錄信息。如果設置的用戶名和密碼又都是比較復雜的字符串序列,雖然安全性高,但用戶要完全準確地記憶這些信息是比較困難的。此外,智能手機這類設備的虛擬鍵盤相對比較小,輸入這些信息速度較慢,容易被人偷窺造成泄密。如果選擇應用程序自動登錄,在這類設備遺失后,更容易造成安全隱患,尤其是手機銀行、網上支付等這類賬戶。
如何幫助用戶便捷地登錄各類應用程序,同時保證登錄信息的安全性,是一個有待解決的問題。目前關于應用程序自動登錄的方法[1-5]中,采用集中帳號管理或其他方式實現應用程序自動登錄,部分解決了該問題,但本身的便捷性及安全性不夠理想。
人臉識別技術是利用計算機基于人的臉部特征進行人臉圖像分析,并從中提取出所蘊涵的有效身份特征信息用以識別人的身份的技術。經過多年的發展,已經有了多種比較成熟的人臉識別算法,使該技術開始從理論探討進入適用階段。如今,各種移動智能終端都具有分辨率較高的視頻裝置,能夠很容易采集到這些設備使用者的高質量的面部圖像信息;同時,設備的數據處理和存儲能力都有了非常大的提高,可以滿足圖像識別過程對系統資源的需要。因此,將人臉識別技術應用到這類設備是一種必然。
本文采用基于本地視頻的人臉識別認證方式提取并自動填寫用戶登錄信息來解決上述問題,使應用程序的登錄過程更便捷、更安全。
1 應用程序登錄助手設計
1.1 基本功能及結構設計
基于人臉識別的應用程序登錄助手的基本功能是:通過設備的攝像裝置獲取使用者的面部圖像信息,經過圖像檢測處理,與事先注冊的人臉特征信息進行比較;在通過人臉特征信息認證后,根據用戶信息和待登錄應用程序的信息提取出唯一的登錄信息,并依次填充到該應用程序登錄界面的相應位置,登錄應用程序。
根據上述基本功能,將應用程序登錄助手分為以下功能模塊:圖像采集與處理、人臉信息注冊與檢索、應用程序與登錄信息關聯注冊及檢索和登錄信息提取與填充。這些模塊的子模塊劃分以及模塊/子模塊間的關系如圖1所示。
(1)圖像采集與處理模塊:完成從設備的視頻攝像裝置采集人臉圖像以及采用人臉識別算法從中提取人臉特征信息。
(2)人臉信息注冊與檢索模塊:在注冊過程中,將人臉特征信息寫入人臉特征信息注冊文件,并生成用戶ID;在提取登錄信息過程中,根據人臉特征信息檢索人臉特征信息注冊文件,完成人臉信息認證。
(3)應用程序與登錄信息關聯注冊及檢索模塊:在注冊過程中,將用戶的應用程序與登錄信息關聯數據以及用戶ID寫入應用程序與登錄信息關聯數據文件;在提取登錄信息過程中,根據用戶認證信息檢索出與用戶ID和應用程序相關聯的登錄信息。
(4)登錄信息提取與填充模塊:將檢索到的登錄信息提取出來并自動填寫到應用程序登錄界面的相應位置。
1.2 運行過程分析
功能運行分為注冊過程和提取登錄信息兩個過程。
1.2.1 注冊過程
啟動注冊過程后,自動啟動視頻裝置:(1)從視頻裝置獲取的人臉圖像,經過圖像識別算法處理后生成人臉特征數據;(2)用上述人臉特征數據與人臉信息注冊文件中已注冊的人臉特征數據進行比對,檢查是否為已經注冊的用戶。如果沒有檢測到人臉信息注冊文件或該文件中沒有匹配的人臉特征數據,表示該用戶沒有注冊,這時自動按規則生成一個用戶標識與人臉特征數據關聯并寫入人臉信息注冊文件,如果該文件不存在,需要首先創建;(3)完成用戶注冊后,才能夠進行應用程序與登錄信息的關聯注冊。從設備的操作系統中獲取應用程序安裝信息,人工選擇應用程序,然后根據其安裝信息生成應用程序標識用來唯一標識該應用程序;之后,將用戶標識、應用程序標識、登錄應用程序需要的帳號/用戶名、密碼1和密碼2以非明文形式寫入應用程序與登錄信息關聯數據文件(簡稱登錄信息關聯文件),如果該文件不存在,要首先創建該文件。在一個設備中可以有多個用戶注冊,一個用戶可以注冊多個應用程序與登錄信息的關聯數據。注冊功能流程如圖2所示。
由于應用程序標識是根據應用程序的安裝信息生成的,具有唯一性,因而如果重新安裝了某個應用程序,這時可能需要在登錄助手中刪除原來的注冊信息并重新注冊,以保證應用程序標識的唯一性。因此,登錄助手提供對用戶本人的應用程序與登錄信息的關聯數據進行管理的功能。
此外,應用程序的登錄信息設置了3個字段:用戶名、密碼1和密碼2,但并不是所有的應用程序都需要,如:有的應用程序登錄只需要輸入一個密碼,而不需要用戶名,而有的則需要用戶名、密碼,甚至第2個密碼。因而,在登錄信息關聯文件中寫入登錄信息時,必須保證每個字段都存在,沒有內容的寫入特殊字符。
1.2.2 提取登錄信息過程
當用戶啟動應用程序登錄界面并選中用戶名或密碼字段對應的文本框時,自動觸發以后臺進程運行登錄助手,并啟動設備的視頻裝置:(1)從視頻裝置獲取人臉圖像,經過圖像識別算法處理后生成人臉特征數據;(2)用上述人臉特征數據與人臉信息注冊文件中已注冊的人臉特征數據進行比對,檢查是否為已經注冊的用戶。如果用戶已注冊,從中取出用戶標識(表示通過人臉信息認證),之后獲取成為應用程序標識;(3)根據用戶標識和應用程序標識檢索登錄信息關聯文件,如果檢索到多條關聯數據,表明該用戶在這個應用程序中有多條登錄帳戶信息,如:郵件程序中一個用戶可以用不同的帳號登錄,這時需要提示用戶手工選擇其中一條作為登錄信息;若只有一條關聯數據,則不進行提示,直接讀出登錄信息;(4)根據獲取的登錄界面文本框的位置,自動將用戶名、密碼1、密碼2依次填入其中,如果這3個字段中的某個字段值為特殊字符,表示登錄界面中沒有該字段。例如,如果帳戶/用戶名字段的值為特殊字符,表示應用程序的登錄界面中不需要輸入用戶名,直接輸入密碼即可,如某些手機銀行軟件。字段“密碼2”根據需要選用,如某些手機股票軟件需要輸入兩個密碼,如果該字段為特殊字符,則表示不需要第2個密碼。此外,如果用戶是非注冊用戶,或者是注冊用戶但沒有該應用程序的關聯數據,這時都需要登錄助手啟動其他的輸入法,使用戶能輸入信息。因此,登錄助手中還需要設置一個操作系統中已存在的文字輸入法,作為解決上述問題的方案。提取登錄信息功能流程如圖3所示。
2 功能實現
目前,移動智能終端設備中運行的操作系統有多種,本文的實現是基于Android平臺、Java語言及OpenCV(Open Source Computer Vision)函數庫。OpenCV是一種開源的計算機視覺函數庫,實現了圖像處理和計算機視覺方面的很多通用算法,如:常用的人臉識別方法[6]主成分分析PCA、線性判別分析LDA等。在Android平臺下,利用JNI等技術可以調用OpenCV函數完成人臉識別的相關處理[7]。
2.1 圖像采集與處理
利用攝像設備獲取圖像并進行人臉檢測。這個過程需要使用OpenCV函數庫中的相關功能來完成圖像檢測處理。
(1)圖像獲取:從攝像裝置獲取圖像,既可以使用Android系統內置的攝像頭應用程序,也可以自己定義。這里使用前者來實現:首先創建一個請求圖像或視頻的intent,然后用startActivityForResult()方法啟動攝像頭intent,這樣就可以在應用程序中接收從攝像頭intent返回的數據。主要的函數調用:
①Intent(String action):創建指定類型的攝像頭,這里指定的是MediaStore.ACTION_ IMAGE_CAPTURE,即向內置攝像頭程序請求圖像。
②startActivityForResult(Intent intent,int requestCode):執行定義的攝像頭并獲取圖像。在注冊時,需要將獲取的圖像顯示在注冊界面中;而在提取應用程序登錄信息過程時,則不需要,直接將獲取的圖像存放到緩存中。
(2)圖像處理:獲取圖像后,首先需要將彩色圖像轉換為灰度圖像,然后對圖像進行直方圖均衡化,最后利用分類器檢測圖像區域是否存在人臉特征,并作歸一化處理。主要涉及OpenCV的以下函數調用:
①void cvCvtColor(const CvArr* src,CvArr* dst, int code):將彩色圖像轉換為灰度圖像,其中參數code設置為CV_BGR2GRAY表示轉換為灰度圖。
②void cvEqualizeHist(const CvArr* src,CvArr* dst):對輸入灰度圖進行直方圖均衡化處理,能對圖像的細節部分起到明顯的突出增強效果。
③cvHaarDetectObjects(…):使用人臉/人眼的Haar特征級聯分類器進行相關目標區域的檢測,找到包含人臉的矩形區域,并且將該區域作為一序列的矩形框返回。使用均衡化后的灰度圖可以加快檢測速度。
2.2 人臉信息注冊與檢索
根據圖像采集與處理模塊中檢測到的人臉圖像,調用cvCalcEigenObjects()函數進行PCA操作,計算輸入目標的正交特征基向量和目標平均值,計算出的特征臉 (Eigenface)都存放在向量組成的數組中;再利用cvEigenDecomposite()函數將每一個訓練圖片投影在PCA 子空間上,最后得到處理后的人臉在低維子空間(即訓練人臉特征信息的子空間)中的投影向量。
在注冊過程中,首先檢查是否已存在該特征臉,若沒有,則調用注冊函數將信息寫入人臉信息注冊文件,并生成用戶標識。對于提取登錄信息過程,則調用人臉識別函數,檢查是否是合法用戶,若是則從人臉信息注冊文件讀出用戶標識,傳遞給下一功能模塊。
(1)人臉特征信息注冊:將計算機處理后的矩陣數據(即特征臉數據)寫入以本地文件形式存放的數據庫中。特征臉數據存放在OpenCV提供的結構體CvFileStorage中。注冊時,先使用cvOpenFileStorage()函數以參數CV_
STORAGE_READ打開人臉信息注冊文件,再通過cvWrite()函數將內存中存放特征臉數據和相關信息的對象寫入人臉信息文件,返回標識信息,實現人臉特征信息注冊。
(2)人臉特征識別:使用自定義函數int MoseNearestFace(float * pReconFace,float * pConfidence)計算待識別的人臉向量和數據庫中的所有人臉向量的相似度,返回相似度最高的已注冊人臉信息,則實現了人臉識別的過程。其中參數pReconFace是當前輸入的人臉向量,參數pConfidence是相似度的數值表述。
人臉識別方法的最大缺點是計算量大,識別速度慢。這里選用的特征臉(Eigenface)方法采用了PCA降維方法,有效減少了計算量,提高了識別速度。
2.3 應用程序與登錄信息關聯注冊及檢索
在注冊過程中,從列表選擇需要注冊的應用程序,生成應用程序標識。之后將用戶標識、應用程序標識及登錄信息關聯,生成關聯數據并調用加密函數對數據加密,再寫入登錄信息關聯文件。在提取登錄信息過程中,根據用戶認證成功返回的用戶標識以及應用程序標識檢索登錄信息關聯文件,若查找到結果,則需要調用解密函數,得到應用程序的登錄信息,傳遞給下一操作。主要涉及以下函數調用:
(1)生成應用程序標識函數:createAppID(String packageName,String label)。利用Android系統的PackageManager類,可以獲取系統中已安裝的應用程序包的信息,根據包名和標簽,調用該函數生成應用程序標識,可以唯一標識該應用程序。
(2)加/解密函數:考慮到登錄信息的安全性,對關聯數據內容采用AES算法進行加/解密,密鑰長度為128 bit,完全可滿足該文件中信息加密的安全需要[9]。
①加密函數:encrypt(byte[] key, byte[] src):用指定的密鑰加密源數據。
②解密函數:decrypt(byte[] key, byte[] encrypted):用密鑰解密數據。
(3)讀/寫登錄信息關聯文件
①寫入函數:bool writeRelatedeData(String fileName,String userid,AppInfo app),其中類AappInfo定義了應用程序的相關屬性,包括:應用程序ID(appID),登錄該應用程序的用戶名(appUser)、 密碼1(appPwd1)及密碼2(appPwd2)。
②查找函數:AppInfo findRelatedData(String fileName, String userid, String appID)。
2.4 登錄信息提取與填充
從SDK1.5版本以后,Android系統開放了IMF(Input Method Framework)框架,使得開發人員可自行開發輸入法;同時由于EditText控件可以自動獲得焦點,則只要Activity中包含EditText控件,通過長按文本框,便會自動觸發指定的應用程序。
本文將應用程序登錄助手看作一個輸入法程序,通過設計一個繼承Activity的子類LoginActivity便可實現觸發。為了保證將檢索的應用程序登錄信息準確填寫入EditText控件中,通常要求用戶長按登錄界面的第一個EditText控件,然后根據用戶名、 密碼1及密碼2字段的值,按規則自動填入。這樣就實現了登錄信息的提取與自動填充,并觸發應用程序登錄操作。
本文將人臉識別技術應用在應用程序自動登錄中,既方便快捷,又增加了登錄信息的安全性;同時給人一種科技感,增強了用戶的使用樂趣。人臉識別技術必將成為未來信息技術的重要組成部分。但仍需要進一步改進,解決系統不能識別登錄助手與其他輸入法而需要手工切換等問題。
參考文獻
[1] 陳魯,王明宇.用于應用程序自動登錄的方法和設備:中國,2008102223263[P].2008-09-17.
[2] 陳雯.一種應用程序登錄方法及登錄管理系統:中國,201110172345[P].2011-10-19.
[3] 呂中雷.移動終端及其應用程序登錄方法:中國,201110251233[P].2011-12-14.
[4] 岳風順.一種應用程序登錄方法及裝置:中國,2012105664353[P].2012-12-21.
[5] 范志超.一種自動登錄用戶賬號的方法及系統:中國,2012105689539[P].2012-12-25.
[6] 王偉,馬建光.人臉識別常用方法及其發展現狀[J].兵工自動化,2002,21(1):49-51.
[7] 韓露,李祖樞,陳東義.一種Java與OpenCV結合實現的目標檢測模塊[J].計算機應用,2008,28(3):773-775.
[8] 黎松,平西建,丁益洪.開放源代碼的計算機視覺類庫OpenCv的應用[J].計算機應用與軟件,2005,22(8):134-136.
[9] FERGUSON N,KELSEY J,LUCKS S,et al.Improved cryptanalysis of rijndael[A].Fast Software Encryption[C]:7thInternational Workshop,FSE 2000,in New York,USA,April,2000:P213-230.