如何在 Python 中使用 FaceNet 建構人臉辨識系統
人臉辨識技術在從安全系統到社群媒體的各種應用中變得越來越普遍。對於此任務最有效的模型之一是 FaceNet,這是一種專為人臉驗證、識別和聚類而設計的深度學習模型。
在本教學中,我將向您展示如何使用 FaceNet 在 Python 中建立人臉辨識系統。我們將涵蓋從加載模型到比較面部的所有內容。閱讀本指南後,您將為在自己的專案中實現人臉辨識奠定堅實的基礎。
什麼是FaceNet?
FaceNet 是 Google 開發的深度學習模型,可將人臉映射到 128 維歐幾里德空間。這些嵌入代表了臉部的基本特徵,可以輕鬆地以高精度比較和識別臉部。與傳統的人臉辨識方法不同,FaceNet 專注於嵌入學習,這使得它非常有效且可擴展。
先決條件
在深入研究程式碼之前,請確保您已安裝以下軟體:
- Python 3.x
- TensorFlow 或 Keras(用於深度學習模型)
- NumPy(用於數值運算)
- OpenCV(用於影像處理)
- Scikit-learn(用於應用最近鄰搜尋)
您可以使用 pip 安裝這些依賴項:
pip install tensorflow numpy opencv-python scikit-learn
第 1 步:載入預先訓練的 FaceNet 模型
首先,我們將載入預先訓練的 FaceNet 模型。您可以從可信任來源下載模型,也可以使用 keras-facenet 函式庫提供的模型。
from keras.models import load_model # Load the pre-trained FaceNet model model = load_model('facenet_keras.h5') print("Model Loaded Successfully")
載入模型是設定我們的人臉辨識系統的第一步。該模型將用於生成圖像的嵌入,這是面部的數位表示。
第 2 步:為 FaceNet 預處理影像
FaceNet 期望輸入影像為 RGB 格式的 160x160 像素。此外,像素值在輸入模型之前需要進行標準化。
import cv2 import numpy as np def preprocess_image(image_path): # Load the image using OpenCV img = cv2.imread(image_path) # Convert the image to RGB (FaceNet expects RGB images) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Resize the image to 160x160 pixels img = cv2.resize(img, (160, 160)) # Normalize the pixel values img = img.astype('float32') / 255.0 # Expand dimensions to match the input shape of FaceNet (1, 160, 160, 3) img = np.expand_dims(img, axis=0) return img
此函數處理 FaceNet 所需的影像預處理。它將影像轉換為適當的格式和大小,確保模型接收到可以有效使用的輸入。
第 3 步:產生人臉嵌入
接下來,我們將使用 FaceNet 模型從預處理影像產生嵌入。這些嵌入將作為臉部的獨特數字表示。
def get_face_embedding(model, image_path): # Preprocess the image img = preprocess_image(image_path) # Generate the embedding embedding = model.predict(img) return embedding
get_face_embedding 函數接收模型和影像路徑,處理影像並傳回嵌入。我們將使用此嵌入來進行面部比較。
第 4 步:使用嵌入比較人臉
為了確定兩個面孔是否匹配,我們透過計算它們之間的歐幾里德距離來比較它們的嵌入。如果距離低於某個閾值,則認為臉孔匹配。
from numpy import linalg as LA def compare_faces(embedding1, embedding2, threshold=0.5): # Compute the Euclidean distance between the embeddings distance = LA.norm(embedding1 - embedding2) # Compare the distance to the threshold if distance < threshold: print("Face Matched.") else: print("Faces are different.") return distance
compare_faces 函數計算兩個嵌入之間的距離。如果該距離小於指定閾值(預設為 0.5),則函數將列印「Face Matched」。否則,它會列印“面孔不同。”
第5步:測試人臉辨識系統
最後,讓我們用兩張圖像來測試我們的人臉辨識系統,看看它是否正確地將它們識別為同一個人。
# Load the FaceNet model model = load_model('facenet_keras.h5') # Get embeddings for two images embedding1 = get_face_embedding(model, 'face1.jpg') embedding2 = get_face_embedding(model, 'face2.jpg') # Compare the two faces distance = compare_faces(embedding1, embedding2) print(f"Euclidean Distance: {distance}")
輸出
- 如果面孔匹配,您將看到:面孔匹配。
- 如果它們不匹配,您會看到:面孔不同。
此外,還將印製兩個嵌入之間的歐幾里德距離。
結論
您剛剛使用 Python 中的 FaceNet 建立了一個簡單但功能強大的人臉辨識系統。該系統可以輕鬆擴展以包含更多面孔、處理即時識別或整合到更大的專案中。 FaceNet 的高精度和高效率使其成為人臉辨識任務的絕佳選擇。
隨意嘗試閾值,或嘗試在即時應用程式中使用該系統,例如基於網路攝影機的人臉辨識工具。
如果您有任何疑問或需要進一步協助,請在下面發表評論。快樂編碼!
以上是如何在 Python 中使用 FaceNet 建構人臉辨識系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

攻克Investing.com的反爬蟲策略許多人嘗試爬取Investing.com(https://cn.investing.com/news/latest-news)的新聞數據時,常常�...
