Spaces:
Runtime error
Runtime error
File size: 2,299 Bytes
bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 7823cea bf687e5 f134081 7823cea bf687e5 7823cea bf687e5 8fed1b4 f134081 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
import os
import numpy as np
from PIL import Image
import gradio as gr
from deepface import DeepFace
# Ruta de la carpeta con rostros
IMAGE_DIRECTORY = "dataset_faces/"
# Cargar embeddings de todas las imágenes del dataset
def build_database():
database = []
for filename in os.listdir(IMAGE_DIRECTORY):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
path = os.path.join(IMAGE_DIRECTORY, filename)
try:
representation = DeepFace.represent(img_path=path, model_name="Facenet")[0]["embedding"]
database.append((filename, path, representation))
except:
print(f"❌ No se pudo procesar: {filename}")
return database
# Inicializamos base de datos
database = build_database()
# Comparar imagen cargada con las del dataset
def find_similar_faces(uploaded_image):
try:
uploaded_image = np.array(uploaded_image)
query_representation = DeepFace.represent(img_path=uploaded_image, model_name="Facenet")[0]["embedding"]
except:
return [], "⚠ No se detectó un rostro válido en la imagen."
similarities = []
for name, path, rep in database:
distance = np.linalg.norm(np.array(query_representation) - np.array(rep))
similarity = 1 / (1 + distance) # Normalizamos para que 1 = muy similar
similarities.append((similarity, name, path))
# Ordenar por similitud
similarities.sort(reverse=True)
top_matches = similarities[:5]
# Formatear salida para gradio
gallery_items = []
text_summary = ""
for sim, name, path in top_matches:
img = Image.open(path)
caption = f"{name} - Similitud: {sim:.2f}"
gallery_items.append({"image": img, "caption": caption})
text_summary += caption + "\n"
return gallery_items, text_summary
# Interfaz Gradio
demo = gr.Interface(
fn=find_similar_faces,
inputs=gr.Image(label="📤 Sube una imagen", type="pil"),
outputs=[
gr.Gallery(label="📸 Rostros más similares"),
gr.Textbox(label="🧠 Similitud", lines=6)
],
title="🔍 Buscador de Rostros con DeepFace",
description="Sube una imagen y te mostrará los rostros más similares desde el directorio `dataset_faces/`."
)
demo.launch()
|