| 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() |
|
|