陳光婷 王政 謝丹艷
摘要:隨著國(guó)家對(duì)本科生教育的嚴(yán)格要求,課堂考勤方式層出不窮。調(diào)查顯示,大多學(xué)校主要通過(guò)老師點(diǎn)名進(jìn)行課堂考勤,存在費(fèi)時(shí)、費(fèi)力、低效等問(wèn)題。基于OpenCV的人臉識(shí)別技術(shù)課堂簽到系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)是以Python為開(kāi)發(fā)語(yǔ)言,采用SQLite數(shù)據(jù)庫(kù),使用Django+Celery 作為主體框架,實(shí)現(xiàn)了攝像頭實(shí)時(shí)捕捉學(xué)生人臉信息,發(fā)送給celery 做特征提取和人臉?lè)诸?,利用機(jī)器視覺(jué)技術(shù),可以有效地減少簽到時(shí)間、簽到成本,提高課堂效率、自動(dòng)化程度,加快識(shí)別速度,使簽到變得更加標(biāo)準(zhǔn)化科學(xué)化。
關(guān)鍵詞:人臉識(shí)別;Python語(yǔ)言;OpenCV;SQLite
中圖分類號(hào):TP391? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2022)25-0041-03
開(kāi)放科學(xué)(資源服務(wù)) 標(biāo)識(shí)碼(OSID) :
1 引言
人工智能理論的深入研究和優(yōu)秀的深度學(xué)習(xí)算法的相繼出現(xiàn),我國(guó)開(kāi)始著重于對(duì)大數(shù)據(jù)、深度學(xué)習(xí)的研究,這極大推動(dòng)了計(jì)算機(jī)視覺(jué)技術(shù)的發(fā)展。人臉識(shí)別是機(jī)器視覺(jué)領(lǐng)域的主要研究對(duì)象之一,人臉識(shí)別驗(yàn)證速度快、識(shí)別準(zhǔn)確率高、用戶體驗(yàn)良好的特點(diǎn),而且人臉識(shí)別具有唯一性、擴(kuò)展性高、不用接觸就可以完成驗(yàn)證的優(yōu)點(diǎn),在當(dāng)今新冠肺炎疫情的大環(huán)境下被廣泛應(yīng)用在醫(yī)療、金融、教育等多個(gè)領(lǐng)域[1]。
人臉識(shí)別相對(duì)于其他的較為先進(jìn)的生物識(shí)別方式如虹膜識(shí)別、指紋識(shí)別等具有方便、準(zhǔn)確率高、實(shí)現(xiàn)簡(jiǎn)單的優(yōu)勢(shì)。用戶使用攝像頭捕獲用戶靜態(tài)人臉的特征信息或者通過(guò)動(dòng)態(tài)視頻流來(lái)捕捉目標(biāo)用戶人臉信息,將捕獲的人臉通過(guò)特征分析得出人臉信息[2]與系統(tǒng)中數(shù)據(jù)庫(kù)人臉信息比對(duì),得出對(duì)比信息后從而進(jìn)行下一步操作處理。依照當(dāng)前科學(xué)技術(shù)的研究趨勢(shì),人臉識(shí)別系統(tǒng)可能廣泛運(yùn)用于生產(chǎn)制造生活中,商業(yè)服務(wù)要求也會(huì)更高。迫切需要簡(jiǎn)單化人臉識(shí)別系統(tǒng)的生產(chǎn)流程,完成更迅速、更可靠的生產(chǎn)流程[3]。
很多高校也開(kāi)始引進(jìn)人臉識(shí)別考勤機(jī),但是考勤機(jī)的數(shù)量需要量之大加上安裝程序復(fù)雜這直接導(dǎo)致簽到效率并未提高。本系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)改善了人臉識(shí)別考勤機(jī)的部分缺點(diǎn),讓人臉識(shí)別課堂簽到變得更加標(biāo)準(zhǔn)化科學(xué)化。利用機(jī)器視覺(jué)技術(shù),可以提高人臉識(shí)別的考勤機(jī)的自動(dòng)化程度、識(shí)別速度,同時(shí)也減少了課堂簽到的成本。
2 軟件設(shè)計(jì)
基于OpenCV[4]的人臉識(shí)別技術(shù)課堂簽到系統(tǒng)的平臺(tái)架構(gòu)[5]圖主要分為五層,分別是用戶層、業(yè)務(wù)層、服務(wù)層、數(shù)據(jù)層、設(shè)備層。這5層的邏輯架構(gòu)圖如圖1所示。
開(kāi)發(fā)的人臉識(shí)別簽到系統(tǒng),可分為4個(gè)模塊??煞譃椋喝四樞畔⒉杉K、個(gè)人中心登錄模塊、課堂出勤模塊、后臺(tái)管理模塊。各個(gè)模塊的功能結(jié)構(gòu)如圖2所示。
人臉識(shí)別簽到系統(tǒng)的主要有3個(gè)角色,分別是:學(xué)生、教師和管理員。其中學(xué)生需要錄入學(xué)生個(gè)人的人臉信息,同時(shí)可以查看自己的簽到情況。教師可以查看本班某個(gè)時(shí)間段內(nèi)班級(jí)的出勤率,管理員要對(duì)教師和學(xué)生的注冊(cè)信息進(jìn)行審核以及添加、修改學(xué)生的簽到情況。其中管理員系統(tǒng)功能如圖3所示。
3 系統(tǒng)實(shí)現(xiàn)
3.1 人臉識(shí)別課堂簽到系統(tǒng)登錄
本系統(tǒng)的用戶,除了學(xué)生在上課之前需要簽到之外,所有用戶在使用系統(tǒng)時(shí)候需要先登錄到系統(tǒng)。本系統(tǒng)沒(méi)有設(shè)置學(xué)生登錄、教師登錄或者管理員登錄的區(qū)別界面、一方面減少代碼的開(kāi)發(fā)量,由此可以提高代碼的復(fù)用性,另一方面,在登錄界面將輸入的信息傳入數(shù)據(jù)庫(kù)[6]的時(shí)候,每一種角色id作為該角色數(shù)據(jù)庫(kù)的主鍵,可以直接將其區(qū)分。用戶必須輸入正確的用戶名以及密碼,系統(tǒng)按照用戶名的不同進(jìn)入不同的系統(tǒng)。
3.2 人臉識(shí)別課堂簽到系統(tǒng)注冊(cè)
學(xué)生在人臉識(shí)別課堂簽到系統(tǒng)中,需要學(xué)生事先注冊(cè)自己基本信息,注冊(cè)的要求根據(jù)角色的不同相對(duì)的注冊(cè)信息也不一樣,學(xué)生再注冊(cè)的時(shí)候需要添加三張人臉的圖片,分別是正臉人臉照片、左側(cè)臉照片、右側(cè)臉照片。進(jìn)入127.0.0.1:8000/register中,注冊(cè)時(shí)def register(request)函數(shù)中img = request.POST.get("face").replace()函數(shù)將攝像頭捕捉到的三張人臉圖像替換數(shù)據(jù)庫(kù)中的原始空白圖片,通過(guò)face_task中g(shù)et_face_encoding(imgs)函數(shù),來(lái)編碼頭像的信息,傳入的是BytesI0對(duì)象或者是數(shù)組。在get_face_encoding(imgs)函數(shù)中定義獲取編碼函數(shù),見(jiàn)圖片轉(zhuǎn)化成對(duì)應(yīng)的矩陣,然后使用dlib找出人臉,將人臉圖片轉(zhuǎn)化成160*160的大小,通過(guò)expand_dims(face_pixels,aixs=0)來(lái)增加一個(gè)圖片的數(shù)量維度,最后通過(guò)face_model.predict()人臉特征提取的神經(jīng)網(wǎng)絡(luò)提取人臉特征。注冊(cè)界面如圖4所示。
3.3 學(xué)生簽到識(shí)別
教師在瀏覽器中打開(kāi)http://127.0.0.1:8000/進(jìn)入簽到界面,此時(shí)系統(tǒng)使用OpenCV.js來(lái)動(dòng)態(tài)實(shí)時(shí)捕捉系統(tǒng)攝像頭的畫(huà)面。當(dāng)系統(tǒng)攝像頭能夠正常運(yùn)行時(shí),教師點(diǎn)擊開(kāi)始簽到,系統(tǒng)就會(huì)捕捉人臉開(kāi)始簽到。簽到系統(tǒng)使用post向后端Django發(fā)送請(qǐng)求,在Django[7]接收請(qǐng)求后就可以進(jìn)行課堂,簽到定義函數(shù)base_match_faces(face_encoding,known_face_encodings,? known_face_names)是為了傳入人臉特征,將捕獲到的人臉信息,按照行向量進(jìn)行處理求出know_face_encodings-face_encoding的范數(shù),給出人臉距離的水平方向的最小值的下標(biāo),如果在face_distance數(shù)組中該下標(biāo)的值對(duì)應(yīng)的數(shù)值小于6,則將在know_face_names中取出該下標(biāo)所對(duì)應(yīng)的姓名,load_all_users()函數(shù)還會(huì)輸出其他一些學(xué)生的個(gè)人信息。在數(shù)據(jù)庫(kù)中還會(huì)存儲(chǔ)學(xué)生的簽到的相關(guān)的基本信息。簽到界面如圖5所示。
3.4 學(xué)生簽到查詢
教師學(xué)生登錄個(gè)人中心,在個(gè)人中心可以查詢自己在某個(gè)時(shí)間段內(nèi)的簽到情況,教師可以查詢自己的課程的簽到情況,作為管理員可以通過(guò)模糊搜索,搜索整個(gè)學(xué)校的出勤率。查詢界面如圖6所示。
3.5 人臉識(shí)別課堂簽到系統(tǒng)管理功能
在本系統(tǒng)中,管理員有且只有一位,不可注冊(cè),一方面防止管理員過(guò)多,同時(shí)對(duì)數(shù)據(jù)進(jìn)行操作的時(shí)候會(huì)出現(xiàn)沖突,另一方面保護(hù)了數(shù)據(jù)的安全性。管理員可以對(duì)教師、學(xué)生這兩種角色進(jìn)行批量刪除、指定修改以及對(duì)注冊(cè)學(xué)生和教師信息進(jìn)行審核,管理員界面如圖7、圖8所示。
4 人臉識(shí)別課堂簽到系統(tǒng)運(yùn)行過(guò)程
使用人臉識(shí)別課堂簽到系統(tǒng)需要事先將人臉信息錄入數(shù)據(jù)庫(kù),同時(shí)將學(xué)生基本信息錄入,在數(shù)據(jù)庫(kù)中創(chuàng)建唯一學(xué)生人臉信息庫(kù)。在數(shù)據(jù)庫(kù)中每一個(gè)人臉信息唯一對(duì)應(yīng)一位學(xué)生信息。
啟動(dòng)人臉識(shí)別課堂簽到系統(tǒng)對(duì)測(cè)試人臉進(jìn)行測(cè)試,如果識(shí)別成功則顯示簽到成功,系統(tǒng)將生成簽到記錄,如果沒(méi)有反應(yīng)表示識(shí)別失敗。該檢測(cè)檢驗(yàn)人臉在有無(wú)遮擋(如圖9) 、是否露出嘴巴(如圖10) 、不同識(shí)別姿勢(shì)(如圖11) 、光線較暗(如圖12) 等情況下人臉檢測(cè)情況。
在對(duì)人臉識(shí)別中可能出現(xiàn)的學(xué)生簽到情況進(jìn)行測(cè)試,當(dāng)學(xué)生在簽到過(guò)程中如果對(duì)半側(cè)臉進(jìn)行遮擋,系統(tǒng)不會(huì)檢測(cè)到人臉的存在。如果學(xué)生佩戴口罩進(jìn)行簽到,系統(tǒng)會(huì)檢測(cè)到人臉,但是無(wú)法將捕捉的人臉信息與數(shù)據(jù)庫(kù)中的人臉信息比對(duì),從而無(wú)法完成簽到。學(xué)生正臉簽到,則會(huì)顯示簽到成功,并顯示學(xué)生簽到信息。學(xué)生在光線較弱的條件下,使用側(cè)臉進(jìn)行人臉識(shí)別簽到,發(fā)現(xiàn)仍然可以簽到成功。
5 結(jié)束語(yǔ)
基于OpenCV的人臉識(shí)別課堂簽到系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),通過(guò)對(duì)課題背景的研究發(fā)現(xiàn)人臉識(shí)別可運(yùn)用在課堂簽到中,近幾年來(lái)自從卷積神經(jīng)網(wǎng)絡(luò)算法的出現(xiàn),機(jī)器視覺(jué)在各個(gè)領(lǐng)域運(yùn)用廣泛并且發(fā)揮著舉足輕重的作用。本文介紹了利用OpenCV開(kāi)源庫(kù)將Python、SQLite等技術(shù)結(jié)合起來(lái)實(shí)現(xiàn)了人臉識(shí)別課堂簽到系統(tǒng)的開(kāi)發(fā)。
系統(tǒng)開(kāi)發(fā)成功之后還需完善,后期可以將人臉識(shí)別簽到系統(tǒng)與學(xué)校的教務(wù)系統(tǒng)相連,老師可以在教務(wù)系統(tǒng)中更為方便地查看簽到記錄,還可以將學(xué)生的簽到記錄作為平時(shí)成績(jī)的重要依據(jù)。
參考文獻(xiàn):
[1] 胡娟.人臉識(shí)別技術(shù)在高校智慧校園管理中的應(yīng)用現(xiàn)狀[J].電腦知識(shí)與技術(shù),2021,17(18):6-8.
[2] 肖陽(yáng).基于OpenCV的人臉識(shí)別的算法研究與實(shí)現(xiàn)[D].武漢:湖北工業(yè)大學(xué),2018.
[3] 董佳慧,陳蕾,楊凱,等.基于OpenCV的學(xué)生人臉識(shí)別簽到系統(tǒng)[J].電腦知識(shí)與技術(shù),2021,17(4):179-180,183.
[4] 周宇.基于OpenCV-Python的圖像分割技術(shù)的設(shè)計(jì)和應(yīng)用[J].電子世界,2018(3):116-117.
[5] 童樂(lè).基于Django開(kāi)發(fā)框架的在線教育系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中師范大學(xué),2020.
[6] 韓貝.SQLite數(shù)據(jù)庫(kù)研究與應(yīng)用[D].南京:南京郵電大學(xué),2019.
[7] Eldarion Media Contact;Eldarion(R)Open Sources its DevOps Platform as a Service for Django and Python[J].Computers,Networks & Communications,2016.
【通聯(lián)編輯:謝媛媛】