Segizu commited on
Commit
03da632
·
1 Parent(s): d01fac2

Excluyendo imágenes grandes

Browse files
Files changed (3) hide show
  1. .gitignore +3 -0
  2. app.py +71 -0
  3. requirements.txt +4 -0
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ dataset_faces/
2
+ *.jpg
3
+ *.png
app.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import face_recognition
3
+ import cv2
4
+ import numpy as np
5
+ import os
6
+ from PIL import Image
7
+
8
+ # 📂 Ruta donde están las imágenes
9
+ IMAGE_DIRECTORY = "dataset_faces/"
10
+
11
+ # 📌 Función para cargar imágenes y extraer embeddings
12
+ def load_images_and_encodings(directory):
13
+ known_encodings = []
14
+ known_images = []
15
+ known_names = []
16
+
17
+ for filename in os.listdir(directory):
18
+ if filename.endswith((".jpg", ".png", ".jpeg")):
19
+ path = os.path.join(directory, filename)
20
+ image = face_recognition.load_image_file(path)
21
+ encodings = face_recognition.face_encodings(image)
22
+
23
+ if encodings: # Si encontró una cara
24
+ known_encodings.append(encodings[0])
25
+ known_images.append(path)
26
+ known_names.append(filename)
27
+
28
+ return known_encodings, known_images, known_names
29
+
30
+ # 📌 Cargar imágenes y sus embeddings al inicio
31
+ known_encodings, known_images, known_names = load_images_and_encodings(IMAGE_DIRECTORY)
32
+
33
+ # 📌 Función para encontrar imágenes similares
34
+ def find_similar_faces(uploaded_image):
35
+ # Convertir a array de NumPy
36
+ image_np = np.array(uploaded_image)
37
+ face_encodings = face_recognition.face_encodings(image_np)
38
+
39
+ if not face_encodings:
40
+ return [], [] # Si no encuentra caras en la imagen subida
41
+
42
+ query_encoding = face_encodings[0]
43
+ distances = face_recognition.face_distance(known_encodings, query_encoding)
44
+
45
+ # Ordenar las imágenes por similitud
46
+ sorted_indices = np.argsort(distances)
47
+
48
+ return [known_images[i] for i in sorted_indices], [distances[i] for i in sorted_indices]
49
+
50
+ # 📌 Interfaz en Streamlit
51
+ st.title("🔍 Buscador de Rostros en un Directorio")
52
+ st.write("Sube una imagen y te mostraremos las fotos más similares en el directorio.")
53
+
54
+ uploaded_file = st.file_uploader("📤 Sube una imagen", type=["jpg", "png", "jpeg"])
55
+
56
+ if uploaded_file:
57
+ # Mostrar imagen subida
58
+ uploaded_image = Image.open(uploaded_file)
59
+ st.image(uploaded_image, caption="Imagen subida", use_column_width=True)
60
+
61
+ # Buscar rostros similares
62
+ similar_images, distances = find_similar_faces(uploaded_image)
63
+
64
+ # Mostrar resultados
65
+ if similar_images:
66
+ st.subheader("📸 Imágenes más similares:")
67
+ for idx, image_path in enumerate(similar_images[:5]): # Mostrar las 5 más similares
68
+ st.image(image_path, caption=f"Similitud: {1 - distances[idx]:.2f}", use_column_width=True)
69
+ else:
70
+ st.warning("⚠ No se detectó ningún rostro en la imagen subida.")
71
+
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ streamlit
2
+ face_recognition
3
+ opencv-python
4
+ numpy