王琴,米丹,周麗
(四川大學錦城學院,成都611731)
課堂是一個讓學生獲得知識、學習技能的場所,對每個學生的學習結果都起到了重要作用。但是在當今的大學校園中教室流動性較高,不同的課程所在的教室可能不同,因此學生沒有固定的教室和座位,并且不同的課程人數也有多有少,這就為部分學生的缺勤提供了機會,為教師的教學帶來了影響。因此,一個良好有效的考勤系統是保證課堂秩序、教師教學質量的關鍵。隨著計算機技術的飛速發展以及人工智能的再次興起,人臉識別技術也愈發完善,并且在公共安全、信息安全、金融等各個方面都有著廣泛的運用,因此也隨之出現了基于人臉識別的考勤方式。
現有的考勤方式主要有人工考勤、磁卡考勤和指紋考勤,但是這三種考勤方式都不可避免的存在一些漏洞。人工考勤主要通過教師上課口頭點名或手動簽到的方式,這種方式不僅效率低下,花費時間,并且還存在代答到或代簽到的現象。磁卡考勤主要通過機器刷卡的方式來考勤,這種方式較人工考勤來說效率較高,但仍然存在代刷卡的情況,此外,磁卡容易丟失、消磁,這也為考勤帶來了不便。指紋考勤的主要原理是通過對比實時指紋與提前錄入數據庫中指紋的相似度來進行考勤,相似度越高,就說明是同一個人的可能性越大。指紋考勤的方式效率較高并且不會存在代考勤的現象,但是對于指紋磨損或打卡方式不正確的情況則不能快捷準確地識別。
基于人臉識別的考勤不僅效率高,準確度高,實時性強,并且還能有效杜絕代考勤現象的發生,是一種較理想的考勤方式。因此隨著人工智能和人臉識別技術的發展和完善,基于人臉識別的考勤方式在不久的將來必會成為主流的考勤方式。
卷積神經網絡(Convolutional Neural Network,CNN)[1]是一種帶有卷積結構的深度神經網絡,卷積結構可以減少深層網絡占用的內存量,也可以減少網絡的參數個數,緩解模型的過擬合問題[2]。卷積神經網絡作為深度學習的代表算法之一,長期以來一直被廣泛運用在各個方面,尤其是圖像識別、人臉識別方面。與DNN全連接神經網絡相比,CNN 的輸入是一個圖像,通過參數共享、局部感受利用了圖像的局部信息通過卷積和池化提取圖像特征,使神經網絡需要訓練的參數大大減少,但是卻并沒有降低準確率。
早期的卷積神經網絡結構相對簡單,如經典的LeNet-5 模型,主要應用在手寫字符識別、圖像分類等一些相對單一的計算機視覺應用領域中[3]。隨著研究的深入以及計算機性能的提升,使得復雜網絡模型的實現成為可能,由此提出了名為AlexNet 的CNN 網絡模型,并且在圖像識別等反面上取得了重大的突破。AlexNet 的網絡框架與LeNet-5 類似,但網絡層次、結構更加復雜。除此之外,AlexNet 還采用了幾種新技術:①成功使用采用ReLu 作為激活函數,解決了傳統的Sigmoid 激活函數在深度網絡中的梯度彌散問題;②訓練過程中采用dropout 隨機忽略一部分神經元,以避免模型過度擬合,通過實踐證明了dropout 的效果[4]。VGGNet、GoogleNet 等模型也是CNN 中非常經典的模型。
CNN 網絡的結構主要有五層,分別為:輸入層、卷積層、池化層、全連接層和輸出層。其經典模型如圖1所示。

圖1 卷積神經網絡
(1)輸入層(Input layer)
輸入層通常為一張圖像所含信息構成的矩陣,如50×50×3(50×50 代表圖像的長、寬,3 代表圖像的通道數,一般為R、G、B 三個通道),矩陣中的數據為圖像中每個像素點的值。
(2)卷積層(Convolution layer)
卷積層主要增加輸入圖片的深度,用于學習輸入數據的特征表示,將原始數據映射到隱藏層特征空間,并且通過Relu、Sigmoid、Tanh 等非線性激活函數實現去線性化。
(3)池化層(Pooling layer)
池化層主要作用是對卷積層得到的特征結果進行壓縮,從而提取出更加重要的特征,并且通過減小矩陣的尺寸可以減少全連接的參數個數,加快計算速度,同時還可以有效防止過擬合現象的產生,池化層最常用的方法為最大池化和平均池化。
(4)全連接層(Full connected layer)
全連接層與DNN 中的全連接層相似卻又不盡相同。CNN 中全連接層的主要目的是將經過卷積和池化后的特征進行整合,形成一層或多層全連接層,實現高階的推理能力。
(5)輸出層(Output layer)
輸出層通常在全連接層后,用于輸出網絡的分類結果。
在本系統中,主要采用OpenCV+CNN+MySQL 的方法來實現。首先通過OpenCV 實時獲取攝像頭進行人臉的檢測與標定,再通過構建CNN 網絡進行人臉識別,最后使用MySQL 對數據進行管理,實現完整的考勤功能。
(1)OpenCV
OpenCV(Open Source Computer Vision Library,開源計算機視覺庫)是一個開源的計算機視覺和機器學習軟件庫,是在BSD 許可下發布的,因此它可以免費用于學術和商業用途,使用戶可以輕松利用和修改代碼。它具有C++、Python 和Java 接口,支持Windows、Linux、Mac OS、iOS 和Android 平臺[5]。OpenCV 在圖像識別、人臉識別等方面上有重大的作用,因此被廣泛的運用。
(2)MySQL
MySQL 是一個關系型數據庫管理系統,是最流行的關系型數據庫管理系統之一,將數據保存在不同的表中,這樣就增加了速度并提高了靈活性[6]。而且MySQL 還為Python、C、C++、Java 等多種編程語言提供了接口,可以方便有效地管理、檢查數據。除MySQL外,在本系統中還采用了Navicat for MySQL 這個可視化數據庫管理工具對數據庫進行管理,使用戶對數據的結構、關系和內容有更加清晰的認識。
系統主要分為兩個模塊,人臉識別(打卡)模塊和查看記錄模塊。系統界面和組織結構分別如圖2所示。

