基于OpenCV的人脸 考勤系统
| ? | ? |
| ? | ? |
| ? | ? |
| ? |
詳細的設計流程點擊鏈接:
https://wenku.baidu.com/view/871e4bb7974bcf84b9d528ea81c758f5f71f2952?fr=uc
?
?
修訂記錄
?
| 版本號 | 修改記錄 | 修改者 | 修改日期 |
| V1.0 | 初次編寫 | WenJie | 2019.05.11 |
| ? | ? | ? | ? |
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
目 ?錄
第一章 引言....................................................................................... 5
1 編寫目的.................................................................................... 5
2 項目背景.................................................................................... 5
3 參考資料.................................................................................... 5
第二章 程序軟件結構........................................................................ 6
1 程序整體結構............................................................................ 6
2 數據交互層Controller................................................................ 6
3 實體模型層Entity...................................................................... 7
4 圖像處理層ImageProcess.......................................................... 8
5 界面顯示層View....................................................................... 8
6 資源文件.................................................................................. 12
7 其他文件.................................................................................. 13
第三章 開發環境搭建...................................................................... 14
1 MSVC 2015編譯器安裝............................................................. 14
2 QT IDE安裝............................................................................... 14
3 OpenCV人臉識別庫安裝.......................................................... 15
3.1 下載opencv3.4.1源碼與opencv_contrib3.4.1................. 16
3.2 Cmake3.11編譯Opencv3.4.1............................................ 16
3.3 MCVC 2015編譯............................................................... 17
第四章 系統詳細設計...................................................................... 20
1 數據庫設計.............................................................................. 20
2 人臉檢測流程.......................................................................... 20
3 人臉錄入流程.......................................................................... 21
4 人臉模型訓練流程................................................................... 23
5 人臉識別流程.......................................................................... 24
6、打卡記錄導出........................................................................ 26
第五章 總結..................................................................................... 28
第六章 參考文獻.............................................................................. 29
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
第一章 引言
1 編寫目的
為明確軟件需求,安排項目規劃與進度、組織軟件開發與測試,為后續軟件維護、修改提供技術支持,方便項目經理、設計人員、開發人員更快對本軟件熟練操作提供技術參考。
2 項目背景
隨著安全入口控制需要的快速增長,生物統計技術得到了新的重視。目前,微電子和視覺系統方面取得新進展,使該領域中高性能自動識別技術的實現代價降低到了可接受的程度,人臉識別是所有生物識別方法中應用最廣泛的技術之一。
人臉識別包括兩個重要部分,即人臉檢測部分和人臉識別部分。人臉檢測是在人臉識別的一個共性特征操作樣本模型的基礎上,將待檢測圖像樣本的任意子區域劃分為人臉圖像模式和非人臉圖像模式,在所獲取的圖像上如果檢測出存在人臉,則判斷出人臉所在的位置及人臉的大小。人臉識別是以人臉樣本模式個性特征為基礎進行的模式識別操作,它首先將人臉的特征提取出來,然后將此特征與已知的標準樣本特征進行匹配對比,從而識別及刻畫人臉。人臉識別技術是一個非常活躍的研究領域,它覆蓋了數字圖像處理、模式識別、計算機視覺、神經網絡、心理學、數學等諸多學科的內容。與此同時,人臉檢測和識別技術也在不斷的發展和進步,與指紋、虹膜等其他人體生物特征識別系統相比,人臉識別具有更加直接、友好、便捷等特點,因而容易為用戶所接受,并且其在身份驗證、公安刑偵、安全驗證、智能視頻監控等方面有著廣泛的應用。
3 參考資料
?
?
?
第二章 程序軟件結構
1 程序整體結構
圖1 程序整體結構圖
如上圖1程序整體結構圖所示,系統程序代碼分為數據交互層Controller、實體模型層Entity、圖像處理層ImageProcess、界面顯示層View以及資源文件resource.qrc和圖標配置文件set_icon.rc。
下面分別介紹每層中所包括的類。
2 數據交互層Controller
圖2 數據交互層結構圖
如上圖2中數據交互層結構圖所示,在數據交互層中包括兩個類:MainWindowController和SqlOperate。MainWindowController負責界面MainWindow類與圖像處理類ImageProcess的數據交換;SqlOperate承擔數據庫SQLite和界面之間的數據交換。
3 實體模型層Entity
圖3 實體模型層結構圖
如上圖3中所示,實體模型層中包括五個實體類:部門信息實體類DepartmentInfo、員工信息實體類EmployeeInfo和考勤記錄實體類RecordInfo三個基本實體類和由基本實體類組合而成的員工部門類EmployeeDepartment和員工部門考勤類EmployeeDepartmentRecord。
4 圖像處理層ImageProcess
圖4 圖像處理層結構圖
如上圖4中圖像處理層結構圖所示,圖像處理層功能包括人臉檢測與識別、拍照采集和模型訓練三大功能,對應的處理類分別為FaceDetection類、TakePicture類和ModelTrain類。在本系統的圖像處理中,引入了OpenCV圖像處理庫,圖像處理形式為Mat類型,而軟件頁面顯示類型為QImage類型,因此,為便于兩種類型圖像之間進行轉換,QImageMatConvertFunction類中通過靜態方法實現了兩種圖像類型的轉換。
5 界面顯示層View
圖5 頁面顯示層結構圖
如上圖5所示,頁面顯示層包括主頁面類MainWindow、部門管理類DeptManager、員工管理類EmployeeManager、記錄導出類ExportRecord和等待頁面類QWaittingDialog。
MainWindow主頁面類界面如下圖6所示。頁面中包括日期時間顯示、照片錄入和模型訓練、部門管理、員工管理、考勤記錄和圖像顯示等內容。
圖6 MainWindow主頁面
圖7 DeptManager部門管理頁面
DeptManager部門管理頁面如上圖7所示。在此頁面中可以對單位企業內的部門進行增加、刪除、修改部門編號或名稱。
EmployeeManager員工管理頁面如下圖8所示。同圖7中的部門管理頁面的操作類似,在該頁面中對員工信息進行管理。
圖8 EmployeeManager員工管理頁面
圖9 ExportRecord記錄導出頁面
上圖9為ExportRecord記錄導出頁面圖。用戶可以根據部門、員工和日期時間三種方式來選擇導出記錄類型。在日期時間的選擇上,考慮到用戶使用的習慣,設置今天、上周、上個月三個快捷方式對日期和時間進行快速篩選。
QWaittingDialog等待頁面如下圖10所示。在用戶對輸入員工照片進行“模型訓練”時,需要耗費比較多的時間,需要用戶等到模型訓練結束后才可進行再次操作。
圖10 QWaittingDialog等待頁面
6 資源文件
圖11 資源文件結構圖
資源文件結構圖如上圖11所示。資源文件中包括軟件系統運行的圖片Image和軟件風格配置style.qss文件。
7 其他文件
圖12 其他文件結構圖
其他文件的結構圖如上圖12所示,僅包含一個圖標設置文件set_icon.rc,在set_icon.rc文件中,有一行命令:IDI_ICON1 ICON DISCARDABLE "64_icon.ico"來設置軟件的圖標。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
第三章 開發環境搭建
1 MSVC 2015編譯器安裝
對MSVC 2015 C++編譯器的安裝,基本為傻瓜式安裝,需要注意的是在如下圖13所示的選擇頁面上,記得勾選“Visual C++”選項。
?
圖13 Visual Studio安裝圖
2 QT IDE安裝
從QT官網http://download.qt.io/official_releases/qt/中下載Qt5.7.1 For MSVC2015版本軟件進行安裝。如下圖14為安裝成功后,QT的版本信息。
?
圖14 QT版本信息
在經過上述兩個步驟的安裝后,QT能夠自動找到步驟一中安裝的MSVC 2015編譯器,如下圖15所示。
?
圖15 QT編譯器信息
3 OpenCV人臉識別庫安裝
本人使用的OpenCV庫版本為3.4.1,因為在OpenCV3.0之后版本的OpenCV對Sift、Sufer等新算法沒有提供直接編譯好的動態庫來加載使用,因此必須自己編譯。這是因為Sift、Sufer算法專利現在是屬于哥倫比亞大學,因此OpenCV對這部分內容及“所謂的”不穩定模塊全都放到opencv_contrib中,且只在它的Github中能夠找到,OpenCV的官網上是沒有的。因此對于想使用Sift、Sufer、雙目立體匹配算法、結構光等新的算法及有專利權算法的,需要自行編譯。
3.1 下載opencv3.4.1源碼與opencv_contrib3.4.1
下載需要的Opencv3.4.1版本源碼:https://github.com/opencv/opencv/releases;
下載需要的opencv_contrib3.4.1版本源碼:https://github.com/opencv/opencv_contrib/releases
3.2 Cmake3.11編譯Opencv3.4.1
按照網上的Cmake3.11安裝步驟,安裝好Cmake3.11軟件后打開。
源碼路徑“Source Path”選擇下載好解壓后的Opencv3.4.1源碼,本文解壓到了D: Opencv3.4.1_Sourse路徑下,這個需要按照你的路徑自行選擇。編譯輸出路徑“Build Path”,路徑為D: Opencv3.4.1_Build,同樣這個需要按照你的路徑自行選擇。
?
圖16 Cmake3.11編譯Opencv3.4.1源碼(1)
單擊“configure”,選擇如下圖設置,單擊“Finish”即可開始編譯。這個時候Cmake會開始在build目錄下生成一些配置文件,如CMakeCache.txt 等。出現兩個done表示第一次編譯成功。
注意:這里選擇的編譯器版本要和自己本地的編譯器版本一致。下載的MSVC編譯器是64為就要用Win64,否則就用32位版本編譯器。
?
圖17 Cmake3.11編譯Opencv3.4.1源碼(2)
完成之后會在屏幕中間出現一堆Name和Value的參數,這里需要做兩項改動。
1、勾選BUILD_opencv_world選項,這樣,在調用動態庫dll時,只調用這一個就行了,不用根據功能選擇了,省了些麻煩。
2、找到OPENCV_EXTRA_MODULES_PATH將其設置成opencv_contrib的modules的路徑,例如E:/opencv_contrib-3.4.1/modules。
再次點擊Configure,然后點擊Generate,這時你可以看到在E:/opencv/tools/opencv_contrib目錄下已經生成了名為opencv.sln的VS工程。
3.3 MCVC 2015編譯
進入上面過程中配置的“Build Path”文件夾下面,使用Visual Studio 2015打開opencv.sln工程,重新生成解決方案,如下圖18所示。
圖18 MCVC2015編譯OpenCV工程(1)
然后打開VS項目后,在Debug x64模式下,再install操作。如下圖19所示。
圖19 MCVC2015編譯OpenCV工程(2)
注意:記得生成完debug的庫后,改為release x64,再來一遍上面install操作。
?
此時,有了E:\opencv\tools\opencv_contrib\install目錄。該目錄包含了我們需要的頭文件、庫文件。這個頭文件和庫文件就是將來我們在代碼工程中需要加入的OpenCV3.4.1的路徑。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
第四章 系統詳細設計
1 數據庫設計
?
圖20 數據表設計
如上圖20所示,系統中使用到三個實體類部門、員工和記錄,分別對應數據庫中的DepartmentInfo表、EmployeeInfo表和RecordInfo表。
2 人臉檢測流程
圖21 人臉檢測流程圖
如上圖21所示人臉檢測流程。界面MainWindow定時將攝像頭圖像以QImage的形式發送到人臉檢測類FaceDetection,FaceDetection在線程池中開啟人臉檢測流程,將人臉使用框圖定位后,將處理后圖像以QImage的形式發送到MainWindow中顯示出來。
如下圖22所示為人臉檢測效果圖。對于檢測到的人臉,圖像中用紅色框圖進行標記。
圖22 人臉檢測效果圖
3 人臉錄入流程
?
圖23 人臉錄入流程圖
圖24 人臉錄入界面圖
圖25 人臉錄入圖像保存路徑
人臉錄入操作流程如圖23所示。用戶點擊“拍照”按鈕后,將頁面中的人臉圖像進行進過人臉檢測處理后,保存到指定目錄(如圖25所示)下,循環10次后,在指定目錄下保存有10張人臉圖像供后續訓練人臉識別模型使用。
注意:此處的指定目錄為運行環境下faces文件夾下,目錄名“1”為員工編號。通過這種目錄名和員工編號一致的操作,建立起圖像標簽編號(即目錄名)和員工之間的對應關系。
4 人臉模型訓練流程
圖26 人臉模型訓練信息
人臉圖像錄入結束后,需要對剛才錄入的人臉圖像進行特征提取,即需要進行接下來的人臉模型訓練流程。點擊“訓練”按鈕,即開始模型訓練流程。在真正開始模型訓練前,需要將人臉圖像與其標簽建立一一對應關系。正如上節中所述,本系統中將人臉圖像存放的目錄名與標簽、員工編號建立對應關系,所以識別出的圖像標簽即員工編號。如上圖26所示,在運行目錄下TrainInfo子目錄下存放人臉圖片與標簽的對應信息TrainInfo.csv,描述了人臉圖像路徑與其標簽。在開始訓練時,將根據人臉圖像路徑讀取出對應人臉圖像,和其標簽一同作為人臉識別分類器的輸入進行訓練,從而得出人臉識別模型。模型訓練好之后,數據以XML文件格式存放在運行目錄下的Model子目錄。
圖27 模型數據保存路徑
注意:OpenCV3.4中有3中人臉識別算法(EigenFace、FisherFace和LBPH),所以本系統中對人臉圖像進行模型訓練時,可以對應得到3個算法的模型XML文件。
圖28 訓練等待過程
5 人臉識別流程
訓練好模型后,即可對模型中已有員工進行人臉識別。人臉識別過程如下圖29所示。人臉識別是在人臉檢測的基礎上,通過人臉識別分類器進行人臉圖像與模型中已有數據進行比對,得出人臉圖像所對應的標簽,即人臉識別結果,將此結果發送到MainWindow中。
圖29 人臉識別流程圖
?
圖30 打卡記錄保存
如圖30所示,MainWindow得到人臉識別標簽后,通過SqlOperate類查詢數據庫,得到該員工的姓名和部門名稱等信息。為記錄員工的打卡時間,MainWindow通過查詢系統當前日期和時間,將完整的員工打卡記錄保存到數據庫中,并在界面中顯示打卡信息。
6、打卡記錄導出
圖31 打卡記錄導出圖
用戶可以根據部門、員工和日期時間三種方式來選擇導出記錄類型。在日期時間的選擇上,考慮到用戶使用的習慣,設置今天、上周、上個月三個快捷方式對日期和時間進行快速篩選。
圖32 記錄導出成功圖
用戶勾選導出條件后,點擊“導出記錄到文件”按鈕,系統將記錄文件導出到運行目錄下的recordsFile子目錄,記錄文件名即為用戶所勾選的條件選項。記錄文件保存路徑如下圖33所示。
圖33 記錄文件保存路徑
打開該csv記錄文件,如下圖34所示。導出的記錄文件有員工編號、員工姓名、部門名稱和打卡時間四個必要字段組成。
圖34 記錄文件內容
?
?
?
?
?
?
?
?
第五章 總結
本文檔只是介紹作者在利用OpenCV3.4.1開發人臉考勤系統中的設計流程。文中所涉及的人臉識別算法的詳細介紹,各位可以在第六章中的參考文獻中查找。
本系統源碼各位可以加以下微信號獲取,作者會以壓縮包的形式給各位發送。壓縮包中內容包括:
1、編譯好的Opencv3.4.1(包括opencv_contrib3.4)
2、系統源代碼
3、系統構建運行目錄(包括數據庫、人臉檢測分類器等)
4、設計說明文檔
第六章 參考文獻
1、《人臉識別算法——EigenFace、FisherFace、LBPH
》網址:https://www.cnblogs.com/little-monkey/p/8118938.html
總結
以上是生活随笔為你收集整理的基于OpenCV的人脸 考勤系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php打印10以内减法表,幼儿10以内减
- 下一篇: System32下文件说明