Spaces:
Sleeping
Sleeping
import gradio as gr | |
from yolo_agent import video_detection_tool | |
import os | |
import time | |
def detect_objects(video): | |
"""Handles video upload and runs YOLO detection, displaying detections in real-time.""" | |
result = video_detection_tool.invoke(video, conf=0.8) # Explicitly setting confidence threshold | |
detected_images = "detections" # Folder where detected images are stored | |
image_paths = [] | |
if os.path.exists(detected_images): | |
for _ in range(20): # Limit the loop to avoid infinite execution | |
new_images = sorted( | |
[os.path.join(detected_images, img) for img in os.listdir(detected_images) if img.endswith(".jpg")], | |
key=os.path.getmtime # Sort images by modification time for real-time order | |
) | |
if new_images != image_paths: | |
image_paths = new_images | |
yield result, image_paths | |
time.sleep(1) # Update images in real-time | |
return result, [] | |
# Gradio Interface | |
demo = gr.Blocks() | |
with demo: | |
gr.Markdown("# π₯ YOLO Object Detection with LangChain - Real-time Display") | |
video_input = gr.File(label="π€ Upload a Video", type="filepath") | |
output_text = gr.Textbox(label="π Detection Results") | |
output_gallery = gr.Gallery(label="πΈ Detected Objects", show_label=True, interactive=False, columns=4) | |
detect_button = gr.Button("π Run Detection") | |
detect_button.click(fn=detect_objects, inputs=video_input, outputs=[output_text, output_gallery]) # Removed `live=True` | |
demo.launch(share=True) | |