FaceSegLite / app.py
Djulo's picture
bugfix max call
d24421d
raw
history blame contribute delete
No virus
2.41 kB
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.")