使用Python,Keras和OpenCV進行實時面部活體檢測

2020-12-08 不靠譜的貓

你可以在網際網路上找到的大多數面部識別算法和研究論文都受到照片攻擊。這些方法在檢測和識別來自網絡攝像頭的圖像、視頻和視頻流中的人臉方面非常有效。然而,他們不能區分活人的臉和照片上的臉。這是因為這些算法適用於2D frames。

現在讓我們想像一下,我們想要實現一個面部識別開門器。該系統能夠很好地區分已知面孔和未知面孔;以一種只對授權人開放的方式。儘管如此,對於一個懷有惡意的人來說,只展示授權人的照片是很容易的。這就是3D探測器適用的地方,就像蘋果公司的FaceID一樣。但是如果我們沒有3D探測器呢?

歐巴馬面部照片示例

本文的目的是實現一種基於眨眼檢測的人臉活性檢測算法,以阻止照片攻擊。該算法通過網絡攝像頭實時工作,只有在對方眨眼時才顯示其姓名。該程序運行如下:

檢測攝像頭生成的每個幀中的人臉。對於每個檢測到的臉,檢測眼睛。對於每個檢測到的眼睛,檢測眼睛是睜著的還是閉著的。如果在某一時刻檢測到眼睛是睜開的,然後又閉上,然後再睜開,我們就得出結論,這個人眨眼了,程序就會顯示它的名字(在面部識別開門器的情況下,我們會授權這個人進入)。對於人臉的檢測和識別,您需要安裝face_recognition庫,它提供了非常有用的深度學習方法來查找和識別圖像中的人臉。特別是face_locations、face_encodings和compare_faces函數是最有用的3個函數。face_locations方法可以使用兩種方法檢測人臉:梯度直方圖(HoG)和卷積神經網絡(CNN)。本文選擇HoG方法。face_encodings函數是一個經過預處理的卷積神經網絡,它能夠將圖像編碼成包含128個特徵的向量。這個嵌入向量應該表示足夠的信息來區分兩個不同的人。最後,compare_faces計算兩個嵌入向量之間的距離。它將允許我們識別從網絡攝像頭幀中提取的人臉,並將其嵌入向量與我們數據集中所有編碼的人臉進行比較。最接近的向量應該對應於同一個人。

1.已知的面部數據集編碼

該算法能夠識別自己和巴拉克歐巴馬。我選了大約10張照片。下面是處理和編碼已知面部數據集的Python代碼。

現在我們知道了我們想要識別的每個人的編碼,我們可以嘗試通過網絡攝像頭識別和識別人臉。但是,在此之前,我們需要區分面部照片和活人臉部。

2.人臉活性檢測

提醒一下,我們的目標是在某一時刻檢測到眨眼動作。我訓練了一個卷積神經網絡來區分眼睛是睜著還是閉著。選擇的機器學習模型是LeNet-5,該機器學習模型已經在Closed Eyes In The Wild(CEW)數據集上進行了訓練。它由大約4800張24x24大小的眼睛圖像組成。完整機器學習模型的Python代碼如下:

在評估此機器學習模型時,準確率達到了94%。

每次我們檢測到一隻眼睛,我們就用我們的機器學習模型預測它的狀態,並跟蹤眼睛狀態。因此,使用下面的函數,檢測眨眼變得非常容易,該函數試圖在眼睛狀態歷史中找到closed-open-closed模式。

3.活體人臉識別

我們幾乎具備了建立人臉識別算法的所有要素。我們只需要一種實時檢測人臉和眼睛的方法。我使用openCV預訓練的Haar-cascade分類器來完成這些任務

上述函數是用於檢測和識別真實面部的Python代碼。它需要的參數:model:我們的open/closed眼睛分類器video_capture:流視頻face_detector:Haar-cascade face分類器。使用haarcascade_frontalface_alt.xmlopen_eyes_detector:Haar-cascade 睜眼的 分類器。使用haarcascade_eye_tree_eyeglasses.xmlleft_eye_detector:Haar-cascade左眼分類器。使用haarcascade_lefteye_2splits.xml,它可以檢測睜開或閉上的眼睛。right_eye_detector:Haar-cascade右眼分類器。使用haarcascade_righteye_2splits.xml,它可以檢測睜開或閉上的眼睛。data:已知編碼和已知人名的字典eyes_detected:一個字典,包含每個眼睛狀態歷史記錄。代碼解析:

