jarondon82 commited on
Commit
9abbee1
·
1 Parent(s): 1b820c5

Corregir duplicación de IDs en botones y añadir keys únicas

Browse files
Files changed (1) hide show
  1. streamlit_app.py +93 -90
streamlit_app.py CHANGED
@@ -2307,23 +2307,101 @@ def main():
2307
  fps_metric.metric("FPS", 0)
2308
  time_metric.metric("Status", "Stopped")
2309
 
2310
- st.info("Click 'Start' to activate the camera and begin real-time face recognition.")
2311
- st.warning("Note: If you're running this in Hugging Face Spaces, some browser permissions may be required.")
2312
 
2313
- # Opción alternativa en caso de problemas con WebRTC
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2314
  st.markdown("---")
2315
- st.markdown("### ¿Problemas con WebRTC?")
 
2316
  col1, col2 = st.columns(2)
2317
- demo_mode = col1.button("Usar modo de demostración")
2318
- upload_mode = col2.button("Subir imagen para reconocimiento")
2319
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2320
  if demo_mode:
2321
  st.session_state.demo_running = True
2322
  st.session_state.upload_mode = False
 
2323
  elif upload_mode:
2324
  st.session_state.upload_mode = True
2325
  st.session_state.demo_running = False
2326
-
 
2327
  # Modo de demostración con imágenes simuladas
2328
  if st.session_state.get('demo_running', False):
2329
  # Cargar algunas imágenes de ejemplo (usar tus propias imágenes si es posible)
@@ -2357,10 +2435,10 @@ def main():
2357
  time_metric.metric("Status", "Demo")
2358
 
2359
  st.success("Modo de demostración activado. En un entorno local, el reconocimiento facial en tiempo real funcionaría correctamente.")
2360
-
2361
  # Modo de carga de imagen
2362
  if st.session_state.get('upload_mode', False):
2363
- uploaded_file = st.file_uploader("Sube una imagen con rostros", type=["jpg", "jpeg", "png"])
2364
 
2365
  if uploaded_file is not None:
2366
  # Leer imagen
@@ -2368,8 +2446,7 @@ def main():
2368
  image = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), cv2.IMREAD_COLOR)
2369
 
2370
  # Detectar rostros
2371
- detections = detect_face_dnn(face_net, image, confidence_threshold)
2372
- _, bboxes = process_face_detections(image, detections, confidence_threshold)
2373
 
2374
  # Dibujar rostros detectados
2375
  result_img = image.copy()
@@ -2385,84 +2462,10 @@ def main():
2385
  # Actualizar métricas
2386
  faces_metric.metric("Faces detected", len(bboxes))
2387
  time_metric.metric("Status", "Processed")
