Spaces:
Runtime error
Runtime error
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.") | |