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

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

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

圖2 實體聯系圖
系統的后臺處理部分與前臺瀏覽部分采用B/S架構,使得數據的處理與查詢能夠分開操作。Web內容都是存儲在Web服務器上的。Web服務器所使用的是HTTP協議,這些HTTP服務器存儲了因特網中的數據,如果HTTP客戶端發出請求的話,它們會提供數據??蛻舳讼蚍掌靼l送HTTP請求,服務器會在HTTP響應中回送所請求的數據,如圖3所示。

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

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