在第2-4行,我們從webcam流中獲取一個幀,然後調整它的大小以加快計算速度。在第10行,我們從幀中檢測人臉,然後在第21行,我們將其編碼為128-d向量。在第23-38行,我們將這個向量與已知的面部編碼進行比較,並通過計算匹配的數量來確定此人的姓名。選擇匹配數量最大的一個。從第45行開始,我們嘗試將在面部框中進行眼睛檢測。首先,我們嘗試使用open_eye_detector檢測睜眼。如果探測器成功,那麼在第54行, 我們在眼睛狀態歷史中添加「1」,這意味著眼睛是睜著的,因為open_eye_detector無法檢測閉著的眼睛。否則,如果第一個分類器失敗了(可能是因為眼睛是閉著的,或者僅僅是因為它沒有識別眼睛),那麼我們嘗試使用left_eye和right_eye檢測器。為此我們需要將人臉分為左右兩部分,分別提供給每個分類器。從第92行開始,我們提取眼部,我們使用之前訓練的機器學習模型預測眼睛是否閉著。如果我們檢測到一隻眼閉著,我們假設雙眼都閉合了,我們在眼睛狀態歷史中添加「0」。否則我們認為眼睛是睜著的。最後在第110行我們使用isBlinking()用於檢測眨眼的函數,如果此人眨眼,我們會顯示其姓名。4.程序其他部分代碼

