董雷剛,崔曉微,張 丹,張 華
(1.大慶師范學(xué)院計(jì)算機(jī)科學(xué)與信息技術(shù)學(xué)院,黑龍江 大慶 163712;2.東華大學(xué)信息科學(xué)與技術(shù)學(xué)院,上海 201620)
學(xué)生管理工作是各高校中一項(xiàng)非常重要的工作[1,2],而學(xué)生晚間歸寢情況的統(tǒng)計(jì)與管理又是學(xué)生管理工作中的一個(gè)重要部分,既是維護(hù)學(xué)校正常的秩序,也涉及到學(xué)生的人身安全。目前,高校對(duì)學(xué)生晚間歸寢情況的統(tǒng)計(jì)基本上都是依靠人工挨個(gè)宿舍去查詢,隨著學(xué)校招生規(guī)模的擴(kuò)大,學(xué)生晚間歸寢的管理工作所涉及的數(shù)據(jù)量越來越大,任務(wù)也越來越重,使學(xué)校不得不增加人力來完成任務(wù)。但是,這種方式存在著效率低、易出錯(cuò)、統(tǒng)計(jì)繁瑣、對(duì)學(xué)校的管理提供決策信息較為困難等缺點(diǎn)。基于上述原因,本文設(shè)計(jì)一種智能考勤系統(tǒng),以人臉識(shí)別技術(shù)為基礎(chǔ),采用嵌入式Linux操作系統(tǒng),QT軟件、SQL server數(shù)據(jù)庫、OpenCV、以及Android技術(shù)進(jìn)行開發(fā)設(shè)計(jì)。
該系統(tǒng)主要應(yīng)用于學(xué)生宿舍的歸寢管理[3-4],由人臉識(shí)別終端、后臺(tái)數(shù)據(jù)庫、Web客戶端、Android客戶端組成,如下圖所示。采集終端對(duì)人臉原始圖像進(jìn)行采集,將結(jié)果通過TCP/IP網(wǎng)絡(luò)傳輸至后臺(tái)數(shù)據(jù)庫,并生成相應(yīng)的考勤記錄。用戶可通過Web客戶端瀏覽整個(gè)宿舍樓的歸寢情況,以及每個(gè)宿舍的學(xué)生歸寢情況,也可查看一段時(shí)間內(nèi)各學(xué)生的歸寢情況。用戶也可以通過Android手機(jī)客戶端了解學(xué)生的歸寢情況,這主要面向于負(fù)責(zé)學(xué)生管理的老師。

圖1 系統(tǒng)示意圖
該終端主要由攝像頭、Arm處理器模塊(包含網(wǎng)卡)、顯示屏、電源適配器等組成。ARM處理器搭載Linux操作系統(tǒng)作為微處理器系統(tǒng),負(fù)責(zé)終端的計(jì)算和管理工作,對(duì)于顯示屏上的操作界面則采用QT軟件進(jìn)行開發(fā)。
該終端功能是獲取人臉原始圖像并進(jìn)行識(shí)別[5],然后將識(shí)別結(jié)果通過網(wǎng)絡(luò)傳至數(shù)據(jù)庫,其中,最主要的是人臉圖像的采集與識(shí)別。Qt下的OpenCV技術(shù),該技術(shù)已廣泛用于人機(jī)互動(dòng)、物體識(shí)別、圖象分割、人臉識(shí)別、動(dòng)作識(shí)別、運(yùn)動(dòng)跟蹤、機(jī)器視覺等多處,因此采用OpenCV,并根據(jù)PCA算法,計(jì)算測試和訓(xùn)練圖像的特征來完善該考勤系統(tǒng)。人臉識(shí)別的過程可以分為三個(gè)階段:人臉檢測、人臉訓(xùn)練、人臉識(shí)別。
使用capture=cvCaptureFromCAM(0)獲取攝像頭,如果capture打開攝像頭成功,則frame=cvRetrieveFrame(capture),獲得由cvGrabFrame函數(shù)抓取的圖片,frame就是這張圖片的指針,然后把這張圖片(frame)進(jìn)行人臉檢測(就是檢測這張圖片中人臉的位置)。
先用cvCvtColor()把攝像頭捕捉的彩色圖像轉(zhuǎn)換成灰度[6];然后用cvEqualizeHist()實(shí)現(xiàn)灰度圖像直方圖均衡化;接著用cvLoad()加載分類器(進(jìn)行人臉檢測的算法),函數(shù)的參數(shù)是分類器的絕對(duì)路徑,該分類器是把opencv庫加到QT中時(shí)自動(dòng)生成的。利用該算法從灰度圖像中檢測出人臉,cvHaarDetectObjects會(huì)返還一個(gè)指針,通過該指針,利用cvGetSeqElem()函數(shù)得到一個(gè)指向檢測到人臉屬性的指針,該指針可以確定人臉的位置、長、寬;利用cvRetangle()函數(shù)在這張整體圖片的人臉位置處畫出一個(gè)矩形(用矩形圈出人臉);保存該矩形圈出的人臉圖像,用于后面的人臉訓(xùn)練。
人臉識(shí)別是靠.txt文檔來讀取該人臉的學(xué)號(hào)和該人臉?biāo)诘穆窂剑枰⒁粋€(gè)train.txt文檔,文檔里記錄了學(xué)號(hào)和人臉保存的位置(為了提高人臉識(shí)別的準(zhǔn)確率,每個(gè)學(xué)號(hào)訓(xùn)練了兩張圖片),如表1所示。

