1. 研究動機 在大二上學期時,想要做出一個人臉門禁系統,在網路搜尋時,搜尋到 Dlib 這個函式庫,他提供了眾多的預訓練模型, 本作品使用 Dlib 函式庫搭配 tkinter 套件製作 GUI ,並且用到了本課程教的陣列運算,達成即時人臉辨識的功能。 2. 研究步驟 2.1 系統流程圖 圖一 系統流程圖 2.2 獲得人臉位置 在一張圖像中,我們要先辨識圖片中的人臉及其位置,在 Dlib 函式庫中,是以 CNN 的方法來獲得人臉的位置, Dlib 提供了已經訓練好的模型,在程式中只要使用 dlib.cnn_face_detection_model_v1 函式即可使用此模型,在該步驟中,此函式可以回傳檢測到人臉的數量以及座標。 圖二 獲得人臉位置功能圖例 2.3 獲得人臉關鍵點 在獲得人臉的數量以及座標之後,由於人臉有許多的器官,例如鼻子、眉毛等等, Dlib 規範了 68 個人臉的關鍵點,使用 dlib.shape_predictor 函式可以得到人臉 68 點關鍵點的座標,以更好的辨識人臉。 圖三 獲得人臉關鍵點 功能圖例 2.4 獲得人臉特徵向量 在人臉辨識中,最後需要將所辨識到的人臉轉成特徵向量,才可以快速地比較,如果是將人臉以圖像的方式比對,將會耗費很多的資源,在 Dlib 中作者提供了使用 29 層 ResNet 訓練而成的模型,在輸入了圖片以及關鍵點後 dlib.face_recognition_model_v1 這個函示會輸出 128 維的特徵向量,用來跟資料庫的特徵向量做比對。 圖四 獲得人臉特徵向量 功能圖例 2.5 比對相似人臉 獲得人臉特徵相量後,必須與資料庫的特徵向量比對,比對方法為先將人臉特徵向量減去資料庫的向量再取歐式距離,擁有最小歐式距離並且歐式距離小於自訂閾值的人臉標籤即是系統辨識出之人臉。 3. 實驗結果 在 GTX1050 顯示卡運算下,在 640x480 的尺寸中,將 1 幀畫面辨識出其中人臉,耗時僅 0.1 秒,是可以達到串流功能的,以下是靜態的執行畫面。 圖五程式執行畫面 、 程式動態影片 (google 雲端 ) 4. 結論 Dlib 中,使用 CNN 作為人臉偵測的方法, CNN 的方法雖然精度很高,但是需要的運算效能非常多,在像是樹梅派 嵌入式系統,是不能達...
留言
張貼留言