相關焦點

  • 史上最全 OpenCV 活體檢測教程!
    在本文中,Adrian 將就「如何鑑別圖像/視頻中的真實人臉和偽造人臉」這一問題進行深入的分析,並介紹使用基於 OpenCV 的模型進行活體檢測的具體方法。雷鋒網 AI 科技評論編譯如下。雷鋒網(公眾號:雷鋒網)本教程將教授你如何使用 OpenCV 進行活性檢測。
  • 使用OpenCV和Python構建自己的車輛檢測模型
    我們人類可以很容易地在一瞬間從複雜的場景中檢測和識別出物體。然而,將這種思維過程轉化為機器的思維,需要我們學習使用計算機視覺算法進行目標檢測。因此在本文中,我們將建立一個自動車輛檢測器和計數器模型。以下視頻是你可以期待的體驗:https://youtu.be/C_iZ2yivskE注意:還不懂深度學習和計算機視覺的新概念?
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    翻譯 | 於志鵬  徐普     校對 | 陶玉龍     整理 | 孔令雙在本文中,我將介紹如何在 Docker 容器中使用 Tensorflow Object-detection API 來執行實時(網絡攝像頭)和視頻的目標檢測。
  • 活體檢測很複雜?僅使用opencv就能實現!(附源碼)
    的iPhone臉部識別系統所使用的臉部形狀,使臉部識別系統能夠區分真人臉部和其他人的列印輸出的照片圖像;面部識別系統工程師可以組合上述方法挑選和選擇適合於其特定應用的活體檢測模型。plot.png:訓練歷史圖顯示準確度和損失曲線;liveness_demo.py:該演示腳本將啟動網絡攝像頭以進行面部實時活體檢測;從訓練數據集中檢測和提取面部區域
  • Python中的簡單人臉檢測(建議收藏)
    如何使用OpenCV庫檢測圖像中的人臉在本文中,將展示如何使用Python構建簡單的面部檢測器。建立一個可以檢測人臉的程序是一個很好的項目,可以開始使用計算機視覺。從名稱可以理解,我們將編寫一個程序來檢測圖像中的面部。當我說「程序」時,您可以將其理解為教機器做什麼。我喜歡使用教學而不是編程,因為這實際上是我們正在做的事情。
  • 如何快速簡單的安裝opencv-python
    >pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python這樣就會從清華鏡像安裝opencv-contrib-python庫。
  • OpenCV中的快速直線檢測
    該函數是LineSegmentDetector因版權問題從OpenCV中移除後最易用的直線檢測小能手,沒有之一。本文介紹該功能的使用方法其輸出結果剖析。在python的opencv相關的安裝包中,opencv-python 包含主要模塊,opencv-contrib-python 包含主要模塊以及一些擴展模塊。但這兩個模塊並不兼容,如果已經安裝過opencv-python,需要先卸載,再安裝opencv-contrib-python。
  • 如何使用Python進行面部識別?
    全文共2841字,預計學習時長8分鐘圖源:unsplash本文將介紹圖像處理中的一些重要概念,除了具體解釋每個步驟之外,還將提供一個在Python中使用Cv2和DLib庫輕鬆進行人臉識別的項目。感興趣區域在使用圖像進行面部分析時,最重要的概念之一是定義感興趣區域(ROI),我們必須在圖像中定義一個特定的部分,在那裡篩選或執行一些操作。
  • 【實驗】OpenCV/Python/dlib眨眼檢測
    今天我們來使用面部標誌和OpenCV 檢測和計算視頻流中的眨眼次數。為了構建我們的眨眼檢測器,我們將計算一個稱為眼睛縱橫比(EAR)的指標,由Soukupová和Čech在其2016年的論文「使用面部標誌實時眼睛眨眼檢測」中介紹。
  • 「python opencv視覺零基礎」十四、直方圖反向投影
    前文提醒:博主正在參加博客之星評比,成功入選Top200,現在暫居第九歡迎各位點擊了解更多幫我投票,非常感謝~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • opencv-python獲取圖像:面向對象與面向過程
    關於圖片的來源:1973年6月,美國南加州大學的信號圖像處理研究所的一個助理教授和他的一個研究生打算為了一個學術會議找一張數字照片,而他們對於手頭現有成堆"無聊"照片感到厭煩。事實上他們需要的是一個人臉照片,同時又能讓人眼前一亮。這時正好有人走進實驗室,手上帶著一本當時的花花公子雜誌,結果故事發生了……而限於當時實驗室設備和測試圖片的需要,lenna的圖片只摳到了原圖的肩膀部分。
  • 「python opencv視覺零基礎」十、圖片效果毛玻璃
    一、學習目標了解高斯模糊的使用方法了解毛玻璃的圖片效果添加了解如何自己做一個噪聲圖片目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 目標檢測必須要OpenCV?10行Python代碼也能實現,親測好用!
    目標檢測是藉助於計算機和軟體系統在圖像/場景中,定位目標並識別出每個目標的類別的技術。目前已廣泛用於人臉檢測、車輛檢測、行人計數、網絡圖像、安全系統和無人駕駛汽車等領域。隨著計算機技術不斷發展和軟體開發人員的不懈努力,未來目標檢測技術將更廣泛的普及開來。在應用程式和系統中使用先進的目標檢測方法,以及基於這些方法構建新的應用程式並不容易。
  • opencv-python圖像預處理-濾波
    為了消除外界環境對圖像採集的幹擾,增強圖像的邊緣及灰度跳變的部分,使圖像變得清晰以及提高圖像處理速度需要對圖像進行預處理操作,主要是對圖像進行濾波和增強操作。使用的方法可以分為空間域處理和頻率域處理兩類。空間域指圖像平面本身,這類圖像處理方法用各種模板直接與圖像進行卷積運算,實現對圖像的處理。
  • 「python opencv視覺零到實戰」八、圖片選區操作
    一、學習目標了解什麼是ROI了解floodFill的使用方法如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰
  • 初學者怎樣使用Keras進行遷移學習
    訓練和評估模型。使用以下代碼完成。 這是這個過程的第一步。導入和構建所需的模型。 要檢查模型的體系結構,我們只需要使用下面給出的這行代碼。然後,通過使用這個訓練過的模型預測新圖片,類似代碼model.predict(new_image)。 獲取Github上的代碼。 一如既往,快樂學習。 想要繼續查看該篇文章相關連結和參考文獻?
  • 基於opencv 的圖像處理入門教程
    >顏色檢測去噪檢測圖片的輪廓移除圖片的背景原文地址:https://likegeeks.com/python-image-processing/代碼和樣例圖片的地址安裝OpenCV 的安裝還是比較簡單的,直接用 pip 命令在命令行安裝即可,輸入以下命令:pip install opencv-python驗證是否安裝成功,可以運行 python 命令,然後分別輸入以下命令:import cv2
  • 基於OpenCv 和 Python 的手指識別及追蹤
    使用閾值處理和濾波技術來進行背景消除以獲得最佳結果。我在手指識別時遇到的挑戰之一是將手與背景區分開並識別手指的尖端。我將向您展示我用於手指跟蹤的技術,我在此項目中使用了該技術。如果想要查看手指識別和跟蹤的實際操作,請觀看我上傳的視頻。