Spaces:
Running
Running
| from pathlib import Path | |
| import cv2 | |
| import numpy as np | |
| from ultralytics import YOLO | |
| import tempfile | |
| # Load your trained YOLOv5 model | |
| model = YOLO("best.pt") # ensure best.pt is in the app folder | |
| def detect_image(image: np.ndarray) -> np.ndarray: | |
| """ | |
| Detect objects in an uploaded image (NumPy array) and return the plotted result. | |
| """ | |
| # Run YOLOv5 inference | |
| results = model(image) | |
| # results[0].plot() returns a NumPy array with detections drawn | |
| return results[0].plot() | |
| def detect_video(video_file: str) -> str: | |
| """ | |
| Detect objects in a video and return the path to the processed video. | |
| """ | |
| # Create a temporary output file | |
| tmp_output = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False).name | |
| cap = cv2.VideoCapture(video_file) | |
| if not cap.isOpened(): | |
| raise ValueError("Cannot open uploaded video.") | |
| # Get video properties | |
| width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) | |
| height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) | |
| fps = cap.get(cv2.CAP_PROP_FPS) or 20.0 | |
| fourcc = cv2.VideoWriter_fourcc(*"mp4v") | |
| out = cv2.VideoWriter(tmp_output, fourcc, fps, (width, height)) | |
| while True: | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| # Run YOLOv5 inference on each frame | |
| results = model(frame) | |
| out.write(results[0].plot()) | |
| cap.release() | |
| out.release() | |
| return tmp_output |