Spaces:
Running
Running
Commit
·
85dbeb5
1
Parent(s):
a387962
Implementar guardado y visualización de imágenes de referencia en comparación de rostros y cambiar texto a inglés
Browse files- streamlit_app.py +23 -10
streamlit_app.py
CHANGED
|
@@ -1514,8 +1514,12 @@ def main():
|
|
| 1514 |
# Extraer embeddings del primer rostro
|
| 1515 |
if bboxes and len(bboxes) > 0 and len(bboxes[0]) == 5:
|
| 1516 |
embeddings_all_models = extract_face_embeddings_all_models(image, bboxes[0])
|
| 1517 |
-
|
| 1518 |
if embeddings_all_models:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1519 |
# Guardar en la base de datos
|
| 1520 |
if add_to_existing and person_name in st.session_state.face_database:
|
| 1521 |
# Añadir a persona existente
|
|
@@ -1538,12 +1542,15 @@ def main():
|
|
| 1538 |
# Añadir nuevo modelo
|
| 1539 |
st.session_state.face_database[person_name]['models'].append(model_name)
|
| 1540 |
st.session_state.face_database[person_name]['embeddings'].append(embedding['embedding'])
|
|
|
|
|
|
|
|
|
|
| 1541 |
|
| 1542 |
# Incrementar contador
|
| 1543 |
st.session_state.face_database[person_name]['count'] += 1
|
| 1544 |
else:
|
| 1545 |
# Crear nueva entrada en la base de datos
|
| 1546 |
-
st.sidebar.write(f"Creating new entry for {person_name}
|
| 1547 |
|
| 1548 |
models = []
|
| 1549 |
embeddings = []
|
|
@@ -1555,7 +1562,8 @@ def main():
|
|
| 1555 |
st.session_state.face_database[person_name] = {
|
| 1556 |
'embeddings': embeddings,
|
| 1557 |
'models': models,
|
| 1558 |
-
'count': 1
|
|
|
|
| 1559 |
}
|
| 1560 |
|
| 1561 |
st.success(f"Face registered successfully for {person_name}!")
|
|
@@ -1990,8 +1998,8 @@ def main():
|
|
| 1990 |
|
| 1991 |
# Mostrar comparación lado a lado de cada rostro con su coincidencia
|
| 1992 |
if 'matched_faces' in st.session_state and st.session_state.matched_faces:
|
| 1993 |
-
st.subheader("
|
| 1994 |
-
st.write("
|
| 1995 |
|
| 1996 |
for idx, match_info in enumerate(st.session_state.matched_faces):
|
| 1997 |
# Crear columnas para la comparación
|
|
@@ -2000,18 +2008,23 @@ def main():
|
|
| 2000 |
# Mostrar el rostro detectado
|
| 2001 |
with comp_col1:
|
| 2002 |
st.image(cv2.cvtColor(match_info["face_crop"], cv2.COLOR_BGR2RGB),
|
| 2003 |
-
caption=f"
|
| 2004 |
use_column_width=True)
|
| 2005 |
|
| 2006 |
# Mostrar imagen de referencia si existe
|
| 2007 |
with comp_col2:
|
| 2008 |
# Obtener la primera imagen de referencia de la carpeta de la base de datos si existe
|
| 2009 |
reference_name = match_info["matched_name"]
|
| 2010 |
-
st.write(f"
|
| 2011 |
|
| 2012 |
-
#
|
| 2013 |
-
|
| 2014 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2015 |
|
| 2016 |
# Limpiar el estado para la próxima ejecución
|
| 2017 |
del st.session_state.matched_faces
|
|
|
|
| 1514 |
# Extraer embeddings del primer rostro
|
| 1515 |
if bboxes and len(bboxes) > 0 and len(bboxes[0]) == 5:
|
| 1516 |
embeddings_all_models = extract_face_embeddings_all_models(image, bboxes[0])
|
| 1517 |
+
|
| 1518 |
if embeddings_all_models:
|
| 1519 |
+
# Guardar la imagen del rostro para referencia
|
| 1520 |
+
x1, y1, x2, y2, _ = bboxes[0]
|
| 1521 |
+
face_crop = image[y1:y2, x1:x2].copy()
|
| 1522 |
+
|
| 1523 |
# Guardar en la base de datos
|
| 1524 |
if add_to_existing and person_name in st.session_state.face_database:
|
| 1525 |
# Añadir a persona existente
|
|
|
|
| 1542 |
# Añadir nuevo modelo
|
| 1543 |
st.session_state.face_database[person_name]['models'].append(model_name)
|
| 1544 |
st.session_state.face_database[person_name]['embeddings'].append(embedding['embedding'])
|
| 1545 |
+
|
| 1546 |
+
# Actualizar imagen de referencia
|
| 1547 |
+
st.session_state.face_database[person_name]['face_image'] = face_crop
|
| 1548 |
|
| 1549 |
# Incrementar contador
|
| 1550 |
st.session_state.face_database[person_name]['count'] += 1
|
| 1551 |
else:
|
| 1552 |
# Crear nueva entrada en la base de datos
|
| 1553 |
+
st.sidebar.write(f"Creating new entry for {person_name}")
|
| 1554 |
|
| 1555 |
models = []
|
| 1556 |
embeddings = []
|
|
|
|
| 1562 |
st.session_state.face_database[person_name] = {
|
| 1563 |
'embeddings': embeddings,
|
| 1564 |
'models': models,
|
| 1565 |
+
'count': 1,
|
| 1566 |
+
'face_image': face_crop
|
| 1567 |
}
|
| 1568 |
|
| 1569 |
st.success(f"Face registered successfully for {person_name}!")
|
|
|
|
| 1998 |
|
| 1999 |
# Mostrar comparación lado a lado de cada rostro con su coincidencia
|
| 2000 |
if 'matched_faces' in st.session_state and st.session_state.matched_faces:
|
| 2001 |
+
st.subheader("Face Comparison")
|
| 2002 |
+
st.write("Below you can see each detected face alongside its match in the database:")
|
| 2003 |
|
| 2004 |
for idx, match_info in enumerate(st.session_state.matched_faces):
|
| 2005 |
# Crear columnas para la comparación
|
|
|
|
| 2008 |
# Mostrar el rostro detectado
|
| 2009 |
with comp_col1:
|
| 2010 |
st.image(cv2.cvtColor(match_info["face_crop"], cv2.COLOR_BGR2RGB),
|
| 2011 |
+
caption=f"Detected Face #{idx+1}",
|
| 2012 |
use_column_width=True)
|
| 2013 |
|
| 2014 |
# Mostrar imagen de referencia si existe
|
| 2015 |
with comp_col2:
|
| 2016 |
# Obtener la primera imagen de referencia de la carpeta de la base de datos si existe
|
| 2017 |
reference_name = match_info["matched_name"]
|
| 2018 |
+
st.write(f"Match: **{reference_name}** ({match_info['similarity']:.1f}%)")
|
| 2019 |
|
| 2020 |
+
# Intentar mostrar la imagen de referencia guardada
|
| 2021 |
+
if reference_name in st.session_state.face_database and 'face_image' in st.session_state.face_database[reference_name]:
|
| 2022 |
+
reference_image = st.session_state.face_database[reference_name]['face_image']
|
| 2023 |
+
st.image(cv2.cvtColor(reference_image, cv2.COLOR_BGR2RGB),
|
| 2024 |
+
caption=f"Reference image of {reference_name}",
|
| 2025 |
+
use_column_width=True)
|
| 2026 |
+
else:
|
| 2027 |
+
st.info(f"The reference image for {reference_name} is not available. Please re-register this person to see their image here.")
|
| 2028 |
|
| 2029 |
# Limpiar el estado para la próxima ejecución
|
| 2030 |
del st.session_state.matched_faces
|