| import os | |
| import gradio as gr | |
| from inference import ObjectTrackerInference | |
| tracker = ObjectTrackerInference(model_dir='models') | |
| def track_object(video, x, y, width, height): | |
| try: | |
| if video is None: | |
| return None | |
| initial_bbox = [int(x), int(y), int(width), int(height)] | |
| output_path = 'tracked_output.mp4' | |
| result = tracker.track_video(video, initial_bbox, output_path, fps=30) | |
| return result | |
| except Exception as e: | |
| print(f"Error: {str(e)}") | |
| return None | |
| with gr.Blocks(title="UAV Object Tracker") as demo: | |
| gr.Markdown("# 🎯 UAV Single Object Tracker") | |
| gr.Markdown("Upload a video and specify the initial bounding box to track an object.") | |
| with gr.Row(): | |
| with gr.Column(): | |
| video_input = gr.Video(label="Upload Video") | |
| gr.Markdown("### Initial Bounding Box Coordinates") | |
| with gr.Row(): | |
| x_input = gr.Number(label="X (top-left)", value=100) | |
| y_input = gr.Number(label="Y (top-left)", value=100) | |
| with gr.Row(): | |
| w_input = gr.Number(label="Width", value=50) | |
| h_input = gr.Number(label="Height", value=50) | |
| track_btn = gr.Button("Track Object", variant="primary") | |
| with gr.Column(): | |
| video_output = gr.Video(label="Tracked Output") | |
| gr.Markdown("### 📖 Instructions") | |
| gr.Markdown(""" | |
| 1. Upload your video file | |
| 2. Enter the initial bounding box coordinates (x, y, width, height) for the first frame | |
| 3. Click 'Track Object' to process | |
| 4. Download the tracked video from the output | |
| """) | |
| track_btn.click( | |
| fn=track_object, | |
| inputs=[video_input, x_input, y_input, w_input, h_input], | |
| outputs=video_output | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |