added notes on DEEPFACE
This commit is contained in:
74
DEEPFACE
Normal file
74
DEEPFACE
Normal file
@@ -0,0 +1,74 @@
|
||||
#
|
||||
# https://pypi.org/project/deepface/
|
||||
#
|
||||
|
||||
from deepface import DeepFace
|
||||
import os
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
# Function to compute embeddings for a given image path
|
||||
def compute_embeddings(image_path, model_name='VGG-Face'):
|
||||
try:
|
||||
# This returns a list of embeddings for each face found in the image
|
||||
embeddings = DeepFace.represent(img_path=image_path, model_name=model_name)
|
||||
return [res['embedding'] for res in embeddings]
|
||||
except Exception as e:
|
||||
print(f"Error processing image {image_path}: {e}")
|
||||
return []
|
||||
|
||||
# Function to find the best matches between reference and target images
|
||||
def find_best_matches(reference_images, target_images, model_name='VGG-Face', metric='cosine'):
|
||||
# Store embeddings for reference images
|
||||
reference_embeddings = {}
|
||||
|
||||
for ref_img in reference_images:
|
||||
ref_embeddings = compute_embeddings(ref_img, model_name=model_name)
|
||||
if ref_embeddings:
|
||||
reference_embeddings[ref_img] = ref_embeddings
|
||||
|
||||
# Store best matches
|
||||
best_matches = []
|
||||
|
||||
# Loop through each target image
|
||||
for target_img in target_images:
|
||||
target_embeddings = compute_embeddings(target_img, model_name=model_name)
|
||||
|
||||
for target_emb in target_embeddings:
|
||||
for ref_img, ref_emb_list in reference_embeddings.items():
|
||||
# Compare each reference embedding with the target embedding
|
||||
for ref_emb in ref_emb_list:
|
||||
# Compute the distance between embeddings using DeepFace's distance functions
|
||||
distance = DeepFace.find_distance(ref_emb, target_emb, distance_metric=metric)
|
||||
|
||||
# Store match details (target image, reference image, and distance)
|
||||
best_matches.append({
|
||||
'target_image': target_img,
|
||||
'reference_image': ref_img,
|
||||
'distance': distance
|
||||
})
|
||||
|
||||
# Sort matches by the distance (smallest distances indicate best matches)
|
||||
best_matches = sorted(best_matches, key=lambda x: x['distance'])
|
||||
|
||||
return best_matches
|
||||
|
||||
# Example usage
|
||||
reference_images = [
|
||||
"path_to_reference_image1.jpg",
|
||||
"path_to_reference_image2.jpg"
|
||||
]
|
||||
|
||||
target_images = [
|
||||
"path_to_target_image1.jpg",
|
||||
"path_to_target_image2.jpg",
|
||||
# Add more target images here...
|
||||
]
|
||||
|
||||
# Find the best matches
|
||||
matches = find_best_matches(reference_images, target_images, model_name='VGG-Face', metric='cosine')
|
||||
|
||||
# Display the best match
|
||||
for match in matches[:5]: # Display top 5 matches
|
||||
print(f"Reference Image: {match['reference_image']}, Target Image: {match['target_image']}, Distance: {match['distance']}")
|
||||
|
||||
Reference in New Issue
Block a user