杜蘭,田越,王英杰,帥輝明
(1.南京工業(yè)職業(yè)技術(shù)大學(xué),江蘇南京 210023;2.南京理工大學(xué)紫金學(xué)院,江蘇南京 210023)
大學(xué)物理實(shí)驗(yàn)是眾多高校培養(yǎng)理工科學(xué)生物理素養(yǎng)之必不可少的訓(xùn)練手段,而操作實(shí)驗(yàn)考試被廣大高校當(dāng)成檢查學(xué)生對(duì)物理理論知識(shí)真正掌握程度的考核方法[1]。目前,因?yàn)閰⑴c考試學(xué)生數(shù)量眾多,大規(guī)模集中統(tǒng)一組織物理操作實(shí)驗(yàn)考試難度巨大,各個(gè)高校最普遍的組織物理操作實(shí)驗(yàn)考試的方式是抽簽法。抽簽法就是從學(xué)生在大學(xué)物理實(shí)驗(yàn)課程中已做過的實(shí)驗(yàn)里面隨機(jī)抽取一個(gè)實(shí)驗(yàn)作為考試項(xiàng)目,以此考查學(xué)生的實(shí)驗(yàn)?zāi)芰蛯?shí)踐能力?,F(xiàn)有抽簽方式有兩種,一種是手工抽簽,另一種是計(jì)算機(jī)系統(tǒng)抽簽。手工抽簽是老師事先準(zhǔn)備好物理實(shí)驗(yàn)考試項(xiàng)目及儀器,將紙簽和考試項(xiàng)目一一編號(hào)對(duì)應(yīng),將紙簽放入抽簽盒,由考生隨機(jī)抽取一個(gè)紙簽,然后根據(jù)抽簽結(jié)果進(jìn)行考試。手工抽簽是在考試現(xiàn)場(chǎng)面對(duì)著所有考生和老師公開開展抽簽工作,優(yōu)點(diǎn)是師生參與感強(qiáng),抽簽結(jié)果立馬可見;缺點(diǎn)是人工執(zhí)行抽簽,費(fèi)事費(fèi)力,有了人為的操作就容易對(duì)抽簽結(jié)果的公正性存疑。計(jì)算機(jī)系統(tǒng)抽簽是設(shè)計(jì)與實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)來完成抽簽工作,如齊云等使用Excel 的VFP 編程開發(fā)了物理實(shí)驗(yàn)操作考試隨機(jī)抽簽系統(tǒng)[2];而王道光等使用Matlab加強(qiáng)了物理操作實(shí)驗(yàn)考試抽簽的隨機(jī)效果,并使用GUI對(duì)話框?qū)崿F(xiàn)了與學(xué)生的互動(dòng)[3]。計(jì)算機(jī)系統(tǒng)抽簽無需人工干涉,自動(dòng)快捷,省事省力?,F(xiàn)有的計(jì)算機(jī)實(shí)現(xiàn)物理實(shí)驗(yàn)操作考試抽簽系統(tǒng)的流程一般步驟如下:(1)梳理實(shí)驗(yàn)考試項(xiàng)目名稱、實(shí)驗(yàn)教室、儀器數(shù)目等形成考試項(xiàng)目表,梳理考生學(xué)號(hào)、姓名、班級(jí)、考試時(shí)間段等形成考生信息表。(2)使用Matlab 或者VPF 隨機(jī)抽取考生學(xué)號(hào)完成抽簽,顯示抽簽結(jié)果。抽簽結(jié)果顯示的是姓名和考試項(xiàng)目一一對(duì)應(yīng)的表格,但是監(jiān)考老師不一定認(rèn)識(shí)考生,目前大多數(shù)高校的考生身份驗(yàn)證的流程比較老舊,由監(jiān)考老師參照考生簽到表上的照片、考生的身份證和學(xué)生卡與學(xué)生進(jìn)行人工比對(duì),精準(zhǔn)度不高,存在誤判與替考的風(fēng)險(xiǎn),識(shí)別效率低下。
當(dāng)下人臉識(shí)別技術(shù)已在考試系統(tǒng)中有成功應(yīng)用[4-5]。因此,將人臉識(shí)別這一成熟技術(shù)引入大學(xué)物理操作實(shí)驗(yàn)考試有著極其重要的現(xiàn)實(shí)意義。
本文所做的主要貢獻(xiàn)如下:
(1)使用Django 框架基于B/S 開發(fā)“物理操作實(shí)驗(yàn)考試抽簽系統(tǒng)”,其Web界面友好,互動(dòng)性強(qiáng),更易于與學(xué)校的其他系統(tǒng)(如教務(wù)系統(tǒng))兼容。
(2)將人臉檢測(cè)與識(shí)別技術(shù)與大學(xué)物理操作實(shí)驗(yàn)考試融合,很好地解決了現(xiàn)有考生身份驗(yàn)證困難的問題。
人臉識(shí)別技術(shù)的算法有三大代表:(1)幾何特征描述人臉辨別算法。(2)局部特征描述人臉辨別算法。(3)以深度學(xué)習(xí)為基礎(chǔ)的人臉辨別算法。其中,深度學(xué)習(xí)的基礎(chǔ)理論是人工神經(jīng)網(wǎng)絡(luò)(Neural Network,ANN),而卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)是一種不但包含卷積計(jì)算而且具備深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò),不只具有高效的深層圖像識(shí)別能力,更值得一提的是在大量學(xué)習(xí)數(shù)據(jù)的時(shí)候性能穩(wěn)定,在人臉識(shí)別的應(yīng)用也越來越廣泛。
典型的CNN 包含輸入、卷積、激活(ReLU)、池化、全連接和輸出等功能層,LeNet-5[6]就是經(jīng)典的CNN 結(jié)構(gòu),如圖1所示。具體工作流程為:(1)將原始圖像數(shù)據(jù)傳遞進(jìn)入到輸入層。(2)把輸入數(shù)據(jù)使用卷積層進(jìn)行卷積操作。(3)卷積層完成卷積運(yùn)算之后采用非線性的激活(ReLU)函數(shù)作非線性處理。(3)連接池化層,實(shí)現(xiàn)縮小圖像尺寸的目標(biāo)。(4)交替?zhèn)鬟f多個(gè)卷積層和池化層,進(jìn)一步不斷實(shí)現(xiàn)減小特征圖尺寸的目標(biāo),降低到合適的參數(shù)規(guī)模,接入全連接網(wǎng)絡(luò),輸出結(jié)果。
多任務(wù)級(jí)聯(lián)卷積神經(jīng)網(wǎng)絡(luò)(Multi-task convolutional neural network,簡(jiǎn)稱MTCNN)模型由3 層簡(jiǎn)單CNN 模型級(jí)聯(lián)構(gòu)成,易于人臉檢測(cè)、對(duì)齊和裁剪。第一層是Proposal Network(P-Net)全卷積網(wǎng)絡(luò),第二層是Refine Network(R-Net)全卷積網(wǎng)絡(luò),第三層是Output Network(O-Net)全卷積網(wǎng)絡(luò)[7]。具體工作流程為:(1)按照不同比例縮放原始圖像,構(gòu)建12×12、24×24和48×48三種尺寸的圖像金字塔,分別作為3個(gè)不同網(wǎng)絡(luò)層的訓(xùn)練數(shù)據(jù)集。(2)將12×12的圖像轉(zhuǎn)換成12×12×3大小的圖像,傳入P-Net 層,使用3 個(gè)卷積層和1 個(gè)池化層來生成10 個(gè)1×1 的特征圖(人臉關(guān)鍵特征點(diǎn)定位)、候選窗的預(yù)測(cè)結(jié)果和候選邊框回歸向量,并使用候選邊框向量回歸方法校準(zhǔn)這些候選窗,使用非極大值抑制合并高度重疊的候選框。(3)將P-Net層輸出的候選窗與第2層訓(xùn)練數(shù)據(jù)集合并,轉(zhuǎn)為24×24×3 大小的圖像,傳入R-Net 層,使用3個(gè)卷積層和2個(gè)池化層,生成64個(gè)3×3的特征圖,連接128 大小的全連接層。使用2 大小的全連接層采用Softmax邏輯回歸進(jìn)行候選框分類,使用4大小的全連接層進(jìn)行候選框位置回歸,得到最終bounding box 的坐標(biāo)。(4)將R-Net層輸出的候選窗與第3層訓(xùn)練數(shù)據(jù)集合并,轉(zhuǎn)為48×48×3 大小傳入O-Net 層,使用由4 個(gè)卷積層和3 個(gè)池化層,生成128 個(gè)3×3 的特征圖,連接256 大小的全連接層,最后生成具有5個(gè)人臉關(guān)鍵特征點(diǎn)的人臉矩形框圖。
FaceNet[8]在Google 研發(fā)的深度CNN 模型基礎(chǔ)上,刪除了傳統(tǒng)的Softmax 分類,利用L2 的歸一化輸出512維的人臉特征向量,基于特征的三元組損失(triplet-loss)更新網(wǎng)絡(luò)權(quán)值參數(shù)和偏移參數(shù),完成人臉識(shí)別、驗(yàn)證和聚類等工作。FaceNet模型結(jié)構(gòu)如圖1所示,具體工作流程為:(1)權(quán)值初始化,Batch(批量)輸入人臉樣本。(2)使用Inception 結(jié)構(gòu)訓(xùn)練FaceNet 深度卷積神經(jīng)網(wǎng)絡(luò)。(3)L2歸一化操作,得到512 維的人臉特征向量(Embedding)。(4)計(jì)算triplet-loss,求取模型的輸出結(jié)果與預(yù)測(cè)結(jié)果之間的誤差,使用隨機(jī)梯度法逆向傳播誤差,更新權(quán)值,更新Embedding。
圖1 FaceNet模型結(jié)構(gòu)
本系統(tǒng)基于B/S 架構(gòu)使用Django 開源開發(fā)框架設(shè)計(jì)與實(shí)現(xiàn),它的物理實(shí)現(xiàn)方案如圖2所示。
圖2 系統(tǒng)物理實(shí)現(xiàn)方案
系統(tǒng)管理員主要負(fù)責(zé)數(shù)據(jù)庫管理和網(wǎng)站維護(hù)等工作。任課教師用戶通過瀏覽器登錄物理操作實(shí)驗(yàn)考試抽簽系統(tǒng)后,點(diǎn)擊抽簽,在完成抽簽后會(huì)顯示抽簽結(jié)果頁面??忌脩敉ㄟ^瀏覽器訪問物理操作實(shí)驗(yàn)考試抽簽系統(tǒng),登錄后會(huì)顯示考試項(xiàng)目和考場(chǎng)等相關(guān)考試信息。考生在對(duì)應(yīng)考試時(shí)間到達(dá)相應(yīng)實(shí)驗(yàn)教室后,系統(tǒng)調(diào)用人臉識(shí)別模塊進(jìn)行身份認(rèn)證,認(rèn)證通過,則進(jìn)入考場(chǎng)按座位號(hào)找到位置開始做實(shí)驗(yàn)。
本系統(tǒng)的整體框架如圖3所示,主要包含數(shù)據(jù)庫存儲(chǔ)、抽簽?zāi)K、人臉檢測(cè)模塊、人臉識(shí)別模塊和簽到模塊等。它實(shí)現(xiàn)的流程如下:
圖3 系統(tǒng)整體框架
(1)管理員進(jìn)入系統(tǒng)管理頁面,進(jìn)行數(shù)據(jù)庫管理和系統(tǒng)維護(hù)工作。
(2)任課教師用瀏覽器登錄系統(tǒng),進(jìn)入抽簽?zāi)K,隨機(jī)抽簽,得到抽簽結(jié)果。
(3)學(xué)生用瀏覽器登錄系統(tǒng),查看自己的考試信息。
(4)監(jiān)考教師登錄系統(tǒng),查看抽簽結(jié)果。
(5)到了考試時(shí)間,學(xué)生到達(dá)考試現(xiàn)場(chǎng),攝像頭拍攝視頻,利用MTCNN對(duì)實(shí)時(shí)畫面進(jìn)行人臉檢測(cè),通過裁剪得到相對(duì)標(biāo)準(zhǔn)的人臉區(qū)域圖像,然后使用FaceNet進(jìn)行人臉識(shí)別認(rèn)證,自動(dòng)簽到之后開始考試。
Step1:利用攝像頭實(shí)時(shí)采集圖像,預(yù)處理篩選質(zhì)量好的圖像。
Step2:利用MTCNN網(wǎng)絡(luò)對(duì)實(shí)時(shí)圖像進(jìn)行人臉候選框檢測(cè)。
Step3:對(duì)MTCNN 五點(diǎn)標(biāo)定檢測(cè)到的人臉候選框,裁剪至標(biāo)準(zhǔn)的160×160大小,對(duì)人臉進(jìn)行預(yù)處理。
Step4:利用FaceNet提取人臉圖像的特征向量(Embdding)。
Step5:在MySQL數(shù)據(jù)庫中根據(jù)該場(chǎng)考試(Test)表中的考生學(xué)號(hào)(StudentID)到考生信息(Student)表中找到和學(xué)號(hào)一一對(duì)應(yīng)的人臉特征信息(Embdding),逐個(gè)計(jì)算歐式距離。
Step6:將識(shí)別的身份信息存儲(chǔ)到簽到表中,進(jìn)行語音播報(bào)“您好,XXX”,完成人臉識(shí)別,學(xué)生可以進(jìn)入操作考試實(shí)驗(yàn)地點(diǎn)開始考試。如果所有結(jié)果都大于一定的閾值(如0.85),則判定為非數(shù)據(jù)庫內(nèi)的人,需要人為干預(yù)。
使用MySQL數(shù)據(jù)庫存儲(chǔ)學(xué)生信息表(Student)(如表1所示)、教師信息(Teacher)表(如表2所示)、考試項(xiàng)目表(Project)(如表3所示)、考試表(Test)(如表4所示)、抽簽結(jié)果簽到表(Check)(如表5所示)等。
表1 學(xué)生信息表(Student)
表2 教師信息表(Teacher)
表3 考試項(xiàng)目表(Project)
表4 考試表(Test)
表5 簽到表(Check)
對(duì)于表1學(xué)生信息表里Embedding(512 維人臉特征向量)存入到數(shù)據(jù)庫的算法如表6所示,它的核心思想是將ndarrary 格式的Embedding 矩陣轉(zhuǎn)換為字符串(String)格式,這樣就能很方便地保存到學(xué)生信息表(Student)中的String格式的Embedding字段了。
表6 將Embedding存入數(shù)據(jù)庫的算法
本文模型的訓(xùn)練和環(huán)境搭建依托MTCNN和FaceNet開源
項(xiàng)目,F(xiàn)aceNet 的源碼鏈接https://github.com/davidsandberg/facenet,可以下載下來建立模型。
創(chuàng)建MTCNN網(wǎng)絡(luò)結(jié)構(gòu)的可調(diào)用如下語句:
pnet,rnet,onet=align.detect_face.create_mtcnn(sess,None)
人臉檢測(cè)與裁剪模塊主要工作是對(duì)實(shí)時(shí)畫面進(jìn)行人臉檢測(cè)與關(guān)鍵特征五點(diǎn)標(biāo)定,然后進(jìn)行裁剪與對(duì)齊。
(1)人臉檢測(cè)的核心代碼語句:
bounding_boxes,_=align.detect_face.detect_face(image,minsize,pnet,rnet,onet,threshold,factor)#bounding_boxes存儲(chǔ)人臉框5個(gè)關(guān)鍵特征點(diǎn)的數(shù)據(jù)
(2)五點(diǎn)標(biāo)定畫人臉候選框的核心代碼如下:
for i in range(len(bounding_boxes)):
det=np.squeeze(bounding_boxes[i,0:4])
bb=np.zeros(4,dtype=np.int32)
#界定候選框的裁剪邊緣,裁剪的人臉框比MTCNN獲取的人臉框大margin大小
bb[0]=np.maximum(det[0]-margin/2,0)
bb[1]=np.maximum(det[1]-margin/2,0)
bb[2]=np.minimum(det[2]+margin/2,w)
bb[3]=np.minimum(det[3]+margin/2,h)
#使用cvRectangle繪制矩形
cv.rectangle(bgr,(bb[0],bb[1]),(bb[2],bb[3]),(0,0,255),2,8,0)
(3)裁剪與對(duì)齊的方法如下:
向align_dataset_mtcnn.py傳入?yún)?shù)image_size160和margin32,在上一步得到人臉候選框的基礎(chǔ)上裁剪32像素,縮放到160×160像素大小,將人臉框傳遞至FaceNet網(wǎng)絡(luò)中。
要提取人臉特征的512 維向量首先要建立FaceNet Embedding 模型,然后通過該模型計(jì)算出特征向量,F(xiàn)aceNet生成Embbing特征庫算法如表7所示。
表7 將Embedding存入數(shù)據(jù)庫的算法
獲取圖像的主要工作是利用OpenCV從攝像頭獲取實(shí)時(shí)畫面,轉(zhuǎn)化為灰度圖像,傳遞至人臉檢測(cè)模塊。獲取圖像算法如表8所示。
表8 獲取圖像算法
人臉識(shí)別模塊的主要工作是指根據(jù)MTCNN檢測(cè)到的人臉圖片,提取人臉特征的512 維向量,計(jì)算提取的Embedding 結(jié)果。然后根據(jù)數(shù)該考試表(Test)里的學(xué)生姓名,逐條找到學(xué)生信息表(Student)里面記錄的Embedding字段,計(jì)算兩者之間的歐式距離,算法如表9所示。
表9 歐式計(jì)算算法
本系統(tǒng)使用不放回抽樣的方式來實(shí)現(xiàn)隨機(jī)抽簽。首先從數(shù)據(jù)庫把考試表(Test)中的(Student_ID)讀取到列表中,按考試編號(hào)(Test_ID)一次抽取一個(gè)學(xué)生,抽到之后就從抽簽池中該該學(xué)生學(xué)號(hào)刪除,然后繼續(xù)往下抽簽,一次到抽完為止,具體不放回抽樣算法如表10所示。
表10 不放回抽樣算法
將人臉檢測(cè)識(shí)別功能封裝到Django 的名為camera的APP 中,具體是放在該APP 文件夾的views.py 文件里,這樣就將人臉檢測(cè)識(shí)別功能模塊封裝到Django 工程中了。
本文主要介紹了“人臉識(shí)別在物理操作實(shí)驗(yàn)考試”中的應(yīng)用,具體描述了“基于Django 的物理操作實(shí)驗(yàn)考試系統(tǒng)”的設(shè)計(jì)與實(shí)現(xiàn)過程。經(jīng)過編碼開發(fā)和系統(tǒng)測(cè)試以后,將系統(tǒng)部署到實(shí)際工作環(huán)境后的實(shí)際效果如圖4到圖5所示。
圖4 抽簽結(jié)果
圖5 人臉識(shí)別測(cè)試實(shí)例
人臉識(shí)別已在物理操作實(shí)驗(yàn)考試系統(tǒng)中成功應(yīng)用,識(shí)別率達(dá)到90%,大大提高了考試簽到效率?;赪eb頁面的操作簡(jiǎn)單友好,師生接受度較好。該系統(tǒng)為開展組織物理操作實(shí)驗(yàn)提供了較大的便利,為人臉識(shí)別技術(shù)在智慧校園中的應(yīng)用奠定基石,下一步的重點(diǎn)工作是將該系統(tǒng)與教務(wù)系統(tǒng)兼容。
自動(dòng)化技術(shù)與應(yīng)用2022年1期