高艷,徐麗麗
(山西農(nóng)業(yè)大學(xué)信息學(xué)院,太谷030800)
隨著人工智能技術(shù)的不斷發(fā)展,人臉識(shí)別技術(shù)應(yīng)用到了生活中的方方面面,如安防、會(huì)議、交通等[1]。目前,很多高校仍然采用傳統(tǒng)的點(diǎn)名方式來完成學(xué)生考勤,本文采用人臉識(shí)別技術(shù)應(yīng)用到課堂簽到中,不僅可以有效提高考勤的效率,同時(shí)可以避免出現(xiàn)學(xué)生代替考勤等情況[2-3]。
人臉識(shí)別技術(shù)包含人臉檢測(cè)和人臉識(shí)別。人臉識(shí)別的基本原理是將攝像頭捕捉到的圖像進(jìn)行人臉檢測(cè),將檢測(cè)到的人臉特征與系統(tǒng)庫(kù)中的人臉的特征進(jìn)行對(duì)比,達(dá)到一定的相似度(閾值)則人臉識(shí)別成功,否則識(shí)別失敗[4]。本文采用face_recognition 庫(kù)完成人臉識(shí)別。
face_recognition 庫(kù)是基于Python 語言開發(fā)的開源人臉識(shí)別項(xiàng)目,是基于dlib 開源庫(kù)的深度學(xué)習(xí)模型進(jìn)行構(gòu)建,在LFW 數(shù)據(jù)集上測(cè)試的成功率高達(dá)99.38%[5]。在人臉識(shí)別過程中,face_recognition 會(huì)采用人臉的68個(gè)特征點(diǎn)與庫(kù)中人臉特征點(diǎn)進(jìn)行對(duì)比來完成人臉識(shí)別過程,特征點(diǎn)坐標(biāo)如圖1 所示,包含臉的輪廓,眉毛、眼睛、鼻子、嘴的特征。
圖1 人臉特征坐標(biāo)
基于C/S 架構(gòu)以及Python 語言的GUI 有PyQt5、Tkinter 等,本系統(tǒng)界面的設(shè)計(jì)采用Python 標(biāo)準(zhǔn)庫(kù)Tkinter 完成。界面如圖2 所示。界面中攝像頭實(shí)時(shí)捕捉并完成人臉檢測(cè)的圖像顯示在畫布中,并完成人臉檢測(cè)及人臉定位。除此之外包括人臉采集及簽到按鈕,以及簽到時(shí)會(huì)顯示“簽到成功”或者“簽到失敗”的標(biāo)簽和學(xué)號(hào)、姓名、班級(jí)、簽到時(shí)間的輸入框。畫布中實(shí)時(shí)顯示攝像頭圖像部分代碼如下:
圖2 人臉簽到系統(tǒng)界面
人臉檢測(cè)及定位使用dlib 庫(kù)完成,具體的代碼如下:
系統(tǒng)中的數(shù)據(jù)庫(kù)采用MySQL 數(shù)據(jù)庫(kù),需要安裝PyMySQL 驅(qū)動(dòng)才能進(jìn)行數(shù)據(jù)庫(kù)的連接。數(shù)據(jù)庫(kù)中包含兩張表,分別是學(xué)生基本信息表(見表1)和學(xué)生簽到表(見表2)。學(xué)生基本信息表包含學(xué)號(hào)、姓名、班級(jí)以及學(xué)生照片。簽到表包含學(xué)號(hào)和簽到時(shí)間。
表1 學(xué)生基本信息表
表2 學(xué)生簽到表
數(shù)據(jù)庫(kù)連接及游標(biāo)定義代碼如下:
點(diǎn)擊人臉采集功能時(shí),會(huì)出現(xiàn)一個(gè)新的窗口,在新的窗口中需要輸入學(xué)號(hào),輸入學(xué)號(hào)之后點(diǎn)擊保存按鈕(見圖3),可以將點(diǎn)擊時(shí)刻攝像頭捕捉到的圖像,并完成人臉定位裁剪后返回的人臉圖像進(jìn)行保存,保存的人臉圖像的名稱為“學(xué)號(hào).jpg”,這樣命名的原因是在實(shí)現(xiàn)簽到成功時(shí),根據(jù)庫(kù)中匹配成功的人臉的學(xué)號(hào)進(jìn)行該學(xué)生其他信息的查詢及顯示功能的實(shí)現(xiàn)。
圖3 人臉采集界面
簽到流程如圖4 所示,點(diǎn)擊簽到按鈕,會(huì)檢測(cè)當(dāng)前攝像頭人臉圖像,并確定人臉位置進(jìn)行裁剪,返回裁剪后的圖像,采用face_recognition 庫(kù)的face_encodings 函數(shù)對(duì)該圖像和人臉庫(kù)中的圖像進(jìn)行編碼,再利用com?pare_faces 函數(shù)將庫(kù)中圖像編碼與該圖像編碼進(jìn)行特征比對(duì),tolerance 設(shè)置為0.4。當(dāng)匹配的結(jié)果為True時(shí),將庫(kù)中匹配的人臉圖片的學(xué)號(hào)以及簽到時(shí)間加入到數(shù)據(jù)庫(kù),并根據(jù)學(xué)號(hào)在數(shù)據(jù)庫(kù)中找到學(xué)號(hào)、姓名、編輯、當(dāng)前簽到時(shí)間,顯示在窗口對(duì)應(yīng)的文本框中,并在標(biāo)簽上顯示“簽到成功,歡迎**”,并進(jìn)行播報(bào),否則在標(biāo)簽中顯示“簽到失敗”并進(jìn)行播報(bào),完成整個(gè)人臉識(shí)別簽到過程。人臉識(shí)別過程代碼如下:
圖4 簽到流程圖
無論簽到成功與否,都進(jìn)行語音播報(bào),語音播報(bào)功能的完成調(diào)用百度的API 來,即先用百度API 生成mp3 格式音頻文件,利用playsound 庫(kù)的playsound 函數(shù)進(jìn)行語音播報(bào)即可。首先需要在百度云的官網(wǎng)申請(qǐng)AppID、API Key 以及Secret Key,調(diào)用pip install baiduaip 進(jìn)行API 的安裝及使用。播報(bào)功能實(shí)現(xiàn)的代碼如下:
本文采用人臉識(shí)別技術(shù)進(jìn)行課堂簽到,可以有效解決傳統(tǒng)人工點(diǎn)名效率低下以及別人代替簽到等問題。系統(tǒng)設(shè)計(jì)相對(duì)簡(jiǎn)單,主要是針對(duì)確定課程的學(xué)生完成人臉識(shí)別的簽到功能即可。要進(jìn)行大規(guī)模的應(yīng)用,還需要對(duì)系統(tǒng)進(jìn)行進(jìn)一步完善,如需要加上課程的信息、教師的信息、學(xué)生上課的信息以及相關(guān)界面的設(shè)計(jì)等。