ホームページ  >  記事  >  バックエンド開発  >  Python で FaceNet を使用して顔認識システムを構築する方法

Python で FaceNet を使用して顔認識システムを構築する方法

王林
王林オリジナル
2024-09-04 18:32:11643ブラウズ

How to Build a Face Recognition System Using FaceNet in Python

顔認識テクノロジーは、セキュリティ システムからソーシャル メディアに至るまで、さまざまなアプリケーションでますます普及してきています。このタスクに最も効果的なモデルの 1 つは、顔の検証、認識、クラスタリングのために設計された深層学習モデルである FaceNet です。

このチュートリアルでは、FaceNet を使用して Python で顔認識システムを構築する方法を説明します。モデルのロードから顔の比較まですべてをカバーします。このガイドを終えるまでに、独自のプロジェクトに顔認識を実装するための強固な基盤が得られるでしょう。

フェイスネットとは何ですか?

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: 埋め込みを使用して顔を比較する

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) より小さい場合、関数は「顔が一致しました」と出力します。それ以外の場合は、「顔が異なります。」と表示されます。

ステップ 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。