南京理工大學(xué)紫金學(xué)院 劉紅英 鐘冰冰
人臉識別技術(shù)是一項擁有漫長研究歷史的成熟技術(shù),教務(wù)管理客戶端采用人臉識別技術(shù)作為登錄方式能夠保障教務(wù)管理系統(tǒng)信息安全,防止他人篡改、冒用、刪除他人教務(wù)管理信息。本課題實現(xiàn)基于人臉識別技術(shù)的教務(wù)管理客戶端開發(fā)與設(shè)計,本系統(tǒng)采用C/S架構(gòu),基于PyQt桌面開發(fā)工具,結(jié)合網(wǎng)絡(luò)爬蟲技術(shù),采用SQLite與Neo4j作為數(shù)據(jù)庫技術(shù),為用戶提供便利性,并提高了安全性能。
教務(wù)管理系統(tǒng)的發(fā)展跟隨著計算機(jī)技術(shù)的進(jìn)步而不斷完善,從最早的單機(jī)模式到網(wǎng)絡(luò)計算機(jī)時代采用C/S與B/S模式,但是教務(wù)系統(tǒng)仍存在許多安全性問題,如易被攻擊、弱口令密碼被利用等。人臉識別技術(shù)應(yīng)用廣泛,將人臉識別技術(shù)應(yīng)用于教務(wù)客戶端系統(tǒng),增加教務(wù)系統(tǒng)安全性。
人臉識別是一種提取人臉特征與輪廓的生物識別技術(shù)。人臉識別主要流程為:數(shù)據(jù)采集、人臉檢測、特征提取、分類識別。人臉檢測即使用算法判斷人臉是否存在。特征提取即以計算機(jī)語言表達(dá)人臉特征。人臉檢測有統(tǒng)計與基于知識的方法。特征提取有基于模板匹配、基于幾何特征、基于子空間、基于機(jī)器學(xué)習(xí)的方法[1]。
本客戶端人臉識別模塊采用開源的ArcFace 3.0 SDK。它具有人臉檢測、人臉追蹤、人臉特征提取、人臉特征比對、人臉屬性檢測、活體檢測等功能。適用于身份核驗、門禁通行場景,支持人臉1∶1,1∶N搜索[2]。
爬蟲技術(shù)的主要流程為:(1)請求數(shù)據(jù):模擬瀏覽器,通過發(fā)送User-Agent等HTTP請求頭獲取服務(wù)端響應(yīng),取得網(wǎng)頁數(shù)據(jù)。(2)解析數(shù)據(jù):分析、清洗所獲取的網(wǎng)頁原始數(shù)據(jù),通過正則表達(dá)式、XPath定位器、BeatifulSoup庫等提取出有效數(shù)據(jù)。(3)數(shù)據(jù)存儲:將解析出的有效數(shù)據(jù)存儲到數(shù)據(jù)庫或Json、Csv等格式文件[3]。
本課題采用Python第三方庫Requests對URP綜合教務(wù)系統(tǒng)發(fā)起請求,使用Session保存用戶Coookie,Xpath定位器與BeautifulSoup庫解析返回數(shù)據(jù),列表切片過濾冗余數(shù)據(jù),實現(xiàn)學(xué)生輸入正確賬號密碼后實時爬取用戶教務(wù)系統(tǒng)個人信息,并以美觀的界面進(jìn)行展示[4-6]。
本系統(tǒng)為C/S(客戶端/服務(wù)器)模式的采用人臉識別驗證身份的教務(wù)管理客戶端。本系統(tǒng)根據(jù)用戶身份分為三個子系統(tǒng):管理員、學(xué)生、教師。下面從用戶角度,展示教務(wù)管理客戶端的功能結(jié)構(gòu)圖,如圖1所示。
圖1 系統(tǒng)功能結(jié)構(gòu)圖Fig.1 System functional structure
學(xué)生模塊主要展示URP綜合教務(wù)系統(tǒng)爬取數(shù)據(jù),同時增加了校園簡介與圖靈獎得主簡單知識問答功能;教師模塊使用瀏覽器框架,打開URP綜合教務(wù)系統(tǒng)桌面客戶端;管理員模塊主要對校園人臉信息進(jìn)行管理。
系統(tǒng)采用Python語言3.6.8版本編寫,開發(fā)環(huán)境為:Windows 10操作系統(tǒng),PyCharm開發(fā)工具,Qt Designer圖形用戶界面設(shè)計工具。采用的數(shù)據(jù)庫為SQLite數(shù)據(jù)庫、Neo4j數(shù)據(jù)庫。系統(tǒng)硬件配置為:處理器Intel(R)Core(TM)m3-7Y30,主頻1.00GHz,內(nèi)存4G,硬盤存儲空間128G,顯示適配器為Intel(R) HD Graphics 615,攝像頭為內(nèi)置攝像頭。
3.2.1 人臉識別模塊實現(xiàn)
使用Self.tuku_face_feature()函數(shù)對本地用戶圖庫進(jìn)行人臉圖像特征提取。首先定義face_engine為engine.py中的ArcFace()類。再定義Res為Arc Face()類中的ASFInit-Engine()函數(shù),初始化引擎為靜態(tài)圖模式,設(shè)置人臉檢測角度。調(diào)用tuku_path()函數(shù)導(dǎo)入本地用戶圖庫,本地圖庫路徑為:FaceAdmin/Resource/Faces,使用Self.Cut()函數(shù)對圖庫路徑下的圖片長與高轉(zhuǎn)換為4的倍數(shù)。本客戶端的圖庫均使用JPG文件保存,圖片名稱為圖片中用戶的賬號。需要注意的是,每導(dǎo)入圖庫中圖片均需要運(yùn)行一次Cut()函數(shù),查看圖像是否轉(zhuǎn)換成功,最好導(dǎo)入JPG格式文件,因為采用PNG格式的圖像容易轉(zhuǎn)換失敗。
將圖庫中圖像全部轉(zhuǎn)換成功后,調(diào)用ArcFace()類中的ASFDetectFaces()人臉檢測函數(shù),若返回值MOK則函數(shù)調(diào)用成功,開始調(diào)用ASFFaceFeatureExtract()函數(shù)對圖庫中圖像進(jìn)行單人臉特征提取,最后以字典形式返回圖庫中所有圖像的人臉特征。提取圖庫人臉特征流程圖如圖2所示。
圖2 提取圖庫人臉特征流程圖Fig.2 Flow chart of extracting face features from image library
遍歷圖庫中所有人臉特征后,運(yùn)行run_camera()函數(shù)開啟攝像頭進(jìn)行人臉識別。
開啟攝像頭后,首先將攝像頭圖片寬度處理為4的倍數(shù),將處理好后的圖片傳遞給ASFDetectFaces()函數(shù)進(jìn)行人臉檢測。設(shè)定閾值為0.7,確認(rèn)身份閾值0.88。檢測出人臉后進(jìn)行畫框,再調(diào)用ASFFaceFeatureExtract()函數(shù)提取出攝像頭中人臉特征。若提取成功,則調(diào)用ASFFace FeatureCompare()函數(shù)對攝像頭中人臉與圖庫中人臉進(jìn)行特征比較。如果相似度大于0.88即確定攝像頭中人臉身份,跳出While True循環(huán),返回圖像名稱即用戶賬號。若相似度一直未達(dá)到0.88,設(shè)定8秒后結(jié)束進(jìn)程,并返回用戶身份“Unknown”。圖3為攝像頭人臉與圖庫人臉特征比較流程圖。
圖3 攝像頭人臉與圖庫人臉特征比較流程圖Fig.3 Flow chart of feature comparison between camera face and gallery face
以上說明了login_face.py子文件人臉識別部分的處理。在整個客戶端系統(tǒng)中,當(dāng)用戶選擇人臉登錄,點擊打開攝像頭按鈕時發(fā)射信號傳遞給主文件main.py,連接Camera()槽函數(shù)進(jìn)行處理。Camera()槽函數(shù)中先隱藏登錄界面,定義Face變量接收login_face.py執(zhí)行結(jié)果。再連接admin_faces.db人臉信息庫。查詢?nèi)四様?shù)據(jù)庫中Accunt,PWD字段,當(dāng)返回結(jié)果與Account字段匹配時,根據(jù)Account字段索引取出PWD字段,將賬號、密碼值傳遞給教師版客戶端,再通過JS注入賬號密碼,調(diào)用百度API進(jìn)行驗證碼識別實現(xiàn)自動登錄URP綜合教務(wù)系統(tǒng)。若人臉識別失敗,返回的“Unknown”字符串與數(shù)據(jù)庫中Account字段不匹配,則跳轉(zhuǎn)登錄界面,顯示識別失敗提示框。流程圖如圖4所示。
圖4 人臉識別自動登錄流程圖Fig.4 Flow chart of automatic login of face recognition
3.2.2 人臉識別模塊測試
以下為人臉識別準(zhǔn)確性測試表,選取不同光照、角度、表情的測試者照片作為樣本,將相似度大于閾值0.88的
計入正確識別次數(shù)。測試詳情如表1所示。對于面部口罩遮擋情況,也能識別出人臉身份。
表1 人臉識別準(zhǔn)確性測試Tab.1 Face recognition accuracy test
管理員成功登錄后可對人臉信息進(jìn)行增加、刪除、查詢、修改操作。圖5為人臉信息數(shù)據(jù)庫界面。
圖5 人臉信息管理界面Fig.5 Face information management interface
學(xué)生版客戶端各模塊功能均由登錄校內(nèi)URP教務(wù)系統(tǒng)后實時爬取各對應(yīng)模塊信息。在登錄與爬蟲模塊均采用Session保存Cookie信息。首先將用戶輸入的賬號,密碼,與調(diào)用百度通用文字識別api識別下載至本地的驗證碼的結(jié)果,作為請求數(shù)據(jù),模擬瀏覽器向http://192.168.16.208/校內(nèi)URP網(wǎng)址進(jìn)行session.post請求。通過BeautifulSoup解析頁面title,如果為“學(xué)分制綜合教務(wù)”則登錄成功。若請求6次均失敗,可能原因為用戶輸入信息錯誤,少數(shù)情況下為百度通用文字識別失敗,則彈出提示框,重置調(diào)用百度API次數(shù)為1。
用戶登錄成功后,使用Session向各功能模塊地址發(fā)起Get或Post請求。對爬取下來的頁面使用XPath定位器或BeautifulSoup庫進(jìn)行元素解析存儲在列表中。冗余與無用的信息使用列表切片進(jìn)行過濾。連接本地命名為URP的SQlite數(shù)據(jù)庫,將列表數(shù)據(jù)存儲在數(shù)據(jù)庫各對應(yīng)表中。圖6為學(xué)生客戶端個人教務(wù)界面。
圖6 學(xué)生客戶端教務(wù)界面Fig.6 Student client educational administration interface
客戶端加載URP綜合教務(wù)系統(tǒng)校內(nèi)網(wǎng)址,通過執(zhí)行Javascript腳本填充用戶輸入的賬號、密碼,同時調(diào)用百度通用文字識別接口進(jìn)行驗證碼識別,再運(yùn)行Javascript腳本填充驗證碼識別結(jié)果。圖7為教師客戶端教務(wù)界面。
圖7 教師客戶端教務(wù)界面Fig.7 Teacher client educational administration interface
本課題主要使用網(wǎng)絡(luò)爬蟲、Qt Designer圖形界面設(shè)計、人臉識別技術(shù),QWebEngineView瀏覽器框架,SQLite、Neo4j數(shù)據(jù)庫等開發(fā)工具,實現(xiàn)了基于人臉識別的教務(wù)管理客戶端系統(tǒng),該系統(tǒng)具有良好的人機(jī)交互界面,并提高教務(wù)系統(tǒng)安全性。
引用
[1] 楊彩鳳,劉濤.非負(fù)矩陣分解算法用于人臉識別研究綜述[J].安慶師范大學(xué)學(xué)報(自然科學(xué)版),2020,26(3):62-69+95.
[2] 蔣阿娟,張文娟.人臉識別綜述[J].電腦知識與技術(shù),2019,15(2):173-174+190.
[3] 杜超.基于Python的聚焦爬蟲的初步設(shè)計與實現(xiàn)[J].現(xiàn)代制造技術(shù)與裝備,2020,56(12):30-31.
[4] 閆月影,郭海麗.基于卷積神經(jīng)網(wǎng)絡(luò)的人臉識別系統(tǒng)在教學(xué)管理中的應(yīng)用[J].中國教育技術(shù)裝備,2018(22):13-15.
[5] 果大軍.高職移動教務(wù)管理信息系統(tǒng)綜述[J].科技資訊,2017,15(13):174-175.
[6] 李傳科.基于Python的網(wǎng)頁數(shù)據(jù)爬蟲設(shè)計分析[J].信息與電腦(理論版),2020,32(24):130-132.