>  기사  >  백엔드 개발  >  Python에서 FaceNet을 사용하여 얼굴 인식 시스템을 구축하는 방법

Python에서 FaceNet을 사용하여 얼굴 인식 시스템을 구축하는 방법

王林
王林원래의
2024-09-04 18:32:11640검색

How to Build a Face Recognition System Using FaceNet in Python

얼굴 인식 기술은 보안 시스템부터 소셜 미디어까지 다양한 애플리케이션에서 점점 더 널리 보급되고 있습니다. 이 작업에 가장 효과적인 모델 중 하나는 얼굴 검증, 인식, 클러스터링을 위해 설계된 딥 러닝 모델인 FaceNet입니다.

이 튜토리얼에서는 FaceNet을 사용하여 Python으로 얼굴 인식 시스템을 구축하는 방법을 보여 드리겠습니다. 모델 로딩부터 얼굴 비교까지 모든 것을 다루겠습니다. 이 가이드를 마치면 자신의 프로젝트에서 얼굴 인식을 구현하기 위한 탄탄한 기반을 갖추게 될 것입니다.

페이스넷이란 무엇입니까?

FaceNet은 얼굴을 128차원 유클리드 공간에 매핑하는 Google이 개발한 딥 러닝 모델입니다. 이러한 임베딩은 얼굴의 필수 특징을 나타내므로 높은 정확도로 얼굴을 쉽게 비교하고 인식할 수 있습니다. 기존의 얼굴 인식 방법과 달리 FaceNet은 임베딩 학습에 중점을 두어 효율성과 확장성이 뛰어납니다.

전제 조건

코드를 살펴보기 전에 다음이 설치되어 있는지 확인하세요.

  • 파이썬 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.