高艷,徐麗麗
(山西農業大學信息學院,太谷030800)
隨著人工智能技術的不斷發展,人臉識別技術應用到了生活中的方方面面,如安防、會議、交通等[1]。目前,很多高校仍然采用傳統的點名方式來完成學生考勤,本文采用人臉識別技術應用到課堂簽到中,不僅可以有效提高考勤的效率,同時可以避免出現學生代替考勤等情況[2-3]。
人臉識別技術包含人臉檢測和人臉識別。人臉識別的基本原理是將攝像頭捕捉到的圖像進行人臉檢測,將檢測到的人臉特征與系統庫中的人臉的特征進行對比,達到一定的相似度(閾值)則人臉識別成功,否則識別失敗[4]。本文采用face_recognition 庫完成人臉識別。
face_recognition 庫是基于Python 語言開發的開源人臉識別項目,是基于dlib 開源庫的深度學習模型進行構建,在LFW 數據集上測試的成功率高達99.38%[5]。在人臉識別過程中,face_recognition 會采用人臉的68個特征點與庫中人臉特征點進行對比來完成人臉識別過程,特征點坐標如圖1 所示,包含臉的輪廓,眉毛、眼睛、鼻子、嘴的特征。

圖1 人臉特征坐標
基于C/S 架構以及Python 語言的GUI 有PyQt5、Tkinter 等,本系統界面的設計采用Python 標準庫Tkinter 完成。界面如圖2 所示。界面中攝像頭實時捕捉并完成人臉檢測的圖像顯示在畫布中,并完成人臉檢測及人臉定位。除此之外包括人臉采集及簽到按鈕,以及簽到時會顯示“簽到成功”或者“簽到失敗”的標簽和學號、姓名、班級、簽到時間的輸入框。畫布中實時顯示攝像頭圖像部分代碼如下:


圖2 人臉簽到系統界面
人臉檢測及定位使用dlib 庫完成,具體的代碼如下:


系統中的數據庫采用MySQL 數據庫,需要安裝PyMySQL 驅動才能進行數據庫的連接。數據庫中包含兩張表,分別是學生基本信息表(見表1)和學生簽到表(見表2)。學生基本信息表包含學號、姓名、班級以及學生照片。簽到表包含學號和簽到時間。

表1 學生基本信息表

表2 學生簽到表
數據庫連接及游標定義代碼如下:

點擊人臉采集功能時,會出現一個新的窗口,在新的窗口中需要輸入學號,輸入學號之后點擊保存按鈕(見圖3),可以將點擊時刻攝像頭捕捉到的圖像,并完成人臉定位裁剪后返回的人臉圖像進行保存,保存的人臉圖像的名稱為“學號.jpg”,這樣命名的原因是在實現簽到成功時,根據庫中匹配成功的人臉的學號進行該學生其他信息的查詢及顯示功能的實現。

圖3 人臉采集界面
簽到流程如圖4 所示,點擊簽到按鈕,會檢測當前攝像頭人臉圖像,并確定人臉位置進行裁剪,返回裁剪后的圖像,采用face_recognition 庫的face_encodings 函數對該圖像和人臉庫中的圖像進行編碼,再利用com?pare_faces 函數將庫中圖像編碼與該圖像編碼進行特征比對,tolerance 設置為0.4。當匹配的結果為True時,將庫中匹配的人臉圖片的學號以及簽到時間加入到數據庫,并根據學號在數據庫中找到學號、姓名、編輯、當前簽到時間,顯示在窗口對應的文本框中,并在標簽上顯示“簽到成功,歡迎**”,并進行播報,否則在標簽中顯示“簽到失敗”并進行播報,完成整個人臉識別簽到過程。人臉識別過程代碼如下:


圖4 簽到流程圖
無論簽到成功與否,都進行語音播報,語音播報功能的完成調用百度的API 來,即先用百度API 生成mp3 格式音頻文件,利用playsound 庫的playsound 函數進行語音播報即可。首先需要在百度云的官網申請AppID、API Key 以及Secret Key,調用pip install baiduaip 進行API 的安裝及使用。播報功能實現的代碼如下:

本文采用人臉識別技術進行課堂簽到,可以有效解決傳統人工點名效率低下以及別人代替簽到等問題。系統設計相對簡單,主要是針對確定課程的學生完成人臉識別的簽到功能即可。要進行大規模的應用,還需要對系統進行進一步完善,如需要加上課程的信息、教師的信息、學生上課的信息以及相關界面的設計等。