Spaces:
Running
on
Zero
Running
on
Zero
File size: 2,363 Bytes
bf687e5 7823cea bf687e5 7823cea 13cd42f bf687e5 13cd42f 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 71 |
import os
import numpy as np
from PIL import Image
import gradio as gr
from deepface import DeepFace
from datasets import load_dataset
# Cargamos el dataset sin aplicar formato especial
dataset = load_dataset("Segizu/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()
|