import streamlit as st import cv2 import requests import numpy as np import tempfile import os import time st.title("Video File Tracking") def log(message): st.info(message) def process_frame(img): if backend_url == "": return img _, img_encoded = cv2.imencode('.jpg', img) files = {'file': ('image.jpg', img_encoded.tobytes(), 'image/jpeg', {'Expires': '0'})} response = requests.post(backend_url, files=files) if response.status_code == 200: img_color = np.frombuffer(response.content, dtype=np.uint8) img_color = cv2.imdecode(img_color, cv2.IMREAD_COLOR) return img_color else: return img modele = st.radio( "Sélection du modèle", ["***Aucun modèle***", "***Bounding boxes et masks (Mask R-CNN)***", "***Small Unet only***", "***Small Unet pretained***", "***Small Unet and YOLO***"] ) if modele == '***Aucun modèle***': backend_url = "" #elif modele == '***Small Unet only***': # backend_url = "http://127.0.0.1:5000/upload_small_unet_only" #elif modele == '***Small Unet pretained***': # backend_url = "http://127.0.0.1:5000/upload_small_unet_pretained" #elif modele == '***Small Unet and YOLO***': # backend_url = "http://127.0.0.1:5000/upload_small_unet_and_yolo" uploaded_video = st.file_uploader("Upload a video file", type=["mp4", "avi", "mov"]) # Path to the default video default_video_path = "videos/woman_talking.mp4" if uploaded_video is not None: tfile = tempfile.NamedTemporaryFile(delete=False) tfile.write(uploaded_video.read()) video_path = tfile.name else: video_path = default_video_path if os.path.exists(video_path): cap = cv2.VideoCapture(video_path) stframe = st.empty() # Get the video's frame rate fps = cap.get(cv2.CAP_PROP_FPS) if fps > 0: delay = 1 / fps else: delay = 0.03 # default delay in case FPS is not available while cap.isOpened(): start_time = time.time() ret, frame = cap.read() if not ret: break processed_frame = process_frame(frame) stframe.image(processed_frame, channels="BGR") # Ensure each frame respects the video's frame rate time_elapsed = time.time() - start_time if time_elapsed < delay: time.sleep(delay - time_elapsed) cap.release() else: st.error("No video file found.")