照片、視頻中的人臉有時也能騙過一些不成熟的人臉識別系統,讓人們對人臉解鎖的安全性產生很大懷疑。 在這篇 4 千多字的教程中,作者介紹了如何用 OpenCV 進行活體檢測(liveness detection)。 跟隨作者給出的代碼和講解,你可以在人臉識別系統中創建一個活體檢測器,用於檢測偽造人臉並執行反人臉欺騙 雙效犀利士 雙效犀利士藥局 雙效犀利士香港 雙效犀利士副作用 雙效犀利士真偽
我在過去的一年裡寫了不少人臉識別的教程,包括:
-
https://www.pyimagesearch.com/2018/09/24/opencv-face-recognition/
-
https://www.pyimagesearch.com/2018/06/18/face-recognition-with-opencv-python-and-deep-learning/
-
https://www.pyimagesearch.com/2018/06/25/raspberry-pi-face-recognition/
但在我的郵件和人臉識別相關帖子下面的評論中經常會出現以下問題:
想想如果有壞人試圖攻破你的人臉識別系統會發生什麼?
這樣的使用者可能會拿到另一個人的照片。 甚至可能他們的手機上就有其他人的照片或視頻,他們可以用這樣的照片或視頻來欺騙識別人臉的相機(就像本文開頭的圖片那樣)。
在這種情況下,照相機完全有可能將其識別為正確的人臉,從而讓未經授權的使用者騙過人臉識別系統!
如何識別這些真假人臉呢? 如何在人臉識別應用中使用反人臉欺騙演算法?
答案是用OpenCV實現活體檢測——這也是我今天要介紹的內容。
要瞭解如何用 OpenCV 將活體檢測結合到你自己的人臉識別系統中,請繼續往下讀。
你可以在文末的下載部分下載原始碼:
https://www.pyimagesearch.com/2019/03/11/liveness-detection-with-opencv/
本教程第一部分將討論什麼是活體檢測以及為什麼要藉助活體檢測提升我們的人臉識別系統。
從這裡開始要先研究一下用於活體檢測的數據集,包括:
我們還將回顧用於活體檢測器專案的項目結構。
為了創建活體檢測器,我們要訓練一個能分辨真假人臉的深度神經網路。
因此,我們還需要:
-
構建圖像數據集;
-
實現可以執行活體檢測的CNN(我們將這個網路稱為「LivenessNet」);
-
訓練活體檢測器網路;
-
創建一個 Python+OpenCV 的腳本,可以通過該腳本使用我們訓練好的活體檢測器模型,並將其應用於實時視頻。
那我們就開始吧!
印度犀利士 印度犀利士5mg哪里买 印度犀利士ptt 印度犀利士哪里买
什麼是活體檢測? 我們為什麼需要活體檢測?
圖 1:用 OpenCV 進行活體檢測。 左圖是我的即時(真實)視頻,而右圖中我拿著自己的iPhone(欺騙)。
人臉識別系統與以往任何時候相比都更加普遍。 從iPhone(智能手機)中的人臉識別,到中國大規模監控中的人臉識別,人臉識別系統的應用無處不在。
但人臉識別系統也很容易被「偽造」和「不真實」的面部所欺騙。
在面部識別相機前拿著一個人的照片(無論是印出來的還是手機上的)可以輕而易舉地騙過人臉識別系統。
為了讓人臉識別系統更加安全,我們需要檢測出這樣偽造的面部——活體檢測(術語)指的就是這樣的演算法。
活體檢測的方法有很多,包括:
-
紋理分析(Texture analysis),該方法計算了面部區域的局部二值模式(Local Binary Patterns,LBP),用 SVM 將面部分為真實面部和偽造面部;
-
頻率分析(Frequency analysis),比如檢查面部的傅立葉域;
-
可變聚焦分析(Variable focusing analysis),例如檢查連續兩幀間圖元值的變化;
-
啟發式演算法(Heuristic-Based algorithms),包括眼球運動、嘴唇運動和眨眼檢測。 這些演算法試圖追蹤眼球運動和眨眼行為,來確保使用者不是拿著誰的照片(因為照片不會眨眼也不會動嘴唇);
-
光流演算法(Optical Flow algorithm),即檢測 3D 物件和 2D 平面產生的光流的屬性和差異;
-
3D 面部形狀(3D face shape),類似於iPhone上的面部識別系統,這種演算法可以讓面部識別系統區分真實面部和其他人的照片或列印出來的圖像;
結合以上演算法,這種方法可以讓面部識別系統工程師挑選適用於自己應用的活體檢測模型。
Chakraborty 和 Das 2014 年的論文(《An Overview of Face liveness Detection》)對活體檢測演算法做了全面的綜述。
我們在本教程中將活體檢測視為一個二分類問題。
給定輸入圖像,我們要訓練一個能區分真實面部和偽造面部的卷積神經網路(Convolutional Neural Network)。
但在訓練活體檢測模型之前,我們要先檢查一下數據集。
我們的活體檢測視頻
圖 2:真實面部和偽造面部的樣例。 左邊的視頻是我的面部的真實視頻,右邊是在播放同樣的視頻時筆記本錄製的視頻。
為了讓例子更直觀,本文建立的活體檢測器側重於區分真實面部和螢幕上的偽造面部。
這一演算法可以輕易擴展到其他類型的偽造面部上,比如列印輸出的偽造面部和高解析度輸出的偽造面部等。
為了建立活體檢測數據集,我做了下列工作:
-
拿著我的 iPhone,將它設置為人像或自拍模式;
-
錄製約 25 秒我在辦公室里來回走的視頻;
-
重播這段 25 秒的視頻,這次用我的 iPhone 對著錄製了重播視頻的電腦;
-
這樣就產生了兩段樣例視頻,一段用於「真實」面部,一段用於「偽造」面部;
-
最後,我在這兩段視頻上都用了人臉檢測,為這兩類提取出單獨的面部 ROI(Reign of Interest)。
我在本文的「下載」部分提供了真實面部和偽造面部的視頻檔。
你可以將這些視頻作為數據集的起點,但我建議你多收集一些數據,這可以讓你的活體檢測器更魯棒也更安全。
通過測試,我確定模型有些偏向我的臉,這是意料之中的結果,因為所有的模型都是基於我的面部訓練出來的。 此外,由於我是白人(高加索人),所以如果數據集中有其他膚色或其他人種的面部時,這個模型效果會沒有那麼好。印度犀利士心得 印度犀利士香港 印度犀利士真伪 印度犀利士20mg 印度犀利士副作用
在理想情況下,你應該用不同膚色和不同人種的面部來訓練模型。 請參考本文的「限制和後續工作」部分,來瞭解其他改善活體檢測模型的建議。
你將在本教程剩下的部分學習如何獲取我錄製的數據集以及如何將它實際應用於通過OpenCV和深度學習建立的活體檢測器。
文章定位: