王維 楊路
摘 ?要:針對(duì)傳統(tǒng)考勤系統(tǒng)考勤效率低下等問題,開發(fā)了人臉識(shí)別考勤系統(tǒng)。該系統(tǒng)使用Linux操作系統(tǒng),選用Qt Creator 4.3.0開發(fā)平臺(tái),使用SQLite記錄后臺(tái)數(shù)據(jù)庫(kù)相關(guān)信息,基于OpenCV,實(shí)現(xiàn)了人臉識(shí)別、用戶基本信息管理、人臉識(shí)別打卡、查詢考勤記錄等功能。經(jīng)測(cè)試,該系統(tǒng)正常運(yùn)行,較好地完成了考勤工作。
關(guān)鍵詞:人臉識(shí)別;OpenCV;考勤系統(tǒng);Qt Creator
中圖分類號(hào):TP391.41 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
Design and Implementation of Attendance System based on Face Recognition
WANG Wei, YANG Lu
(College of Computer Science, Xianyang Normal University, Xianyang 712000, China)
wangw850@126.com; 1913205489@qq.com
Abstract: Aiming at low attendance efficiency of traditional attendance systems, this paper proposes to develop a face recognition attendance system. The system adopts the Linux operating system and Qt Creator 4.3.0 development platform, and uses SQLite to record background database related information. Based on the OpenCV library, it realizes functions such as face recognition, user basic information management, face recognition clock-in, and attendance record query. Test results show that the proposed system works normally and the attendance work is well completed.
Keywords: face recognition; OpenCV; attendance system; Qt Creator
1 ? 引言(Introduction)
當(dāng)前考勤管理系統(tǒng)應(yīng)用十分廣泛,主要借助RFID技術(shù)、指紋識(shí)別技術(shù)及人臉識(shí)別技術(shù)等識(shí)別方式。RFID考勤簽到是利用RFID自動(dòng)識(shí)別技術(shù)、紅外對(duì)射,及后臺(tái)管理軟件集成的一種考勤簽到方案,但該技術(shù)不能保證證件與持卡人的絕對(duì)統(tǒng)一,識(shí)別精度較低[1-2]。指紋識(shí)別技術(shù)通過采集指紋,保存特征碼到指紋數(shù)據(jù)庫(kù),進(jìn)行身份識(shí)別時(shí),通過特征匹配算法將采集到的指紋和指紋數(shù)據(jù)庫(kù)中的指紋進(jìn)行匹配,從而進(jìn)行身份的驗(yàn)證[3]。但指紋數(shù)據(jù)被盜后,會(huì)造成信息的丟失[4]。而人臉識(shí)別技術(shù)能夠有效地避免以上問題,同時(shí)識(shí)別精度較高,安全性也較高。因此,人臉識(shí)別技術(shù)成為考勤系統(tǒng)最為合適的選擇。
人臉識(shí)別技術(shù)是以生物特征為基礎(chǔ),借助計(jì)算機(jī)技術(shù),通過對(duì)人臉的特征進(jìn)行分析與確認(rèn),實(shí)現(xiàn)對(duì)不同人臉的精確識(shí)別。人臉識(shí)別技術(shù)包含三個(gè)步驟,即人臉圖像采集、人臉檢測(cè)及人臉識(shí)別。人臉圖像采集是借助攝像頭采集人臉的圖像,比如靜態(tài)圖像、動(dòng)態(tài)圖像,不同位置、不同表情等方面的圖像;人臉檢測(cè)主要用于人臉識(shí)別的預(yù)處理,即在圖像中準(zhǔn)確定位人臉的位置和大小,主流的人臉檢測(cè)算法是采用Adaboost學(xué)習(xí)算法;人臉識(shí)別是將檢測(cè)到的人臉與已存的人臉庫(kù)中的人臉進(jìn)行對(duì)比,得出兩者的相似度值[5-6]。
2 ? 系統(tǒng)總體設(shè)計(jì)(Overall system design)
整個(gè)系統(tǒng)使用Linux操作系統(tǒng),基于Qt Creator 4.3.0開發(fā)平臺(tái),選用SQLite數(shù)據(jù)庫(kù)管理系統(tǒng),使用OpenCV完成開發(fā)工作。其中,OpenCV為開源且跨平臺(tái)的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫(kù),由C語言和少量的C++語言實(shí)現(xiàn),屬于輕量級(jí)并且運(yùn)行效率較高的軟件庫(kù),能夠運(yùn)行在Windows、Linux等操作系統(tǒng)上,可移植性好。OpenCV向上層提供大量的函數(shù)接口,不僅包括C++接口,同時(shí)也有Java、Python、C#等許多語言接口,主要功能是實(shí)現(xiàn)計(jì)算機(jī)對(duì)圖像數(shù)據(jù)的處理,以及計(jì)算機(jī)視覺方面的相關(guān)算法,在物體識(shí)別、圖像分割、人臉識(shí)別等領(lǐng)域應(yīng)用廣泛[7]。
人臉識(shí)別考勤系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的總體功能模塊如圖1所示。
用戶系統(tǒng)功能詳細(xì)介紹如下:
(1)實(shí)時(shí)顯示時(shí)間:在用戶界面實(shí)時(shí)顯示當(dāng)前的時(shí)間,用戶可以看到當(dāng)前打卡的時(shí)間是否遲到。
(2)顯示公告信息:根據(jù)時(shí)間滾動(dòng)查詢公告信息表中的內(nèi)容,將公告的內(nèi)容和時(shí)間顯示在界面中。
(3)人臉識(shí)別打卡:通過采集用戶的人臉圖像信息打卡成功,并且在考勤信息表中添加用戶的考勤信息。
(4)查詢考勤記錄:用戶可以通過工號(hào)查詢自己的考勤記錄,使得考勤信息透明化。
管理員系統(tǒng)功能詳細(xì)介紹如下:
(1)管理員注冊(cè):管理員注冊(cè)時(shí)需要添加自己的基本信息,也要采集面部信息才能完成注冊(cè)。
(2)管理員登錄:管理員通過賬號(hào)和人臉識(shí)別進(jìn)入系統(tǒng),如果兩者任意一個(gè)與數(shù)據(jù)庫(kù)的內(nèi)容不匹配將登錄失敗。
(3)用戶信息管理:系統(tǒng)管理員可以對(duì)用戶基本信息進(jìn)行錄入和面部圖像信息采集以及查詢、刪除用戶信息。
(4)公告信息管理:管理員可以發(fā)布、刪除或者修改自己權(quán)限內(nèi)所管理的通知內(nèi)容。
(5)考勤信息統(tǒng)計(jì):當(dāng)用戶打卡成功后,管理員登錄管理員系統(tǒng)進(jìn)入考勤信息模塊,該模塊將會(huì)展示所有用戶的考勤狀態(tài),并且以餅狀圖和數(shù)字的形式顯示考勤信息。
(6)管理員信息管理:管理員分為普通管理員和超級(jí)管理員,將管理員的權(quán)限劃分等級(jí),不同的權(quán)限處理不同的事務(wù)。
3 ? 系統(tǒng)具體實(shí)現(xiàn)(System implementation)
3.1 ? 用戶信息管理模塊算法設(shè)計(jì)
該模塊是在menu.ui界面完成主要工作。信息錄入,主要錄入姓名、工號(hào)、性別等信息。錄入好用戶信息后點(diǎn)擊addbt按鈕觸發(fā)on_addbt_clicked()槽函數(shù),該函數(shù)使用insert into語句將用戶的基本信息插入用戶信息表中。點(diǎn)擊select按鈕觸發(fā)on_selectbt_clicked()槽函數(shù),完成對(duì)用戶信息的查詢功能。采集人臉信息時(shí)點(diǎn)擊openbt按鈕,觸發(fā)on_openbt_clicked()槽函數(shù),完成打開攝像頭并截取十張人臉圖像信息,并進(jìn)行處理。點(diǎn)擊“開始訓(xùn)練”按鈕觸發(fā)on_starttrainbt_clicked()槽函數(shù),在函數(shù)中啟動(dòng)線程完成對(duì)采集信息的訓(xùn)練。
用戶信息添加流程圖如圖2所示。
3.2 ? 人臉識(shí)別打卡模塊算法設(shè)計(jì)
人臉識(shí)別打卡模塊先采集人臉照片訓(xùn)練人臉模型,然后進(jìn)行人臉檢測(cè),實(shí)現(xiàn)打卡功能,具體算法如下:
(1)準(zhǔn)備人臉數(shù)據(jù)集:
通過攝像頭采集不同的人臉照片,對(duì)照片進(jìn)行處理,將處理好的照片全部放到指定文件夾中存儲(chǔ)。人臉檢測(cè)模型由OpenCV官方提供,但面部信息識(shí)別模型需要自己訓(xùn)練。
圖像采集部分負(fù)責(zé)采集圖像,將來自外部設(shè)備的圖像轉(zhuǎn)換成可處理的數(shù)字圖像格式。選用Z301P芯片的USB攝像頭,驅(qū)動(dòng)程序采用Linux下常用的通用驅(qū)動(dòng)spca5xx。Linux通過讀寫設(shè)備文件的方式訪問和控制USB攝像頭,使用統(tǒng)一程序設(shè)計(jì)接口V4L(Video4Linux)實(shí)現(xiàn)視頻圖像的采集[8]。
(2)數(shù)據(jù)標(biāo)記好后,使用OpenCV提供的相關(guān)訓(xùn)練模型接口進(jìn)行模型的訓(xùn)練:
Ptr
Model->train(images,labels);//將采集的圖片路徑和標(biāo)簽傳參,訓(xùn)練人臉模型。
Model->save("MyFaceFisherModel.xml");//訓(xùn)練模型是xml文件,將文件保存起來。
(3)訓(xùn)練好文件后進(jìn)行人臉檢測(cè)。通過攝像頭打卡進(jìn)行人臉信息的采集,框出人臉的位置:
CascadeClassifier cascade;
cascade.load("haarcascade_frontalface_alt.xml");//加載人臉檢測(cè)的模型。
cascade.detectMultiScale(gray,faces,
1.1,2,0,CV_HAAR_SCALE_IMAGE,Size(30,30));//檢測(cè)人臉的方法
(4)將檢測(cè)到的人臉信息進(jìn)行識(shí)別:
Ptr
modelPCA->load("MyFaceFisherModel.xml");//加載剛才訓(xùn)練好的人臉模型
predict=model->predict(image);//返回預(yù)測(cè)的標(biāo)簽
(5)人臉識(shí)別后用戶信息插入功能:
如果五次預(yù)測(cè)的標(biāo)簽相同,說明識(shí)別正確。當(dāng)識(shí)別出正確人臉信息之后使用select語句查詢SQLite數(shù)據(jù)庫(kù)中考勤信息表的用戶信息。如果用戶信息可以查詢到已經(jīng)打卡則調(diào)用QMessageBox::about(this,"提示",message);顯示已經(jīng)打卡,如果用戶信息查詢不到信息則調(diào)用QMessageBox::about(this,"提示",message)顯示打卡成功,并且將打卡信息使用insert into語句插入考勤信息表中。
人臉識(shí)別打卡模塊流程圖如圖3所示。
4 ? 系統(tǒng)測(cè)試(System testing)
系統(tǒng)經(jīng)過測(cè)試,能夠正常運(yùn)行。其中,用戶信息管理模塊實(shí)現(xiàn)了普通管理員對(duì)自己所管理用戶的個(gè)人基本信息進(jìn)行錄入,同時(shí)實(shí)現(xiàn)了對(duì)用戶面部圖像信息的采集和識(shí)別模型的訓(xùn)練。單擊“打開攝像頭”按鈕,攝像頭獲取圖像信息,并且輸出到屏幕;單擊“采集頭像”按鈕,通過攝像頭截取十張人臉圖片信息,放入指定文件夾;選擇訓(xùn)練生成的文件和訓(xùn)練文件,單擊“開始訓(xùn)練”,在指定文件夾下生成訓(xùn)練好的模型。用戶信息管理模塊測(cè)試運(yùn)行界面圖如圖4所示。
用戶人臉識(shí)別打卡模塊的主要功能是打開攝像頭采集用戶面部圖像信息,與之前訓(xùn)練好的模型進(jìn)行對(duì)比,對(duì)比成功則將用戶基本信息插入考勤信息表中并顯示打卡成功。用戶人臉識(shí)別打卡模塊測(cè)試運(yùn)行界面圖如圖5所示。
5 ? 結(jié)論(Conclusion)
該系統(tǒng)基于Linux操作系統(tǒng),使用Qt Creator 4.3.0開發(fā)平臺(tái)進(jìn)行開發(fā),使用OpenCV當(dāng)中的人臉識(shí)別相關(guān)接口實(shí)現(xiàn)人臉識(shí)別打卡模塊,使用SQLite數(shù)據(jù)庫(kù)存儲(chǔ)和統(tǒng)計(jì)系統(tǒng)需要的所有信息。系統(tǒng)能夠正常工作,界面交互性好,操作簡(jiǎn)單,而且具有一定的可移植性,能夠完成公司或者學(xué)??记诠ぷ鞯幕緲I(yè)務(wù)流程,更有效地完成了考勤工作,提高了管理者的工作效率。
參考文獻(xiàn)(References)
[1] 張智文.射頻識(shí)別技術(shù)理論與實(shí)踐[M].北京:中國(guó)科學(xué)技術(shù)出版社,2008:286-305.
[2] 代懋玥.基于Web和RFID技術(shù)的人事考勤管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2019.
[3] 劉曉莉,劉曉靜.基于指紋識(shí)別技術(shù)的考務(wù)管理系統(tǒng)[J].辦公自動(dòng)化,2021(04):61-62.
[4] 季善東.指紋識(shí)別技術(shù)與考勤系統(tǒng)應(yīng)用研究[D].南京:南京郵電大學(xué),2017.
[5] 梁文莉.基于獨(dú)立成分分析的人臉識(shí)別算法研究[D].西安:西安科技大學(xué),2012.
[6] 朱偉.OpenCV圖像處理編程實(shí)例[M].北京:電子工業(yè)出版社,2016:3-19.
[7] LI Y, LI Y H, LI H R. Face check in system based on OpenCV[J]. International Core Journal of Engineering, 2021, 7(4):274-278.
[8] 周錦陽(yáng),吳哲,宋廣.基于嵌入式Linux的視頻通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].船舶電子工程,2019,39(10):101-105.
作者簡(jiǎn)介:
王 ?維(1981-),女,碩士,講師.研究領(lǐng)域:智能信息處理,嵌入式系統(tǒng).
楊 ? 路(1996-),男,本科生.研究領(lǐng)域:軟件開發(fā).