Spaces:
Build error
Build error
| import os | |
| import numpy as np | |
| import gradio as gr | |
| import supervision as sv | |
| from ultralytics import YOLO | |
| # Define paths | |
| HOME = os.getcwd() | |
| MODEL_PATH = "./best.pt" | |
| # Load the YOLO model | |
| model = YOLO(MODEL_PATH) | |
| # Initialize annotators | |
| box_annotator = sv.BoxAnnotator() | |
| label_annotator = sv.LabelAnnotator() | |
| # Define the confidence threshold | |
| CONFIDENCE_THRESHOLD = 0.6 | |
| # Define the callback function for processing each video frame | |
| def callback(frame: np.ndarray, _: int) -> np.ndarray: | |
| # Perform detection on the frame | |
| results = model(frame)[0] | |
| detections = sv.Detections.from_ultralytics(results) | |
| # Filter detections based on confidence threshold | |
| detections_filtered = detections[detections.confidence > | |
| CONFIDENCE_THRESHOLD] | |
| # Create labels for filtered detections | |
| labels = [ | |
| f"{model.model.names[class_id]} {confidence:.2f}" | |
| for class_id, confidence in zip( | |
| detections_filtered.class_id, detections_filtered.confidence | |
| ) | |
| ] | |
| # Annotate the frame with bounding boxes and labels | |
| annotated_frame = box_annotator.annotate( | |
| scene=frame.copy(), | |
| detections=detections_filtered, | |
| ) | |
| annotated_frame = label_annotator.annotate( | |
| scene=annotated_frame, | |
| detections=detections_filtered, | |
| labels=labels | |
| ) | |
| return annotated_frame | |
| # Function to process the video and generate the output | |
| def process_video_gradio(input_video): | |
| SOURCE_VIDEO_PATH = input_video | |
| TARGET_VIDEO_PATH = f"{HOME}/output_fall_detection.mp4" | |
| sv.process_video( | |
| source_path=SOURCE_VIDEO_PATH, | |
| target_path=TARGET_VIDEO_PATH, | |
| callback=callback | |
| ) | |
| return TARGET_VIDEO_PATH | |
| # Define the Gradio interface | |
| interface = gr.Interface( | |
| fn=process_video_gradio, # Function to process video | |
| inputs=gr.Video(), # Upload video input | |
| outputs=gr.Video(), # Return the annotated video output | |
| title="Fall Detection Video Annotator", | |
| description="Upload a video, and the model will annotate it with fall detection using Fine-Tuned YOLO model." | |
| ) | |
| # Launch the interface | |
| if __name__ == "__main__": | |
| interface.launch() | |