Spaces:
No application file
No application file
| import argparse | |
| import os | |
| import sys | |
| import cv2 | |
| from ultralytics import YOLO | |
| import numpy as np | |
| # --- Configuration --- | |
| # Set the path for the YOLO model weights | |
| YOLO_MODEL_PATH = r"S:\ano_dec_pro\AnomalyDetectionCVPR2018-Pytorch\yolo_my_model.pt" | |
| # --- Main Detection Function --- | |
| def analyze_video_with_yolo(video_path: str, model_path: str = YOLO_MODEL_PATH, conf_threshold: float = 0.5,return_class=False): | |
| """ | |
| Analyzes a video using a pre-trained YOLO model for object detection | |
| and prints the predicted anomaly class for frames with detections. | |
| :param video_path: Path to the input video file. | |
| :param model_path: Path to the trained YOLO model weights. | |
| :param conf_threshold: Minimum confidence score required for a detection. | |
| """ | |
| if not os.path.exists(video_path): | |
| print(f"[ERROR] Video file not found at: {video_path}") | |
| return | |
| if not os.path.exists(model_path): | |
| print(f"[ERROR] YOLO model not found at: {model_path}") | |
| return | |
| try: | |
| # Load the YOLO model (Assumes it's trained for your 14 anomaly classes) | |
| model = YOLO(model_path, task='detect') | |
| labels = model.names | |
| print(f"[INFO] YOLO Model loaded successfully with {len(labels)} classes.") | |
| except Exception as e: | |
| print(f"[FATAL] Failed to load YOLO model: {e}") | |
| return | |
| cap = cv2.VideoCapture(video_path) | |
| if not cap.isOpened(): | |
| print(f"[ERROR] Could not open video stream for: {video_path}") | |
| return | |
| frame_num = 0 | |
| detections_found = 0 | |
| print("-" * 50) | |
| print(f"Starting analysis of: {os.path.basename(video_path)}") | |
| print("-" * 50) | |
| detected_class = "None" | |
| while cap.isOpened(): | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| if frame_num % 10 == 0: | |
| results = model(frame, conf=conf_threshold, verbose=False) | |
| if results and len(results[0].boxes) > 0: | |
| detections = results[0].boxes | |
| best_detection = detections[detections.conf.argmax()] | |
| class_idx = int(best_detection.cls.item()) | |
| class_name = labels.get(class_idx, "Unknown Class") | |
| detected_class = class_name | |
| frame_num += 1 | |
| cap.release() | |
| cv2.destroyAllWindows() | |
| if return_class: | |
| return detected_class | |
| # while cap.isOpened(): | |
| # ret, frame = cap.read() | |
| # if not ret: | |
| # break | |
| # # Analyze every 10th frame to speed up testing and reduce redundancy | |
| # if frame_num % 10 == 0: | |
| # # Run inference (set verbose=False to keep the output clean) | |
| # results = model(frame, conf=conf_threshold, verbose=False) | |
| # # Process results | |
| # if results and len(results[0].boxes) > 0: | |
| # detections = results[0].boxes | |
| # # We'll take the highest confidence detection in the frame | |
| # best_detection = detections[detections.conf.argmax()] | |
| # class_idx = int(best_detection.cls.item()) | |
| # class_name = labels.get(class_idx, "Unknown Class") | |
| # confidence = best_detection.conf.item() | |
| # print(f"Frame {frame_num:05d}: DETECTED -> {class_name} ({confidence:.2f})") | |
| # detections_found += 1 | |
| # frame_num += 1 | |
| # cap.release() | |
| # cv2.destroyAllWindows() | |
| print("-" * 50) | |
| print(f"Analysis complete. Total detections reported: {detections_found}") | |
| print("-" * 50) | |
| # if __name__ == '__main__': | |
| # # --- Example Usage (Run this command in your environment) --- | |
| # # Change the video path to a file you want to test! | |
| # example_video = r"S:\ano_dec_pro\dataset\Abuse\Abuse002_x264.mp4" | |
| # # NOTE: In a shell/CLI environment (like VS Code or PowerShell), you typically | |
| # # run this by executing the script and passing arguments: | |
| # # python yolo_detection.py --video_path "S:\ano_dec_pro\dataset\Abuse\Abuse002_x264.mp4" | |
| # # We call the function directly for simple execution in Python interpreter | |
| # print("NOTE: Running the detection script. Please change 'example_video' to your actual file path.") | |
| # analyze_video_with_yolo(example_video) | |