FaceSegLite / app.py
Djulo's picture
bugfix max call
d24421d
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.")