表1 人臉圖像表
加載訓(xùn)練圖像集(train.txt中的內(nèi)容):計(jì)算出train.txt中有多少個(gè)人臉圖像,分配人臉圖像存儲(chǔ)空間和人臉I(yè)D號(hào)存儲(chǔ)空間---faceImgArr,然后加載人臉圖像,用cvLoadImage把train.txt中的信息讀取到faceImgArr空間中。
進(jìn)行主成分分析(計(jì)算特征值):cvAlloc()分配投影矩陣,也就是為train.txt文檔中的圖像分配空間;接著,用cvCreateMat()分配主特征值存儲(chǔ)空間;然后用cvCreateImage()分配平均圖像的存儲(chǔ)空間;設(shè)定PCA分析結(jié)束條件:cvTermCriteria;計(jì)算平均圖像,特征值,特征向量:cvCalcEigenObjects。
用cvEigenDecomposite將訓(xùn)練圖集投影到子空間中,將訓(xùn)練階段得到的特征值,投影矩陣等數(shù)據(jù)存為.xml文件,以備人臉識(shí)別時(shí)使用。
把人臉數(shù)據(jù)存儲(chǔ)以后,就可以進(jìn)行人臉識(shí)別[7,8]了。建立一個(gè)test.txt來存儲(chǔ)人臉檢測時(shí)圈出的人臉圖像(這張圖像是用來識(shí)別的,第二部圈出的圖像是進(jìn)行人臉訓(xùn)練用于人臉是別的);加載測試圖像,操作與加載訓(xùn)練圖像集的步驟一樣,不同之處是cvLoadImage把test.txt中的信息讀取到faceImgArr空間中。用loadTrainingData加載人臉訓(xùn)練時(shí)保存到.xml文件中的訓(xùn)練結(jié)果,然后cvEigenDecomposite將測試圖像投影到子空間中,最后找出測試人臉的特征值和.xml文件中的特征值較近的那一個(gè),輸出它的ID。
本系統(tǒng)的數(shù)據(jù)存儲(chǔ)分為兩部分:將訓(xùn)練階段得到的特征值,投影矩陣等數(shù)據(jù)存為.XML文件,以備測試時(shí)使用,XML文件存放于臉部識(shí)別終端,用于本地快速完成人臉的識(shí)別;用于服務(wù)器端的數(shù)據(jù)存儲(chǔ)則采用SQL SERVER數(shù)據(jù)庫,存儲(chǔ)的信息主要包括學(xué)生的基本信息、學(xué)生的宿舍分布信息、考勤記錄等。其中學(xué)生的基本信息和宿舍分布信息由手工錄入;考勤記錄是在學(xué)生進(jìn)行考勤時(shí)自動(dòng)形成的信息,包括考勤的學(xué)生姓名、宿舍、時(shí)間、考勤的結(jié)果,它是管理人員進(jìn)行各種查詢統(tǒng)計(jì)操作的基礎(chǔ)。學(xué)生信息、住宿信息和考勤信息的數(shù)據(jù)實(shí)體聯(lián)系圖如下所示。

