陳光婷 王政 謝丹艷



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