人臉辨識技術在從安全系統到社群媒體的各種應用中變得越來越普遍。對於此任務最有效的模型之一是 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 <p>compare_faces 函數計算兩個嵌入之間的距離。如果該距離小於指定閾值(預設為 0.5),則函數將列印「Face Matched」。否則,它會列印“面孔不同。”</p> <h2> 第5步:測試人臉辨識系統 </h2> <p>最後,讓我們用兩張圖像來測試我們的人臉辨識系統,看看它是否正確地將它們識別為同一個人。 <br> </p> <pre class="brush:php;toolbar:false"># 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中文網其他相關文章!

本文討論了版本3.10中介紹的Python的新“匹配”語句,該語句與其他語言相同。它增強了代碼的可讀性,並為傳統的if-elif-el提供了性能優勢

Python中的功能註釋將元數據添加到函數中,以進行類型檢查,文檔和IDE支持。它們增強了代碼的可讀性,維護,並且在API開發,數據科學和圖書館創建中至關重要。

本文討論了Python中的單位測試,其好處以及如何有效編寫它們。它突出顯示了諸如UNITSEST和PYTEST之類的工具進行測試。

文章討論了Python的\ _ \ _ Init \ _ \ _()方法和Self在初始化對象屬性中的作用。還涵蓋了其他類方法和繼承對\ _ \ _ Init \ _ \ _()的影響。

本文討論了python中@classmethod,@staticmethod和實例方法之間的差異,詳細介紹了它們的屬性,用例和好處。它說明瞭如何根據所需功能選擇正確的方法類型和DA

Inpython,YouAppendElementStoAlistusingTheAppend()方法。 1)useappend()forsingleelements:my_list.append(4).2)useextend()orextend()或= formultiplelements:my_list.extend.extend(emote_list)ormy_list = [4,5,6] .3)useInsert()forspefificpositions:my_list.insert(1,5).beaware


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

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