利用NVIDIA Jetson Nano實作人臉辨識「門禁系統」PART I
深度學習目前應用最廣泛的即屬於影像辨識相關應用,舉凡自駕車系統、保安監控系統、工業瑕疵檢測應用、工廠安全監測系統及醫療影像檢測應用等。其中人臉辨識技術算是發展久且應用範圍廣,人臉辨識技術可結合多種不同產業的應用,如配合公司人員資料庫可開發門禁系統,整合犯罪資料庫可開發保安監控系統,配合商場可做為後續市場分析應用。人臉辨識整合進資料庫,辨識出特定人員後,再整合控制即可衍生出很多應用。
人臉辨識技術雖然應用範圍廣,但也有其困難之處。原因其一為人臉的結構都相當類似,甚至兩個沒有血緣關係的人,卻可能存在很相似的長相,所以才會有人有著明星臉。這樣的設定對解決辨識人臉結構問題來說是很容易達到,但要區別身分卻反而不利。要如何能準確辨識、速度快、耗費硬體資源少,其實都是研究者最想解決的問題。
人臉辨識主要流程分為三個步驟:
- 人臉檢測(Face Detection)
- 人臉對齊(Face Alignment)
- 人臉特徵表徵(Feature Representation)
傳統機器學習的人臉辨識中,一般可分為高維度人工特徵提取(例如 : LBP, Gabor)和降維(例如 : PCA, LDA)兩個步驟。不過透過深度學習,可以從原始圖像直接學習人臉表徵。主要三步驟如下:
Step 1. 找到所有臉孔(Finding all the Faces)
現行常用的臉孔搜尋方法為2005年由Navneet Dalal及Bill Triggs所開發的,稱為定向梯度直方圖(Histogram of oriented gradient,簡稱HOG) 參考資料:https://lear.inrialpes.fr/people/triggs/pubs/Dalal-cvpr05.pdf
找到所有臉孔
HOG臉孔特徵搜尋
Step 2. 臉孔特徵點定位(Posing and Projecting Faces)
找到臉孔位置後,接下來則是進一步找到臉孔上各部位的特徵點,此處使用的是2014年Vahid Kazemi和Josephine Sullivan開發的方法。即便每個人的臉孔輪廓會有不同,但在人臉基本上都可以找到這68個定位點。若能訓練模型準確定位,不論臉孔位置如何改變,都可以準確的找到臉孔各部位的相對位置。參考資料
臉孔特徵點定位
Step 3. 臉孔編碼(Encoding Faces)
此部分如同我們在訓練一組卷積神經網路(CNN),不過並非訓練整張臉孔,而是訓練一個模型讓每個臉部可以生成128個測量值。主要程序分別為載入已知人物的臉孔影像、載入同一位已知人物的另一張臉孔影像、載入完全不同的人物的臉孔影像。透過臉孔比對128個測量值,由於同一個人的任10張測量值都應該大致相同,所以系統透過此方法可以快速比對及識別身分。此方法是由Google研究人員Florian Schroff、Dmitry Kalenichenko及James Philbin在2015年研發出來的。參考資料
臉孔編碼比對
上述簡單介紹人臉辨識的概念及理論。接下來就透過簡易的實作讓大家了解人臉辨識技術的導入其實並不難。
以下是所有的材料,當然需要另行自備螢幕。NVIDIA Jetson Nano的顯示介面為HDMI。
品項 | 數量 |
NVIDIA Jetson Nano | 1 |
5V4A 電源供應器(Jetson Nano用) | 1 |
有門的房子模型 | 1 |
PWM控制板(PCA9685) | 1 |
SG90 馬達 | 1 |
Logitech camera (C310) | 1 |
杜邦線 (母對母) | 6 |
鍵盤滑鼠組 | 1 |
除了房子模型外,其他裝置都可以很容易取得,請發揮創意製作好模型。
組裝完成後的成品如下圖,筆者還另外加裝一組按鈕,方便開關機。
馬達則安裝在下方門軸處。
大家可以發揮巧思,例如馬達軸心如果安裝在嘴巴處,就可以讓骷髏模型做嘴巴開合的動作。
組裝完成後,接下來就是Jetson Nano要載入人臉辨識的模型,筆者不僅導入人臉辨識模型,也導入包含情緒、年齡及性別共四個模型。
模型的參考資料如下:
- 人臉辨識:https://github.com/ageitgey/face_recognition
- 情緒辨識:https://github.com/amineHorseman/facial-expression-recognition-using-cnn
- 年齡及性別辨識:https://github.com/dpressel/rude-carnie
大家可以參考一下上述的網址,本篇筆者就先賣個關子,下篇會再接續介紹如何組裝及導入四個模型進行辨識。