基于人脸识别的门禁系统报告
視頻演示:基于人臉識別的門禁系統設計_嗶哩嗶哩_bilibili
PPT匯報:基于人臉識別的門禁系統設計PPT匯報_貓貓愛吃小魚的博客-CSDN博客
參考代碼來源:Python 3 利用 Dlib 實現攝像頭實時人臉識別 - coneypo - 博客園
《人機交互與界面設計》課程報告
基于人臉識別的門禁系統
?2021-2022(1)
提交日期 ?????____2021年12月 31日_____
- 課題背景
隨著社會經濟的快速發展,人民生活水平的不斷提高,群眾的安全防衛意識也逐步提升。由此,人們對安全防衛系統的要求越來越高。如何利用新的技術手段設計更加可靠的安防系統,增加居民生活的安全感,成為安防研究領域關注的焦點。其中,作為整個安防系統設計的重要組成部分,門禁系統以其所具備的智能化、自動化等特點,深得大多數用戶的青睞。
傳統門禁系統的身份驗證方式主要有口令、密碼、磁卡等,然而這些驗證手段與用戶具有可分離性,容易被破譯和盜用,已不能完全滿足現代安防理念。傳統校卡進出的方式會存在忘帶卡、冒用卡等方式帶來的管理問題。而人體的生物特征具有唯一性, 且與本體不可分離;若應用于門禁系統可以彌補傳統門禁系統的不足。 ???
人臉是具有唯一性的生物特征,而人臉識別技術是通過采集人臉圖像,提取圖像中的人臉特征從而實現身份識別。由于操作簡單、結果直觀等特點,人臉識別技術廣泛應用于信息安全、出入口控制等領域。大學校園人員流動性大,人員身份復雜,學生安全意識相對薄弱,學生的財產安全及學生宿舍管理問題亟待解訣,因此我們針對學生宿舍設計并開發了人臉識別門禁系統。
- 課題需求分析
為了有效地解決學生宿舍門禁系統存在的突出安全問題,提高學校的學生宿舍的管理能力,提升學校安防系統的信息化、智能化水平,引進人臉識別技術,大大提高學生宿舍安全和管理效率。因此結合學校宿舍的現狀以及存在的問題,本建設方案主要解決以下關鍵性問題。
- 1、解決外來人員混入學生宿舍的問題;
- 2、保證出入安全便捷問題;
- 3、方便學校管理學生,快速便捷的查詢宿舍樓內的學生信息;
- 4、為學校各相關職能部門提供數據服務功能。
應用目標:
- 1、防止外部人員混入宿舍內;
- 2、減輕宿管人員繁重的工作壓力;
- 3、方便學生安全快捷的進出宿舍;
- 4、方便學校保衛處、后勤處等部門管理學生宿舍,為學生營造良好的安全的住宿環境,實現平安校園的目的。
系統需求:
1.系統錄入學生人臉及姓名學號等信息,并可由管理員進行管理;
2.圖像采集設備獲取學生的人臉圖像;
3.對采集到的人臉圖像進行預處理、特征提取等過程,產生訪客人臉特征數據;
4 .將訪客的人臉特征數據逐個與人臉數據庫的數據項進行匹配。若匹配成功,則由控制設備向電控鎖發送開門指令。否則保持門鎖處于閉合狀態,并提示錯誤信息。
數據需求:
1.管理員賬號、密碼
2.學生人臉、姓名、學號、寢室號
交互需求:
1.管理員模式顯示所有學生信息及選中學生的人臉
2.識別時顯示攝像頭實時采集到的圖像與識別到的本地人臉圖像,識別到的人臉標注姓名
3.識別后用信息提示框顯示識別結果
4.選擇身份、錄入人臉、識別人臉后語音提示
- 課題所需的軟件的工具
編程語言:python
編程環境:Anaconda jupynotebook + python3.6
- pyqt5 制作GUI界面(工具 qt designer)
?圖1?PyQt
簡單介紹;
QT原本是諾基亞的產品,源碼用C++寫的,PyQt5是基于圖形程序框架Qt5的Python語言實現,由一組Python模塊構成。Pyqt5可以跨平臺,根據系統決定本地顯示效果,pyqt5與qt的函數接口一致,qt?designer開發函數非常豐富,控件豐富,函數方法多,拖曳布局,操作方便,改變樣式表,即可改變外觀,此外,qt生成的文件還方便打包成二進制文件。
下圖為運用pyqt5模塊生成的界面:
?圖2?運用pyqt5模塊生成的界面
優點:
① 開發迅速,qt designer拖曳布局,如果使用代碼布局還需要構建全局并且調試
②學習經驗容易遷移到pyside來開發商業應用
③ 方便打包發布軟件,python本身解釋語言的特點是寫好的程序不編譯和鏈接,使用文本運行解釋器,邊解釋邊執行,用戶不可能裝一個解釋器再發源碼再執行,所以打包成exe再發布。
使用qt designer 做出gesture.ui界面后,再python里面運行這段代碼,即可將頁面控件相關信息生成python代碼 main.py
圖3?運行界面代碼生成python代碼
缺點:
本次系統設計中,按鈕交互較多,同時運行的線程過多,導致pyqt5卡頓嚴重,在使用pyqt開發界面時,遇到了一種情況,就是在點擊按鈕之后,響應函數中會啟動一個循環,該循環會一直執行,然后就造成界面無響應對于執行很耗時的程序來說,由于PyQt需要等待程序執行完畢才能進行下一步,這個過程表現在界面上就是卡頓,而如果需要執行這個耗時程序時不斷的刷新界面。因此在主要識別界面中,我們使用tkinter制作界面。?
- tkinter ?制作GUI界面
圖4?Tkinter模塊
Tkinter簡單介紹:
python內置的GUI框架,使用TCL實現,python中內嵌了TCL解釋器,使用它的時候不用安裝額外的擴展包,直接import,跨平臺。不足之處在于UI布局全靠代碼實現,只有15種常用部件,顯示效果簡陋。
歷史最悠久, Python 事實上的標準 GUI , Python 中使用 Tk GUI 工具集的標準接口,已經包括在標準的 Python Windows 安裝中,著名的 IDLE 就是使用 Tkinter 實現 GUI 的創建的 GUI 簡單,學起來和用起來也簡單。
優點:
①最為簡單,
②自帶庫,不需下載
③安裝,隨時使用,跨平臺兼容性非常好
④則是從需求出發的,Python 在實際應用中極少用于開發復雜的桌面應用,
缺點:只有15種控件,界面相對簡陋許多,函數類也不豐富
- dlib 人臉識別庫
?圖5?人臉識別模型
dlib簡單介紹:一個機器學習的開源庫,包含了機器學習的很多算法,使用起來很方便,直接包含頭文件即可,并且不依賴于其他庫(自帶圖像編解碼庫源碼)。Dlib可以幫助您創建很多復雜的機器學習方面的軟件來幫助解決實際問題。目前Dlib已經被廣泛的用在行業和學術領域,包括機器人,嵌入式設備,移動電話和大型高性能計算環境。
需要調用dlib實現的功能:
1)將人臉信息向量化
需要多張人臉信息,調用dlib的自導模型,題圖特征
圖6?dlib的自導模型,題圖特征
2)人臉識別 識別人臉,匹配
圖7識別人臉并匹配
④logging 輔助運行
日志的作用:
①在部署項目時,不可能直接將所有的信息都輸出到控制臺中,我們可以將這些信息記錄到日志文件中,這樣不僅方便我們查看程序運行時的情況,也可以在項目出現故障時根據運行時產生的日志快速定位問題出現的位置。
②日志是一種可以追蹤某些軟件運行時所發生事件的方法。軟件開發人員可以向他們的代碼中調用日志記錄相關的方法來表明發生了某些事情。一個事件可以用一個可包含可選變量數據的消息來描述。此外,事件也有重要性的概念,這個重要性也可以被稱為嚴重性級別(level)。
本次設計主要用于輸出提示信息。
⑤OpenCv
OpenCv是一種集成的圖像處理的工具,其實OpenCv本身也帶有很多復雜的算法,也自帶人臉識別,但是其效果不太好,因此我們最終選擇dlib專業處理人臉的模塊,但還是需要OpenCv打開攝像頭,截取視頻流,并在畫面上輸出文字。
- 課題設計
4.1兩種角色
本次設計中一共有兩種角色的用戶,分別是學生和管理員。
管理員權力:
①查詢學習基本信息
②修改、刪除學生信息
③錄入學生人臉
學生功能: ?
①配合錄入人臉
②作為被識別對象,系統判斷是否進入寢室
學生數據字典如下:
表1?學生數據字典
| 名稱 | 學生基本信息 |
| 來源 | 學生、系統采集 |
| 描述 | 記錄學生的基本信息,用于學生身份確認,學生信息查詢和修改 |
| 定義 | 學生信息=學生學號+學生姓名+學生寢室信息+學生人臉信息 |
| 位置 | 學生人臉識別界面(作為結果)、管理員查詢界面 |
4.2界面模塊設計
根據功能需求,我們的整體模塊設計如下:分為學生模塊和管理員模塊,
學生模塊主要涉及識別人臉,進入門禁系統;入住前配合錄入人臉信息。
管理員模塊的權限會比較多,一些最基本的例如查詢學生的基本信息和圖片,修改學生的信息(考慮到更改寢室樓的情況),刪除學生的信息(該學生畢業或搬出寢室),登錄系統協助同學錄入人臉信息,使用管理員功能錄入人臉信息主要還是考慮到了系統的安全性和學生隱私的安全性。
圖8?系統界面模塊設計
各部分的功能描述如下: ???
表2?各界面模塊功能
| 界面名稱 | 功能描述 |
| 角色選擇界面 | 選擇角色是管理員還是學生,學生:跳轉到人臉識別界面,管理員:管理員登陸界面 |
| 管理員登錄界面 | 輸入管理員的賬號及密碼進行驗證,驗證成功,跳轉到管理員功能選擇界面,否則報錯 |
| 管理員功能選擇界面 | 選擇查詢學生信息或者錄入人臉信息 |
| 管理員查詢、修改學生界面 | 加載學生基本信息及人臉信息,可以實現修改、刪除等操作。 |
| 管理員錄入學生信息界面 | 主要是錄入人臉、學號姓名等信息,增加學生,將其基本信息保存到庫中。 |
| 學生人臉識別界面 | 學生實現人臉識別,識別成功則發出語音提醒,以及成功對話框提醒,同時顯示該學生的基本信息,大門打開;實現錯誤的話,提示錯誤語音信息以及錯誤對話框提醒。 |
4.3人臉識別功能設計
人臉識別的流程如下圖,簡單拆分為人臉錄入和人臉識別兩個流程,人臉錄入需要學生的全部臉部信息都可以被攝像頭捕捉,要求臉部無遮擋,系統內部會自動獲取學生的人臉特征向量,存入學生信息庫,用于匹配人臉信息。人臉識別則把攝像頭中的人臉和庫中已標記的人臉特征進行匹配,顯示人臉識別的結果。
圖9?人臉識別流程?
4.4初步低保真模型
圖10,圖11是我們設計的低保真模型,在設計的時候沒有考慮添上添加界面間的關聯關系,存在缺陷。界面跳轉關系如下:
首先是首頁,選擇個人身份,我是學生或者管理員;
管理員跳轉到管理員驗證登錄界面,身份驗證成功即可對學生的信息,進行管理。
學生則直接進入門禁系統的人臉識別模塊,無論失敗或成功均給出語音和信息框的提示。人臉識別時實時進行的,但是需要按按鈕才能實現與門禁系統的交互,系統判斷人臉信息是否安全,決定是否開放大門。
?圖10 低保真模型(1)
?
圖11 低保真模型(2)
- 課題主要算法
人臉識別的困難之處
- 不同個人之間的區別不大:大部分人臉的結構都很相似,甚至人臉器官的結構外形都很相似。
- 人臉的外形很不穩定:人的面部表情多變,不同的觀察角度、光照條件等都會影響人臉的視覺圖像。
圖12 人群中人臉檢測
?人臉檢測(Face Detection):人臉檢測用于確定人臉在圖像中的大小和位置,即解決“人臉在哪里”的問題,把真正的人臉區域從圖像中裁剪出來,便于后續的人臉特征分析和識別。
?????Dlib自帶許多機器學習算法,可以較好的解決問題,本實驗主要涉及有以下這幾種
①人臉識別的模型介紹
如下圖所示,該模型將人臉分為64個監測點,左圖是這68點在人臉模型上的分布:
?圖13 監測點在人臉模型上的分布
下圖是一張示例人臉圖根據這個模型檢測出的結果,監測點信息會顯示在人臉上:
圖14 示例人臉圖檢測結果
人臉特征表示是人臉識別中最為重要的一步,它接受的輸入是標準化的人臉圖像,通過特征建模得到向量化的人臉特征,最后通過分類器判別得到識別的結果,概要圖如下所示:
?圖15 人臉特征表示概要圖
2.另一種常用模型shape_predictor_5_face_landmarks.dat 。
檢測5個人臉特征點,即雙眼的眼頭及眼尾以及鼻頭這五個位置,因為這檢測5個點,所以執行速度很快,但是缺點是準確度會有所下降,不適用于需要嚴格檢測人臉的場景,例如人臉支付等。
5個關鍵點的分布如下所示:
?圖16 5個關鍵點的分布
右圖是檢測出的效果,由圖可知,這5個關鍵點分布在左右眼和鼻孔處,匹配的關鍵信息會比較少。在要求沒有那么苛刻的場合,可以方便快速地進行人臉檢測。
②人臉識別網絡詳解(殘差網絡resnet)
在本次實驗中,我們首先嘗試的是OpenCv中提供的基于haar特征級聯進行人臉檢測的方法,這種算法對稱性較好,在人臉增加、人臉角度傾斜、兩張人臉相似度較高的情況下,這個算法的效果不好,這個模型主要采用的是卷積神經網絡,圖像分類存在的問題:當神經網絡的深度逐漸加深,其表現會越來越好,例如AlexNet、VGG等,但實際操作過程中,直接將神經網絡的層級結構加深,會出現網絡退化現象。
普通的神經網絡,幾乎很難實現恒等映射,即訓練一個網絡讓他輸入和輸出相等是很困難的。網絡退化現象區別于梯度消失、梯度爆炸,也區別于過擬合現象。梯度消失現象指的是訓練中無法收斂,過擬合現象指的是訓練中表現好而測試中表現不好,所以為了更好地實現人臉識別,dlib采用的是殘差網絡結構
????下圖是殘差網絡與普通卷積網絡的結構對比:
圖 17 殘差網絡與普通卷積網絡的結構對比
普通的卷積網絡與深度殘差網絡的最大區別在于,深度殘差網絡有很多旁路的支線將輸入直接連到后面的層,使得后面的層可以直接學習殘差,這些支路就叫做shortcut。傳統的卷積層或全連接層在信息傳遞時,或多或少會存在信息丟失、損耗等問題。ResNet 在某種程度上解決了這個問題,通過直接將輸入信息繞道傳到輸出,保護信息的完整性,整個網絡則只需要學習輸入、輸出差別的那一部分,簡化學習目標和難度,緩解了在深度神經網絡中增加深度帶來的梯度消失問題 。
②人臉信息提取過程
圖18 提取人臉信息四個流程
人臉識別按順序可以大體上分為四個部分,即人臉檢測,人臉對齊,人臉校驗和人臉識別。 人臉檢測就是在一張圖片中找到人臉所處的位置,即將人臉圈出來,比如拍照時數碼相機自動畫出人臉,主要通過人臉邊緣特征提取。分割出圖像中的人臉,本次實驗我們可以采用dlib.get_face_chip()來分割人臉
人臉對齊就是在已經檢測到的人臉的基礎上,自動找到人臉上的眼睛鼻子嘴和臉輪廓等標志性特征位置。人臉對齊開始時,我們要先構造一棵GBDT(決策樹),通過這棵樹,將人臉的初始形狀回歸到其真實形狀上去(這是測試時的目的,訓練時,也就是構建樹時我們是知道其真實形狀的,那么目的自然就是用GBDT來表示初始形狀和真實形狀的關系)。當我們把N張圖片都輸入這第一棵樹,自然每一張圖片最終都會落入其中的一個葉子節點。在構造第二棵樹之前,我們要把每張圖片的當前形狀做一個更新,也就是要將當前形狀更新成:當前形狀+殘差。對應到第一棵樹,即是初始形狀加上殘差,這樣每一張圖片的當前形狀就從初始形狀變成了初始形狀加殘差,距離真實形狀又更近了一步。
人臉矯正就是對檢測出來的關鍵點,做仿射變換。很多情況下,人臉和我們的檢測平面不是完全平行的,一般都會存在一個傾斜角度,因為我們的模型屬于實在正臉上的檢測,這個角度會影響關鍵點的檢測精度。人臉識別就是給定一張臉,判斷這張臉是誰。仿射變換就是將檢測到的人臉圖像進行旋轉變換,主要通過對像素點的數學矩陣變換來實現。
③代碼實現流程及關鍵代碼
執行速度很快,但是缺點是準確度會有所下降,不適用于需要嚴格檢測人臉的場景。
人臉錄入的流程如下圖的左圖,先獲取攝像頭捕捉的視頻流,保存多張照片到本地中,有利于人臉特征的提取,利用shape_predictor_68_face_landmarks.dat、dlib_face_recognition_resnet_mdel_v1.dat對照片中的當前幀進行人臉檢測,提取人臉的128D的特征向量,并保存到features.csv文件中。人臉識別的流程如下圖的右圖,先獲取攝像頭捕捉的視頻流,對當前幀進行人臉檢測,計算當前人臉的128D特征。再與庫中的features向量,計算它們之間的歐式距離,找到小于閾值的,則算匹配成功。
圖19?代碼實現流程
下圖代碼為在當前幀中應用dlib的特征點檢測和人臉識別模型,并獲取它的描述人臉的128維向量。
圖20-1?關鍵代碼(1)
圖20-2?關鍵代碼(2)
在實時識別攝像頭中的人臉時,需要找到人臉的位置,我們使用質心追蹤來人臉,再進行歐式距離的計算,如下圖代碼所示:
?圖21 關鍵代碼(3)
找出最小的歐式距離匹配,若小于閾值則匹配成功。代碼如下圖所示。
圖22 關鍵代碼(4)
2.界面跳轉:
1.按鈕觸發跳轉界面或者關閉界面
涉及的主要的知識就是給按鈕的點擊事件增加動作。
在初始化時使按鈕關聯函數,在具體的函數實現中,運行我們需要跳轉的界面。例如:
初始化():self.pushButton_2.clicked.connect(self.input_face)def input_face(self):enter_face.main()?圖23 pushButton_2按鈕
????點擊pushButton_2按鈕(錄入學生信息),即跳轉界面學生人臉信息錄入的界面,添加 self.colse()函數,即可在跳轉時關閉原有的界面。
????用時需要注意跳轉的界面需要在原函數在import,.py文件的位置放置也有要求,工程量大不大的情況下,盡量在同一目錄下。
圖24 文件目錄
2.多事件并行進行,使用thread.。
因為有許多操作是要并行進行的,例如人臉檢測和查詢該人的信息,匹配庫內的學生基本信息,為了提高運行速度,所以我們的初步想法是使用多線程程序,在一個.py文件中寫多個線程,同時start(),各自運行,通過改變全局變量來實現線程之間信息的傳遞。
線程開啟語句(寫在主函數中):
????這樣寫線程在
thread(target=main1).satrt() thread(target=main2).satrt() thread(target=main3).satrt()初步運行的時候,在初步界面跳轉的時候是很流暢的,但是在點擊按鈕觸發事件時,程序就會卡死。
?圖25 未響應
如上圖所示,界面卡死,框體中顯示“未響應”信息,接著整個程序就會自動退出,系統關閉。這樣的設計時不符合我們的要求的,線程的本義就是為了防止卡死程序。
卡死的原因如下:
點擊按鈕,可能會觸發耗時的程序,耗時的操作會獨占系統cpu資源,如果不能及時結束,主線程將會阻塞,這樣界面就會出現未響應的狀態。
解決方案:
1.使用子線程。但是創建子線程效果并不是很大,依然會出現界面未響應的狀況。
以PYQT5界面為例(C++代碼):
class MyThread : public QThread { Q_OBJECT protected:void run(); }; void MyThread::run() { ... }2.不必要不使用太多的線程結構,尤其是在按鈕事件上。在按鈕事件觸發函數中添加操作,運行速度雖然沒有這么快,但是不會出現界面卡死的狀況。
3.對多線程的函數進行優化,這一方法難度較大,由于時間有限,所以未能實現。
3.信息的存儲: ??
整個系統需要存貯學生的基本信息(學號,姓名,寢室樓層)和學生的人臉信息,對于一個應用系統,最好就是存儲在數據庫中,可存儲的容量非常大,易于管理,也有一定的安全防護性,主要體現在以下幾個方面:
1) 數據庫可以結構化存儲大量的數據信息,方便用戶進行有效的檢索和訪問。數據庫可以對數據進行分類保存,并且能夠提供快速的查詢。例如,我們平時使用百度搜索內容時,百度也是基于數據庫和數據分類技術來達到快速搜索的目的。
???2) 數據庫可以有效地保持數據信息的一致性、完整性、降低數據冗余。
????可以很好地保證數據有效、不被破壞,而且數據庫自身有避免重復數據的功能,以此來降低數據的冗余。
???3) 數據庫可以滿足應用的共享和安全方面的要求,把數據放在數據庫中在很多情況下也是出于安全的考慮。
???4) 數據庫技術能夠方便智能化地分析,產生新的有用信息。
常見的數據庫有MySQL,SQL SERVE
?圖26 MySQL,SQL SERVE
簡單介紹Python連接數據庫的方法:
pyton連接數據庫需要先安裝pymysql模塊:pip install pymysql
安裝完成后導入pymysql模塊:import pymysql
python連接數據庫主要分五個步驟:
?????step1:連接數據庫
?????step2:創建游標對象
?????step3:對數據庫進行增刪改查
?????step4:關閉游標
?????step5:關閉連接
在成熟的學生應用系統系統中,學生的基本信息都是存在一個數據庫里,但是考慮到python連接數據庫的復雜性且我們的系統運用的局限性,最終還是使用CSV文件來存儲學生的關鍵信息。CSV文件是存儲表格數據的常用文件格式。其文件以純文本形式存儲表格數據(數字和文本)。stud_information存儲學生基本信息,features_all存儲學生的臉部信息。
?圖27 存儲文件
加載CSV文件實例代碼:
def loadCsv(self, fileName):with open(fileName, "r",encoding='UTF-8') as fileInput:for row in csv.reader(fileInput): items = [QtGui.QStandardItem(field)for field in row]self.model.appendRow(items)修改CSV文件實例代碼:
def writeCsv(self, fileName="stud_information.csv"):fileName="stud_information.csv"with open(fileName, "w",encoding='UTF-8',newline='') as fileOutput:writer = csv.writer(fileOutput)for rowNumber in range(self.model.rowCount()):fields = [self.model.data(self.model.index(rowNumber, columnNumber),QtCore.Qt.DisplayRole)For columnNumber in range(self.model.columnCount())]writer.writerow(fields)CSV使數據交換更容易,也更易于導入到電子表格或數據庫存儲中。
- 課題運行結果
運行結果:
首頁界面:供用戶選擇身份,用戶身份分為學生,和管理員,通過鼠標點擊選擇。
??圖27 首頁
管理員登錄界面:
??圖 28管理員登錄界面
管理員功能選擇界面:
?圖29 管理員功能選擇界面
管理員查詢學生信息界面:
?圖30 管理員查詢學生信息初始界面
?圖31 管理員查詢特定學生信息
管理員錄入學生信息界面:
?圖32 管理員錄入學生信息界面
學生應用門禁系統界面:
?????圖33-1 學生應用門禁系統界面
多張學生人臉同時識別:
???圖33-2 學生應用門禁系統界面
開門成功:
??????
?圖34 學生允許進入
開門失敗:
?圖 35 學生不允許進入
- 課題人機交互的設計
①按鈕交互
按鈕設計是用戶界面中主要的交互基石,按鈕作為引流,提升產品數據的重要節點:
圖36?按鈕設計
按鈕吸引用戶的地方,只需簡單的觸摸,就能獲得處理事件的滿足感。即使很多新家電和其他設備都進化為了觸屏操作,實體按鈕卻并沒有完全消失,其塑造的行為習慣仍然影響按鈕設計的直觀性和易用性,也是實現跳轉界面,關閉界面的主要方法。本次大作業中添加了許多的按鈕來滿足系統用戶的需求。
①?按鈕的多種狀態:
設計正確的交互和樣式,對按鈕設計十分重要。按鈕每個狀態必須可識別,要顯著區別于其他狀態和周圍的布局,但是也不能完全改變組件或者制造視覺混亂。
圖37?按鈕的六種狀態
六種狀態解釋如下:
- 1.普通狀態:可交互和可用的狀態。
- 2.焦點狀態:用戶使用鍵盤或其他輸入方法來突出顯示一個元素。
- 3.懸停狀態:用戶把光標置于可交互元素上的狀態。
- 4.觸發狀態:用戶已點擊按鈕后的狀態。
5.加載狀態:當操作沒有立即實現時,表示正在進行的狀態。
- 6.禁用狀態:按鈕目前不可交互,但以后可以使用。
- ②按鈕的多種樣式
最常見的是圓角按鈕,可以輕易識別,并且在輸入字段旁邊看起來不錯。為按鈕選擇正確的樣式,取決于目的、平臺和規范。以下是一些最流行的樣式:
?圖38?按鈕樣式
③不同樣式的優先級
樣式最初是用來區分操作的優秀級。明確操作的優先級,可以在眾多的選擇前,引導用戶。通常,要有一個突出的按鈕(主按鈕),幾個二級按鈕,還有三級按鈕。
④有時不需要默認按鈕
通常,把最常用的按鈕設置為“默認”(使用主樣式)和選中的狀態。這樣可以幫助大多數用戶,更快完成他們的任務,引導正確的方向。
此外,當選擇同等重要時,或者操作存在危險,在這些情況中,需要用戶明確按鈕的選擇而不是意外選擇。
例如下面這個界面,就不合適設置默認按鈕,重置會使文本框內容清空,確認會馬上核對用戶信息,默認記住密碼則會危害管理員信息的安全性。
圖39?管理員登錄界面
⑤一致性提高效率和準確性
一致性提高速度和準確性,避免錯誤。創建可預測性可以幫助用戶獲得掌控感,在產品中實現他們的目標。在創建主要、二級和三級樣式時,嘗試找到一些共同的元素,比如:色彩、形狀等。嘗試不僅對設計的系統保持一致性,對平臺也要保持一致性。本次系統設計中我們主要選擇藍色為基調色,不管是背景還是框體=圖都選擇藍色,又使界面統一,又使用戶眼部舒適。
⑥ 按鈕的文案
按鈕文案和樣式一樣重要。使用錯誤的文案,會讓用戶困惑,浪費時間,也會誤操作。
一個好的按鈕文案,可以引導用戶操作。最好使用動詞,告訴用戶在做什么。就像這個按鈕在詢問用戶,“你想收藏嗎?”或者“你想確認命令嗎?”
避免使用“是”或“不”,或者太通用的,比如提交。
例如在關閉界面是提示“你是否確定要退出?”
②界面交互
人機界面是人與計算機之間傳遞、交換信息的媒介和對話接口,是計算機系統的重要組成部分。它實現信息的內部形式與人類可以接受形式之間的轉換。凡參與人機信息交流的領域都存在著人機界面。系統和用戶之間進行交互和信息交換的媒介, 它實現信息的內部形式與人類可以接受形式之間的轉換。凡參與人機信息交流的領域都存在著人機界面。?
從心理學意義來分,界面可分為感覺(視覺、觸覺、聽覺等)和情感兩個層次。用戶界面設計是屏幕產品的重要組成部分。界面設計是一個復雜的有不同學科參與的工程,認知心理學、設計學、語言學等在此都扮演著重要的角色。用戶界面設計的三大原則是:置界面于用戶的控制之下;減少用戶的記憶負擔;保持界面的一致性。
要求開發者做到界面的統一,符合人的認知心理學、設計學和語言學。
本系統中提示語言都比較簡潔明了,減少了用戶的記憶負擔和理解難度。
界面設計應該考慮以下原則:
1、以用戶為中心的基本設計原則
在系統的設計過程中,設計人員要抓住用戶的特征,發現用戶的需求。在系統整個開發過程中要不斷征求用戶的意見,向用戶咨詢。系統的 設計決策要結合用戶的工作和應用環境,必須理解用戶對系統的要求。最好的方法就是讓真實的用戶參與開發,這樣開發人員就能正確地了解 用戶的需求和目標,系統就會更加成功。
我們的系統根據用戶的需求設定兩種角色,并且完善了不同角色的界面設計。
2、順序原則
即按照處理事件順序、訪問查看順序(如由整體到單項,由大到小,由上層到下層等)與控制工藝流程等設計監控管理和人機對話主界面及 其二級界面。
3、功能原則
即按照對象應用環境及場合具體使用功能要求,各種子系統控制類型、不同管理對象的同一界面并行處理要求和多項對話交互的同時性要求 等,設計分功能區分多級菜單、分層提示信息和多項對話欄并舉的窗口等的人機交互界面,從而使用戶易于分辨和掌握交互界面的使用規律和 特點,提高其友好性和易操作性。
不同的功能實現按鈕跳轉界面,比較方便,操作性強。
4、一致性原則
包括色彩的一致,操作區域一致,文字的一致。即一方面界面顏色、形狀、字體與國家、國際或行業通用標準相一致。另一方面界面顏色、 形狀、字體自成一體,不同設備及其相同設計狀態的顏色應保持一致。界面細節美工設計的一致性使運行人員看界面時感到舒適,從而不分散 他的注意力。對于新運行人員,或緊急情況下處理問題的運行人員來說,一致性還能減少他們的操作失誤。
5、頻率原則
即按照管理對象的對話交互頻率高低設計人機界面的層次順序和對話窗口萊單的顯示位置等,提高監控和訪問對話頻率。
6、重要性原則
即按照管理對象在控制系統中的重要性和全局性水平,設計人機界面的主次菜單和對話窗口的位置和突顯性,從而有助于管理人員把握好控 制系統的主次,實施好控制決策的順序,實現最優調度和管理。
7、面向對象原則
即按照操作人員的身份特征和工作性質,設計與之相適應和友好的人機界面。根據其工作需要,宜以彈出式窗口顯示提示、引導和幫助信息 ,從而提高用戶的交互水平和效率。
在用戶退出時,給出提示,是否退出,避免用戶不小心點到按鈕,導致需要重新登錄。
總結:
頁面設計需要體現易憧、簡單、實用的基木 原則,充分表達了以人為本的設計理念。
③聲音交互
語音提示可以用來播報產品信息,安全提示性語句,門鈴音樂或警報聲音的工具,在信息傳播上有很廣泛的使用。
本次系統中我們也在重要地方設計了些語音的提示:
在學生需要進門,系統已經識別出人臉時點擊查詢按鈕(功能類似進門),若該同學是這棟樓內的學生,給出語音提示:驗證通過,請進門。
?圖40?驗證通過界面
若該同學不是這棟樓內的學生,給出語音提示:驗證失敗,請重新驗證。
?圖41?驗證失敗界面
在用戶登錄系統時,提示用戶選擇自己的身份,給出語音提示:請選擇身份
圖42系統主界面
門禁系統中我們只應用了語音提示的交互,開始設想時是想實現聲控式交互的交互,聲控制式交互、觸控交互和視覺交互方式的優缺點如下表:
表3?聲控制式交互、觸控交互和視覺交互方式的優缺點
?主要優勢是:
1.輸入更高效。
研究結果表明,語音輸入比鍵盤輸入快3倍。如果你從解鎖手機到設置鬧鐘需要兩分鐘,直接說一句話設置鬧鐘,可能只需要10秒鐘。
2. 感官和精力占用更少。
一張嘴,將人的雙手、眼睛從圖形界面交互中解放出來,想象一下當你手握方向盤時,說一句話就直接接聽電話、播放音樂,是無疑更方便也更安全。騰出來的感官,意味著可以并行處理其他任務,理論上有更高的效率。
3.語音交互擁有克服現存“收縮桌面”式的移動UI固有缺陷的能力
主要通過從有聲語言輸入中精準地推斷用戶意圖。
原本的低保真模型設想通過聲控來選擇用戶身份,聲控實現人臉識別和學生查詢,考慮到多線程的運行和系統的復雜性,還有環境影響導致識別精度降低。實際上,語音交互的技術依然存在巨大挑戰,還很難在復雜的環境和不確定的情景下,真實的理解用戶的行為和意圖。語音交互的可靠性隨環境的變化會受到影響。例如,一個患上感冒的人有可能被錯誤的拒認而無法使用該語音識別系統。同時還有許多其它因素影響其準備性,比如說,聲音樣本的質量、情緒、背景噪音以及隨著時間推移聲音的變化等。
所以只應用了語音提醒。
- 課題總結
我們在初步設計時,本來只設計了學生進門和錄入人臉的這兩個功能,缺少作為一個人機交互的設計,人機交互是指人與計算機之間使用某種對話語言,以一定的交互方式,為完成確定任務的人與計算機之間的信息交換過程,所以后續我們又充分分析了門禁系統的需求,設定了兩個身份來應用該系統。
總體上來說,dlib自帶的人臉識別庫識別精度和識別速度都是很可觀的,我們本次還嘗試了自己手機自帶的人臉識別模型(識別速度快,很多可能是5個關鍵點的模型),因為我和組員是雙胞胎,所以我們的人臉向量化結果相似度是比較高的,我們在手機上錄入自己的人臉,用人臉信息來解鎖手機,發現對方的臉也是可以解鎖的,(作為對照,我們也試過其他同學的人臉,發現手機自帶的模型相對還好,基本不會識別出錯,除非是我和組員的情況,我們人臉相似度過高。)但是我們測試本次設計用的dlib模型時,測試出來,大多數情況下,這個算法是不會把我們混淆的,說明算法精度還是不錯的,至少比部分手機好。
本次設計還存在一個缺陷就是,因為我們人臉識別之后是存在一個開門動作,所以我們這還設計了按鍵開門時,會將檢測到的學生信息輸出,如果多張人臉存在,系統就會檢測出多個結果,對我們查詢學生信息來說是不利的。還有就是本次只是一個軟件的模擬,實際上,開門等等是要經過較精確的硬件設計,這里其實也存在一個人機交互過程,所以本次實驗設計距離實際應用還有很大提高空間。
總結
以上是生活随笔為你收集整理的基于人脸识别的门禁系统报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超详细!关于万能头文件<bits/std
- 下一篇: 火狐强制刷新_强制Firefox 3在W