Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from streamlit.runtime.scriptrunner.script_run_context import add_script_run_ctx | |
| import threading | |
| import cv2 | |
| from ultralytics import YOLO | |
| model = YOLO('best.pt') | |
| model.fuse() | |
| # Configurar cámaras | |
| camaras = { | |
| 'camara1': 'IMG_0559.mov', #0, | |
| 'camara2': 'IMG_0559.mov', #0, | |
| } | |
| def tracking(source, iou, conf): | |
| result = model.track(source=source, iou=iou, conf=conf, | |
| persist=True, | |
| device='mps', | |
| tracker='botsort.yaml', | |
| verbose=False) | |
| return result | |
| def inferir_camara(index, source, iou, conf, st_frame, st_cantidad, stop_button_pressed): | |
| camera1 = cv2.VideoCapture(source) # Open camera 0 | |
| while camera1.isOpened() and not stop_button_pressed: | |
| ret, frame = camera1.read() | |
| if not ret: | |
| st.write(f"Video {str(index)} Capture Ended") | |
| break | |
| frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
| resultado = tracking(frame, iou, conf) | |
| # Extract bounding boxes (replace this with the specific method from your library) | |
| objects_detected = resultado[0].boxes.cls # Boxes object for bbox outputs | |
| object_count = len(objects_detected) | |
| st_cantidad.write(f'Cantidad detectados en cámara {str(index)}: {object_count}') | |
| res_plotted = resultado[0].plot() | |
| st_frame.image(res_plotted, | |
| #caption='Detected Video', | |
| channels="RGB", | |
| use_column_width=True | |
| ) | |
| #if cv2.waitKey(1) & 0xFF == ord("q") or stop_button_pressed: | |
| if stop_button_pressed: | |
| break | |
| # Release cameras | |
| #camera1.release() | |
| #cv2.destroyAllWindows() | |
| # Interfaz | |
| st.set_page_config(page_title="Tracking YOLOv8") | |
| st.title("Tracking YOLOv8") | |
| iou = float(st.sidebar.slider("NMS IoU threshold", 30, 100, 80)) / 100 # Umbral de intersección sobre unión (IoU) para NMS | |
| conf = float(st.sidebar.slider("Umbral o threshold", 30, 100, 80)) / 100 # Select Model Confidence | |
| col1, col2 = st.columns(2) | |
| play_button_pressed = st.empty() | |
| with col1: | |
| stop_button_pressed_1 = st.button("Detener cámara 1") | |
| play_button_1 = st.empty() | |
| st_frame_camara_1 = st.empty() | |
| st_cantidad_1 = st.empty() | |
| tracker_thread1 = threading.Thread(target=inferir_camara, | |
| args=("1", camaras.get('camara1', 0), | |
| iou, conf, | |
| st_frame_camara_1, st_cantidad_1, | |
| stop_button_pressed_1), | |
| daemon=True) | |
| add_script_run_ctx(tracker_thread1) | |
| play_button_1 = st.button("Iniciar cámara 1", on_click=tracker_thread1.start()) | |
| with col2: | |
| stop_button_pressed_2 = st.button("Detener cámara 2") | |
| st_frame_camara_2 = st.empty() | |
| st_cantidad_2 = st.empty() | |
| tracker_thread2 = threading.Thread(target=inferir_camara, | |
| args=("2", camaras.get('camara2', 0), | |
| iou, conf, | |
| st_frame_camara_2, st_cantidad_2, | |
| stop_button_pressed_2), | |
| daemon=True) | |
| add_script_run_ctx(tracker_thread2) | |
| play_button_2 = st.button("Iniciar cámara 2", on_click=tracker_thread2.start()) | |
| # Wait for the tracker threads to finish | |
| tracker_thread1.join() | |
| tracker_thread2.join() | |