2388
-
2389
- # Add a note about privacy
2390
- st.markdown("---")
2391
- st.markdown("**Privacy Note**: Video is processed in your browser and on the server. No video data is stored permanently.")
2392
-
2393
- # Añadir opción de cámara alternativa para entornos donde WebRTC no funciona bien
2394
- st.markdown("---")
2395
- st.markdown("### Modo de cámara alternativo")
2396
-
2397
- col1, col2 = st.columns(2)
2398
- if col1.button("Usar cámara simple"):
2399
- st.session_state.simple_camera = True
2400
- st.session_state.demo_running = False
2401
- st.session_state.upload_mode = False
2402
-
2403
- if col2.button("Detener cámara simple"):
2404
- st.session_state.simple_camera = False
2405
-
2406
- if st.session_state.get('simple_camera', False):
2407
- # Contenedor para la cámara
2408
- camera_container = st.container()
2409
-
2410
- # Configurar métricas
2411
- faces_metric.metric("Faces detected", 0)
2412
- fps_metric.metric("FPS", "0.0")
2413
- time_metric.metric("Status", "Running")
2414
-
2415
- # Cámara simple que toma una imagen a la vez
2416
- with camera_container:
2417
- st.info("Cámara simple activada. Cada imagen se procesa individualmente.")
2418
-
2419
- # Usar imagen de la cámara
2420
- captured_image = st.camera_input("Tomar foto para reconocimiento", key="camera_simple")
2421
-
2422
- # Procesar la imagen si está disponible
2423
- if captured_image is not None:
2424
- # Leer imagen
2425
- image_bytes = captured_image.getvalue()
2426
- image = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), cv2.IMREAD_COLOR)
2427
-
2428
- # Detectar rostros
2429
- bboxes = detect_face_dnn(face_net, image, confidence_threshold)
2430
-
2431
- # Actualizar métricas
2432
- faces_metric.metric("Faces detected", len(bboxes))
2433
- fps_metric.metric("FPS", "N/A")
2434
-
2435
- # Dibujar resultados
2436
- result_img = image.copy()
2437
- for i, bbox in enumerate(bboxes):
2438
- x1, y1, x2, y2, _ = bbox
2439
- cv2.rectangle(result_img, (x1, y1), (x2, y2), (0, 255, 0), 2)
2440
- cv2.putText(result_img, f"Face {i+1}", (x1, y1-10),
2441
- cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
2442
-
2443
- # Mostrar resultado
2444
- st.image(result_img, channels="BGR", caption="Rostros detectados", use_column_width=True)
2445
-
2446
- if len(bboxes) > 0:
2447
- st.success(f"Se detectaron {len(bboxes)} rostros")
2448
- else:
2449
- st.warning("No se detectaron rostros. Intente con una iluminación mejor o una posición diferente.")
2450
-
2451
- # Opción alternativa en caso de problemas con WebRTC (mantenemos esta opción también)
2452
- st.markdown("---")
2453
- st.markdown("### Otras opciones")
2454
- col1, col2 = st.columns(2)
2455
- demo_mode = col1.button("Usar modo de demostración")
2456
- upload_mode = col2.button("Subir imagen para reconocimiento")
2457
-
2458
- if demo_mode:
2459
- st.session_state.demo_running = True
2460
- st.session_state.upload_mode = False
2461
- st.session_state.simple_camera = False
2462
- elif upload_mode:
2463
- st.session_state.upload_mode = True
2464
- st.session_state.demo_running = False
2465
- st.session_state.simple_camera = False
2466
 
2467
  # Si se ejecuta este archivo directamente, llamar a la función main
2468
  if __name__ == "__main__":
 
2307
  fps_metric.metric("FPS", 0)
2308
  time_metric.metric("Status", "Stopped")
2309
 
2310
+ st.info("Haga clic en el botón 'START' para activar la cámara y comenzar el reconocimiento en tiempo real.")
2311
+ st.warning("Nota: Si está ejecutando esto en Hugging Face Spaces, puede que WebRTC no funcione correctamente. Utilice las opciones alternativas a continuación.")
2312
 
2313
+ # WebRTC troubleshooting
2314
+ with st.expander("Ayuda: Problemas con WebRTC"):
2315
+ st.markdown("""
2316
+ ### Solución de problemas con WebRTC
2317
+
2318
+ Si el reconocimiento en tiempo real no funciona, puede deberse a las siguientes razones:
2319
+
2320
+ 1. **Restricciones de seguridad en Hugging Face Spaces**: Algunos navegadores restringen el acceso a la cámara en entornos como este.
2321
+ 2. **Problemas de conexión**: WebRTC requiere establecer una conexión que puede ser bloqueada por firewalls o proxies.
2322
+ 3. **Permisos de cámara**: Es posible que deba conceder permisos explícitos al navegador para acceder a su cámara.
2323
+
2324
+ ### Qué hacer:
2325
+
2326
+ 1. Intente usar otro navegador (Chrome suele funcionar mejor)
2327
+ 2. Asegúrese de que ha concedido permisos de cámara cuando el navegador los solicita
2328
+ 3. Si sigue sin funcionar, use las opciones alternativas que se muestran a continuación
2329
+ """)
2330
+
2331
+ # Añadir opción de cámara alternativa para entornos donde WebRTC no funciona bien
2332
  st.markdown("---")
2333
+ st.markdown("### Modo de cámara alternativo")
2334
+
2335
  col1, col2 = st.columns(2)
2336
+ if col1.button("Usar cámara simple", key="simple_camera_button1"):
2337
+ st.session_state.simple_camera = True
2338
+ st.session_state.demo_running = False
2339
+ st.session_state.upload_mode = False
2340
+
2341
+ if col2.button("Detener cámara simple", key="stop_camera_button1"):
2342
+ st.session_state.simple_camera = False
2343
+
2344
+ if st.session_state.get('simple_camera', False):
2345
+ # Contenedor para la cámara
2346
+ camera_container = st.container()
2347
+
2348
+ # Configurar métricas
2349
+ faces_metric.metric("Faces detected", 0)
2350
+ fps_metric.metric("FPS", "0.0")
2351
+ time_metric.metric("Status", "Running")
2352
+
2353
+ # Cámara simple que toma una imagen a la vez
2354
+ with camera_container:
2355
+ st.info("Cámara simple activada. Cada imagen se procesa individualmente.")
2356
+
2357
+ # Usar imagen de la cámara
2358
+ captured_image = st.camera_input("Tomar foto para reconocimiento", key="camera_simple_input")
2359
+
2360
+ # Procesar la imagen si está disponible
2361
+ if captured_image is not None:
2362
+ # Leer imagen
2363
+ image_bytes = captured_image.getvalue()
2364
+ image = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), cv2.IMREAD_COLOR)
2365
+
2366
+ # Detectar rostros
2367
+ bboxes = detect_face_dnn(face_net, image, confidence_threshold)
2368
+
2369
+ # Actualizar métricas
2370
+ faces_metric.metric("Faces detected", len(bboxes))
2371
+ fps_metric.metric("FPS", "N/A")
2372
+
2373
+ # Dibujar resultados
2374
+ result_img = image.copy()
2375
+ for i, bbox in enumerate(bboxes):
2376
+ x1, y1, x2, y2, _ = bbox
2377
+ cv2.rectangle(result_img, (x1, y1), (x2, y2), (0, 255, 0), 2)
2378
+ cv2.putText(result_img, f"Face {i+1}", (x1, y1-10),
2379
+ cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
2380
+
2381
+ # Mostrar resultado
2382
+ st.image(result_img, channels="BGR", caption="Rostros detectados", use_column_width=True)
2383
+
2384
+ if len(bboxes) > 0:
2385
+ st.success(f"Se detectaron {len(bboxes)} rostros")
2386
+ else:
2387
+ st.warning("No se detectaron rostros. Intente con una iluminación mejor o una posición diferente.")
2388
+
2389
+ # Opción alternativa en caso de problemas con WebRTC (mantenemos esta opción también)
2390
+ st.markdown("---")
2391
+ st.markdown("### Otras opciones")
2392
+ col1, col2 = st.columns(2)
2393
+ demo_mode = col1.button("Usar modo de demostración", key="demo_button1")
2394
+ upload_mode = col2.button("Subir imagen para reconocimiento", key="upload_button1")
2395
+
2396
  if demo_mode:
2397
  st.session_state.demo_running = True
2398
  st.session_state.upload_mode = False
2399
+ st.session_state.simple_camera = False
2400
  elif upload_mode:
2401
  st.session_state.upload_mode = True
2402
  st.session_state.demo_running = False
2403
+ st.session_state.simple_camera = False
2404
+
2405
  # Modo de demostración con imágenes simuladas
2406
  if st.session_state.get('demo_running', False):
2407
  # Cargar algunas imágenes de ejemplo (usar tus propias imágenes si es posible)
 
2435
  time_metric.metric("Status", "Demo")
2436
 
2437
  st.success("Modo de demostración activado. En un entorno local, el reconocimiento facial en tiempo real funcionaría correctamente.")
2438
+
2439
  # Modo de carga de imagen
2440
  if st.session_state.get('upload_mode', False):
2441
+ uploaded_file = st.file_uploader("Sube una imagen con rostros", type=["jpg", "jpeg", "png"], key="upload_image_input")
2442
 
2443
  if uploaded_file is not None:
2444
  # Leer imagen
 
2446
  image = cv2.imdecode(np.frombuffer(image_bytes, np.uint8), cv2.IMREAD_COLOR)
2447
 
2448
  # Detectar rostros
2449
+ bboxes = detect_face_dnn(face_net, image, confidence_threshold)
 
2450
 
2451
  # Dibujar rostros detectados
2452
  result_img = image.copy()
 
2462
  # Actualizar métricas
2463
  faces_metric.metric("Faces detected", len(bboxes))
2464
  time_metric.metric("Status", "Processed")
2465
+
2466
+ # Add a note about privacy
2467
+ st.markdown("---")
2468
+ st.markdown("**Privacy Note**: Video is processed in your browser and on the server. No video data is stored permanently.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2469
 
2470
  # Si se ejecuta este archivo directamente, llamar a la función main
2471
  if __name__ == "__main__":