Spaces:
Sleeping
Sleeping
import streamlit as st | |
import zipfile | |
import os | |
import shutil | |
from moviepy.editor import VideoFileClip | |
from live import * # Ensure that `analyze_live_video` is properly imported | |
# Define paths | |
zip_file_path = 'output.zip' | |
output_folder = 'output' | |
# Function to process video and save output | |
def process_video(input_file_path, output_folder): | |
# Ensure the output folder exists | |
os.makedirs(output_folder, exist_ok=True) | |
# Load the video file | |
video = VideoFileClip(input_file_path) | |
# Example processing: Save each frame as an image (customize as needed) | |
for i, frame in enumerate(video.iter_frames()): | |
frame_path = os.path.join(output_folder, f'frame_{i:04d}.png') | |
# Save the frame as an image (you might need to use a library for this, e.g., PIL) | |
# Example: imageio.imwrite(frame_path, frame) | |
# You can add more processing steps here | |
# Streamlit app | |
st.title("Video Processing App") | |
# Upload video file | |
uploaded_file = st.file_uploader("Upload a video file", type=["mp4", "avi", "mov"]) | |
if uploaded_file is not None: | |
# Save the uploaded file to a temporary location | |
temp_file_path = 'temp_video_file.mp4' | |
with open(temp_file_path, 'wb') as f: | |
f.write(uploaded_file.read()) | |
# Create a "Predict" button | |
if st.button("Predict"): | |
# Process the video and save output | |
analyze_live_video(temp_file_path, 1, 1, 1, True, print) | |
# Compress the output folder into a ZIP file | |
def compress_folder(folder_path, zip_file_path): | |
with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zipf: | |
for root, dirs, files in os.walk(folder_path): | |
for file in files: | |
file_path = os.path.join(root, file) | |
zipf.write(file_path, os.path.relpath(file_path, folder_path)) | |
compress_folder(output_folder, zip_file_path) | |
# Read the ZIP file to be downloaded | |
with open(zip_file_path, 'rb') as file: | |
zip_data = file.read() | |
# Create a download button for the ZIP file | |
st.download_button( | |
label="Download Processed Video Files as ZIP", | |
data=zip_data, | |
file_name="output.zip", | |
mime="application/zip" | |
) | |
# Clean up temporary files | |
os.remove(temp_file_path) | |
shutil.rmtree(output_folder) | |
os.remove(zip_file_path) |