顔認識テクノロジーは、セキュリティ システムからソーシャル メディアに至るまで、さまざまなアプリケーションでますます普及してきています。このタスクに最も効果的なモデルの 1 つは、顔の検証、認識、クラスタリングのために設計された深層学習モデルである FaceNet です。
このチュートリアルでは、FaceNet を使用して Python で顔認識システムを構築する方法を説明します。モデルのロードから顔の比較まですべてをカバーします。このガイドを終えるまでに、独自のプロジェクトに顔認識を実装するための強固な基盤が得られるでしょう。
FaceNet は、Google が開発した深層学習モデルで、顔を 128 次元のユークリッド空間にマッピングします。これらの埋め込みは顔の重要な特徴を表すため、顔を比較し、高精度で認識することが容易になります。従来の顔認識方法とは異なり、FaceNet は埋め込み学習に焦点を当てているため、非常に効果的で拡張性が高くなります。
コードに入る前に、以下がインストールされていることを確認してください:
pip を使用してこれらの依存関係をインストールできます:
pip install tensorflow numpy opencv-python scikit-learn
まず、事前トレーニングされた 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")
モデルのロードは、顔認識システムをセットアップする最初のステップです。このモデルは、顔の数値表現である画像の埋め込みを生成するために使用されます。
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 に必要な画像の前処理を処理します。画像を適切な形式とサイズに変換し、モデルが効果的に作業できる入力を確実に受け取るようにします。
次に、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 関数は、モデルと画像パスを受け取り、画像を処理して、埋め込みを返します。この埋め込みは、顔の比較に使用するものです。
2 つの顔が一致するかどうかを判断するには、それらの間のユークリッド距離を計算して、それらの埋め込みを比較します。距離が特定のしきい値を下回る場合、顔は一致するとみなされます。
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 関数は、2 つの埋め込み間の距離を計算します。この距離が指定されたしきい値 (デフォルトでは 0.5) より小さい場合、関数は「顔が一致しました」と出力します。それ以外の場合は、「顔が異なります。」と表示されます。
最後に、2 つの画像を使用して顔認識システムをテストして、それらが同じ人物として正しく識別されるかどうかを確認してみましょう。
# 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}")
さらに、2 つの埋め込み間のユークリッド距離が出力されます。
Python で FaceNet を使用して、シンプルかつ強力な顔認識システムを構築しました。このシステムは、より多くの顔を含めたり、リアルタイム認識を処理したり、より大規模なプロジェクトに統合したりするために簡単に拡張できます。 FaceNet は精度と効率が高いため、顔認識タスクに最適です。
自由にしきい値を試してみたり、ウェブカメラ ベースの顔認識ツールなどのリアルタイム アプリケーションでこのシステムを使用してみたりしてください。
ご質問がある場合、またはさらにサポートが必要な場合は、以下にコメントを残してください。コーディングを楽しんでください!
以上がPython で FaceNet を使用して顔認識システムを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。