圖2 系統界面圖

圖3 系統組織結構圖
(1)人臉檢測與標定
通過OpenCV 調用攝像頭,將視頻流實時顯示在屏幕界面上,進行人臉檢測與人臉標定,將檢測到的人臉在視頻流中框出來,再將檢測到的人臉通過OpenCV中resize 函數調整大小并截取送入構建好的CNN 網絡中進行識別。
人臉識別部分通過CNN 網絡進行實現,構建流程為:
①收集全班同學的照片,每人10 張,并且要求不同表情、不同姿態,從而增加數據集的復雜度,使網絡更有可信度。
②對收集的圖片進行預處理:
1.對收集的圖片進行處理,統一處理為:大小為60×60,RGB 三通道,jpg 格式的彩色圖片,并且按照XXX(姓名縮寫)_XX(00-09)的格式進行重命名。
2.根據所有人的類別給對應的圖片打上類別標簽,并將圖片信息和類別信息相互對
應。
3.以7:2:1 的比例劃分訓練集、測試集和驗證集,并分別存儲在相應文件夾中。
宋萌枝的碩士論文《中國現代戲劇史上的薔薇花——袁昌英戲劇研究》[2],也論及弗洛伊德精神分析學說、女性主義和唯美主義對袁昌英戲劇創作的影響,此外,還涉及到袁昌英對于莎士比亞浪漫戲劇和現代主義藝術手法的借鑒。
4.將圖片信息和標簽信息轉化為numpy 庫中的array 矩陣格式,方便后續網絡的構建。
③搭建CNN 網絡。
本系統中CNN 網絡的結構總體基于LeNet-5 模型,結合實際情況進行了改進,主要為輸入層、3 層卷積層(激活函數為ReLU)、3 層最大池化層、3 層全連接層(激活函數為ReLU)、輸出層(激活函數為Softmax),并且采用了Dropout 防止過擬合。
④輸入訓練集圖片數據對網絡進行訓練,通過劃分小批次進行訓練使得網絡結果更加優化,并且通過驗證集、測試集數據進行驗證和測試,得出準確率。
⑤通過修改不同參數(如:卷積核的大小、將最大池化改為平均池化等)、增加網絡復雜度、增加迭代次數等措施對網絡結構進行優化,最終使準確率達到90%以上。
⑥將神經網絡模型進行保存,便于其他模塊的調用。
⑦將檢測到的人臉送入已保存的CNN 網絡中進行識別,得出識別結果。
(1)數據庫創建
通過Navicat for MySQL 可視化數據庫管理工具創建studentinfo 數據庫與student_information 數據表。數據表的結構如圖4 所示。

圖4 數據表結構圖
(2)數據庫寫入
通過Python 中的pymysql 庫連接已創建好的數據庫,將識別到的人名與識別時間寫入數據庫中。

圖5 數據庫寫入
(3)數據庫導出
連接并查詢數據庫中的信息,再通過Python 中的xlwt 庫創建一個Excel 表格,并將查詢到的結果寫入Excel 表格中。

圖6 數據庫導出
(4)數據顯示
通過Tkinter 庫的Treeview 函數在顯示界面上創建一個表格,再通過Python 中的xlrd 庫讀取Excel 表格中的數據,并顯示在界面上。

圖7 查看記錄
相比于人工考勤和磁卡考勤來說,人臉識別考勤前期需要的工作非常繁雜,需要提前采集學生的照片信息,并且對照片進行統一格式的處理,再訓練人臉識別的模型。但不可否認的是,人臉識別的考勤方式不僅方便、效率高、準確性高,而且極大程度上杜絕了代簽到的情況。因此,人臉識別的考勤方式未來必將成為一種主流的考勤方式,雖然人臉識別技術的發展已經非常快速,但人臉識別的考勤方式仍然存在許多待解決的問題。例如怎樣避免學生通過個人照片進行識別打卡、怎樣降低光照、角度、遮蔽物這些因素對識別結果造成的影響,等等,這些都是現在亟待解決的問題。