圖2 實(shí)體聯(lián)系圖
系統(tǒng)的后臺(tái)處理部分與前臺(tái)瀏覽部分采用B/S架構(gòu),使得數(shù)據(jù)的處理與查詢能夠分開操作。Web內(nèi)容都是存儲(chǔ)在Web服務(wù)器上的。Web服務(wù)器所使用的是HTTP協(xié)議,這些HTTP服務(wù)器存儲(chǔ)了因特網(wǎng)中的數(shù)據(jù),如果HTTP客戶端發(fā)出請求的話,它們會(huì)提供數(shù)據(jù)。客戶端向服務(wù)器發(fā)送HTTP請求,服務(wù)器會(huì)在HTTP響應(yīng)中回送所請求的數(shù)據(jù),如圖3所示。

圖3 web客戶端和服務(wù)器
服務(wù)器部分主要用來存儲(chǔ)數(shù)據(jù)庫的內(nèi)容,并且根據(jù)客戶端提出的請求進(jìn)行相關(guān)的查詢和統(tǒng)計(jì)操作,同時(shí)還具備學(xué)生信息的管理、考勤的管理、考勤的維護(hù),以及系統(tǒng)維護(hù)等功能。Web客戶端用來供用戶進(jìn)行操作。主要是向服務(wù)器端提出各種操作請求,并將服務(wù)器的處理結(jié)果顯示出來。包括查詢各宿舍的住宿信息,當(dāng)天的考勤結(jié)果信息,缺勤的學(xué)生及住宿信息,以及按照不同時(shí)間段對(duì)考勤情況進(jìn)行查詢等操作。
為了充分利用移動(dòng)網(wǎng)絡(luò),提高輔導(dǎo)員的工作效率,加入了Android客戶端,它能操作的內(nèi)容與WEB客戶端基本相同,目的是方便輔導(dǎo)員能隨時(shí)掌握所管理學(xué)生的晚間歸寢情況。該客戶端通過移動(dòng)網(wǎng)絡(luò)連接到后臺(tái)服務(wù)器,并與其進(jìn)行交互。
在服務(wù)器端,采用的是SSH框架,struts 2集合了JSON插件,服務(wù)器和客戶端的信息交互采用的JSON來傳輸,由于在服務(wù)器端用了Struts 2,所以又裝了一個(gè)JSON插件。這樣,很輕易的就把服務(wù)器端的信息用JSON的形式發(fā)送到了手機(jī)端。
首先,在服務(wù)器端搭建好SSH框架,struts.xml配置如下:

在手機(jī)端有一個(gè)緩存類,主要用于緩存一些手機(jī)端需要訪問的數(shù)據(jù),這樣的好處是可以達(dá)達(dá)節(jié)省手機(jī)和服務(wù)器的交互。首先編寫手機(jī)端的協(xié)議,包括用戶向服務(wù)器發(fā)送請求,同時(shí)服務(wù)器反饋給手機(jī)端信息;然后是登錄協(xié)議;接著是User實(shí)體類,主要用于保存用戶信息和口令數(shù)據(jù);最后就是LoginActivity里邊判斷登錄的操作,以提示登錄成功與否。
本文設(shè)計(jì)了學(xué)生晚間歸寢考勤系統(tǒng)。圖像采集終端能實(shí)現(xiàn)對(duì)人臉圖像的采集和識(shí)別功能,并將考勤結(jié)果通過網(wǎng)絡(luò)傳送到數(shù)據(jù)庫,管理員可通過web客戶端或Android客戶端對(duì)考勤記錄進(jìn)行查詢,避免了派專人進(jìn)入宿舍查寢,有效地提高了工作效率。
[1]康健.高校考勤管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].科技向?qū)В?012(3):34
[2]布瑪麗亞木.玉蘇甫.高校考勤管理系統(tǒng)設(shè)計(jì)研究[J].企業(yè)技術(shù)開發(fā),2011(8):189-190.
[3]高猗男.高校綜合考勤管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連海事大學(xué)碩士學(xué)位論文,2010.
[4]公磊,周聰.基于Android的移動(dòng)終端應(yīng)用程序開發(fā)與研究[J].計(jì)算機(jī)與現(xiàn)代化,2008(8):85-89.
[5]王守佳.基于圖像的人體檢測跟蹤和人臉識(shí)別的研究[D].吉林:吉林大學(xué)碩士學(xué)位論文,2013.
[6]張煥朗.基于監(jiān)控系統(tǒng)的人臉跟蹤與人臉識(shí)別[D].上海:上海交通大學(xué)碩士學(xué)位論文,2013.
[7]黃泉龍.基于PCA的人臉識(shí)別研究[D].西安:西安電子科技大學(xué)碩士學(xué)位論文,2012.
[8]齊禮成.基于人臉識(shí)別考勤系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué)碩士學(xué)位論文,2012.