Spaces:
Sleeping
Sleeping
import tempfile | |
import numpy as np | |
import gradio as gr | |
import tensorflow as tf | |
from moviepy.editor import VideoFileClip | |
from moviepy.video.io.ImageSequenceClip import ImageSequenceClip | |
from ultralytics import YOLO | |
from core.model import load_classifier | |
from core.inference import FrameProcessor | |
print("Tensorflow version " + tf.__version__) | |
print('Load classifier.') | |
classifier_path = 'weights/classifier-8-epoch10.keras' | |
classifier = load_classifier(classifier_path) | |
print('Load detector.') | |
detector_path = 'weights/yolov8n.pt' | |
detector = YOLO(detector_path) | |
def fn(video: gr.Video): | |
print('Process video.') | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as f: | |
output = f.name | |
clip = VideoFileClip(video) | |
process_frame = FrameProcessor(detector, classifier) | |
processed_frames = [] | |
for frame in clip.iter_frames(): | |
processed_frames.append(process_frame(frame)) | |
yield processed_frames[-1], None | |
processed_clip = ImageSequenceClip(processed_frames, clip.fps) | |
processed_clip.audio = clip.audio | |
clip.write_videofile(output, fps=clip.fps, audio_codec='aac', logger=None) | |
yield processed_frames[-1], output | |
inputs = gr.Video(sources=['upload'], label='Input Video') | |
outputs = [ | |
gr.Image(interactive=False, label='Last Frame Processed'), | |
gr.Video(interactive=False, label='Aeroplane Position and Action Marked')] | |
examples = [ | |
['examples/ZFLFDfovqls_001310_001320.mp4'], # cspell: disable-line | |
['examples/Zv7GyH-fpEY_2023.0_2033.0.mp4']] | |
iface = gr.Interface( | |
title='Aeroplane Position and Action Detection', | |
description='Detect aeroplane position and action in a video.', | |
theme='soft', | |
fn=fn, | |
inputs=inputs, | |
outputs=outputs, | |
examples=examples, | |
cache_examples=False) | |
iface.launch() | |