基于DeepFace模型設計的人臉識別軟件
完整資料進入【數(shù)字空間】查看——baidu搜索"writebug"?
人臉識別軟件(無外部API)
V2.0 基于DeepFace模型設計的人臉識別軟件 V1.0 基于PCA模型設計的人臉識別軟件
V2.0
更新時間:2018-08-15
在觀看了吳恩達老師的“深度學習課程”,了解了深度卷積神經(jīng)網(wǎng)絡在人臉識別中的應用。其中提到的DeepFace模型在作業(yè)中有實現(xiàn)過程,故借此機會,將該模型應用到自己的人臉識別軟件上。
引入 DeepFaceNet 模型,提高了識別準確率。同時解決了One-Shot問題。
新增文件
dir 'deepface':包含了模型文件、識別函數(shù)、編碼函數(shù)等
'deepface.h5' :DeepFace模型文件,采用Keras(Tensorflow backend)加載模型。
'fr_utils.py' :深度人臉識別接口,包含:模型編碼人臉函數(shù)、人臉識別函數(shù)。
'inception_blocks.py':DeepFace模型接口文件,包含:加載模型函數(shù)、模型損失函數(shù)。
更新細節(jié)
'face_recognition.py'中新建了'DeepFaceRecognition'類,用于人臉識別。
增加識別細節(jié)的處理,未注冊用戶將會顯示“Unknown”。
在圖像預處理部分加入直方圖均衡化,增加了在較暗處的識別準確率。
V1.0
起初,在數(shù)據(jù)庫課程設計部分,我用C#設計了一個基于人臉識別的簽到記錄系統(tǒng)。這個系統(tǒng)中的人臉識別部分使用的是商湯科技 Face++ API。由于識別速度比較慢,還需要連網(wǎng),我總想將其改為離線式識別。所以,就有了這一篇博客。
基于之前寫過的一篇博客 《圖像處理之人臉識別》 中介紹的基于PCA的訓練模型方法得到了人臉模型。
基于人臉模型、Python設計了這個小軟件。這樣擺脫了使用第三方API的缺點,識別速度更快。不過,經(jīng)過測試,該方法受到光照影響較大。
開發(fā)工具
環(huán)境
windows 10
Anaconda(Spyder)
語言
軟件設計:Python
模型訓練使用:Matlab
框架
python-opencv
實現(xiàn)人臉檢測功能,得到人臉區(qū)域
numpy
矩陣運算
scipy
科學計算,加載模型文件
tkinter
GUI開發(fā)
功能簡介
人臉識別
在本軟件設計中,我們使用的模型文件為 Matlab 導出的 .mat 文件。文件里面保存了兩個矩陣?mean_face?與?V,前者為 平均臉向量,后者為人臉空間矩陣。
該軟件保存的用戶人臉圖像大小為 112 x 92。每次開啟軟件時,加載所有用戶圖像進入內(nèi)存,并將二維圖像拉伸為一維向量。 $v_{user}^{(i)}$代表用戶$i$的人臉圖像向量
然后,我們將所有用戶圖像向量組合為用戶圖像矩陣,該矩陣的每一列為用戶圖像向量:
$$U = \begin{bmatrix} (v_{user}^{(0)})^T \ (v_{user}^{(1)})^T \ \cdots \ (v_{user}^{(n)})^T \end{bmatrix}$$
將用戶圖像矩陣$U$中的每一列減去平均臉向量$v_{mean _ face}$,再將運算后的矩陣投影至模型空間更新矩陣$U$:
$$U = V^T \cdot (U .- \ v_{mean _ face})$$
如此一來,我們得到了降維后的用戶人臉矩陣。
識別過程
采集人臉圖像,提取人臉部分,并將圖像轉(zhuǎn)換為向量形式:$v_{input}$
將上一步得到的人臉向量按如下公式投影至模型空間: $$v_{pca}=V^T \cdot (v_{input} - v_{mean _ face})$$
將上一步得到的$v_{pca}$向量與$U$矩陣中的每一列計算 歐式距離,找到最近的一列即為識別目標。





