你可以通過本教程的「Downloads」部分下載代碼、數據和活體模型,然後解壓縮存檔。
進入項目目錄后,你能看到這樣的結構: 目錄中有四個主目錄: 1. 在播放我的面部視頻時通過錄製螢幕得到的偽造圖像; 2. 手機直接拍攝我的面部視頻得到的真實圖像。 face_detector/:由預訓練的 Caffe 面部檢測器組成,用來定位面部 ROI; Pyimagesearch/:該模組包含了 LivenessNet 類; videos/:這裡提供了兩段用於訓練 LivenessNet 分類器的輸入視頻。
今天我們會詳細地學習三個 Python 腳本。 在文章結束后,你可以在自己的數據和輸入視頻上運行這三個腳本。 按在教程中出現的順序,這三個腳本分別是:
1. gather_examples.py:這個腳本從輸入的視頻檔中提取了面部 ROI,幫助我們創建了深度學習面部活體數據集; 2. train_liveness.py:如檔名所示,這個腳本用來訓練 LivenessNet 分類器。 我們將用 Keras 和 TensorFlow 訓練模型。 在訓練過程中會產生一些檔:
3. liveness_demo.py:演示腳本,它會啟動你的網路攝像頭抓取幀,可以進行即時的面部活體檢測。
從訓練(視頻)數據集中檢測並提取面部 ROI
圖 3:為了構建活體檢測數據集,在視頻中檢測面部 ROI。
現在有機會看到初始數據集和項目結構了,讓我們看看該如何從輸入視頻中提取出真實面部圖像和偽造面部圖像吧。
最終目標是用這個文稿填充兩個目錄:
根據這些幀,我們後續將在這些圖像上訓練基於深度學習的活體檢測器。
開啟 gataer_examples.py,插入下面的代碼:
2~5 行導入了我們需要的包。 除了內置的 Python 模組外,該腳本只需要 OpenCV 和 NumPy。
8~19 行解析了命令行參數: --input:輸入視頻文件的路徑 --output:輸出目錄的路徑,截取的每一張面部圖像都存儲在這個目錄中。 --detector:面部檢測器的路徑。 我們將使用 OpenCV 的深度學習面部檢測器。 方便起見,本文的「Downloads」部分也有這個 Caffe 模型。 --confidence:過濾弱面部檢測的最小概率,預設值為 50%。 --skip:我們不需要檢測和存儲每一張圖像,因為相鄰的幀是相似的。 因此我們在檢測時會跳過 N 個幀。 你可以使用這個參數並更改預設值(16)。
繼續載入面部偵測器並初始化視訊流:
23~26 行載入了 OpenCV 的深度學習面部檢測器:
https://www 此時,因為已經讀取了一個幀,我們將增加讀取計數器(48 行)。 如果我們跳過特定的幀,也會跳過後面的處理,再繼續下一個迴圈(48 和 49 行)。
接著檢測面部:
為了進行面部檢測,我們要在53和54行根據圖像創建一個 blob。 為了適應 Caffe 面部識別器,這個 blob 是 300*300 的。 之後還要縮放邊界框,因此 52 行抓取了幀的維度。
58 和 59 行通過深度學習面部識別器執行了 blob 的前向傳輸。
我們的腳本假設視頻的每一幀中只有一張面部(62~65 行)。 這有助於減少假陽性。 如果你要處理的視頻中不止有一張面部,我建議你根據需要調整邏輯。
因此,第65行抓取概率最高的面部檢測索引。 66 行用這個索引計算了檢測的置信度。
接下來要過濾弱檢測並將面部 ROI 寫進磁碟:
|