В эпоху быстрого технического прогресса потребность в эффективном и точном наблюдении за нашим небом никогда не была более острой. Будь то управление воздушным пространством, усиление безопасности аэропортов или мониторинг воздействия на окружающую среду, способность обнаруживать и подсчитывать самолеты в режиме реального времени играет ключевую роль. Традиционные методы часто не справляются с этими проблемами, но теперь пересечение глубокого обучения и передовых методов компьютерного зрения дает нам экстраординарное решение. В этой статье мы углубимся в сферу YOLOv8 (You Only Look Once version 8), системы обнаружения объектов, известной своей скоростью и точностью. Мы рассмотрим, как можно использовать YOLOv8 не только для обнаружения самолетов в видеопотоках, но и для присвоения уникальных идентификаторов треков, чтобы каждый самолет учитывался только один раз, что революционизирует наши возможности мониторинга и управления небом над головой. Нашим источником данных для этого проекта является A DS-B Exchange, который представляет собой ценное хранилище информации об отслеживании самолетов.
Начало работы с Yolo-V8
#Import libraries from ultralytics import YOLO import cv2 import argparse import numpy as np
Чтобы начать отслеживание объектов с помощью YOLOv8, вы можете создать простой скрипт Python, который применяет алгоритм отслеживания к видео и отображает выходные данные в окне OpenCV по умолчанию.
#Load and save video cap = cv2.VideoCapture(args.source) # Check if the video file was opened successfully if not cap.isOpened(): print("Error: Could not open video file.") return # Get video properties fps = int(cap.get(cv2.CAP_PROP_FPS)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # Define the codec and create a VideoWriter object fourcc = cv2.VideoWriter_fourcc(*"mp4v") # Use appropriate codec (e.g., 'XVID', 'MJPG', 'H264', etc.) out = cv2.VideoWriter(args.save_dir, fourcc, fps, (width, height)) # Read a frame from the video. This should be inside a loop ret, frame = cap.read() # Break the loop if we have reached the end of the video if not ret: break ##Data processing out.write(frame) #Release input and output cap.release() out.release()
YoloV8 имеет встроенную функцию для запуска отслеживания без использования внешних библиотек.
model = YOLO('path/to/model') #model creation results = model.track(frame,persist=True)[0] #Use persist=True to keep track id
В этом случае каждый результат рисуется в исходном кадре.
boxes = results.cpu().numpy().boxes.data for output in boxes: bbox_tl_x = int(output[0]) bbox_tl_y = int(output[1]) bbox_br_x = int(output[2]) bbox_br_y = int(output[3]) id = int(output[4]) class_ = int(output[6]) score = int(output[5]) classColor = [int(c) for c in colorList[class_]] cv2.rectangle(frame, (bbox_tl_x, bbox_tl_y),(bbox_br_x, bbox_br_y), color=classColor, thickness=2) #Draw detection rectangle cv2.putText(frame, f"{class_names[class_].capitalize()}- {id}", (bbox_tl_x, bbox_tl_y), cv2.FONT_HERSHEY_COMPLEX, 1, color=classColor, thickness=1) #Draw detection value
Полный код отслеживания объектов yolov8 проверьте на Github.
Сталкиваетесь с проблемами ИИ? Свяжитесь со мной для получения решений, ориентированных на результат. Ваш следующий прорыв находится на расстоянии одного сообщения.
Если вы хотите узнать больше о Python, подписывайтесь на меня: