Spaces:
Sleeping
Sleeping
import gradio as gr | |
import cv2 | |
import tempfile | |
import os | |
def process_video(video_path): | |
# Open the video file | |
cap = cv2.VideoCapture(video_path) | |
if not cap.isOpened(): | |
return None | |
# Create a temporary file to save the processed video | |
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") | |
output_path = temp_file.name | |
# Get video properties | |
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) | |
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) | |
fps = int(cap.get(cv2.CAP_PROP_FPS)) | |
# Define the codec and create a VideoWriter object | |
fourcc = cv2.VideoWriter_fourcc(*'mp4v') | |
out = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height), isColor=False) | |
# Process each frame | |
while cap.isOpened(): | |
ret, frame = cap.read() | |
if not ret: | |
break | |
# Convert the frame to grayscale (example processing) | |
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |
# Write the processed frame to the output video | |
out.write(gray_frame) | |
# Release everything | |
cap.release() | |
out.release() | |
return output_path | |
def preview_video(video): | |
# Save the uploaded video to a temporary file | |
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") | |
temp_path = temp_file.name | |
with open(temp_path, "wb") as f: | |
f.write(video) | |
# Process the video using OpenCV | |
processed_video_path = process_video(temp_path) | |
# Clean up the temporary file | |
os.unlink(temp_path) | |
return processed_video_path | |
# Define the Gradio interface | |
iface = gr.Interface( | |
fn=preview_video, # Function to call | |
inputs=gr.Video(label="Upload Video"), # Input component: Video upload | |
outputs=gr.Video(label="Preview Video"), # Output component: Video preview | |
title="Video Preview with OpenCV", | |
description="Upload a video, and it will be processed (e.g., grayscale) and displayed." | |
) | |
# Launch the interface | |
iface.launch() |