В эпоху быстрого технического прогресса потребность в эффективном и точном наблюдении за нашим небом никогда не была более острой. Будь то управление воздушным пространством, усиление безопасности аэропортов или мониторинг воздействия на окружающую среду, способность обнаруживать и подсчитывать самолеты в режиме реального времени играет ключевую роль. Традиционные методы часто не справляются с этими проблемами, но теперь пересечение глубокого обучения и передовых методов компьютерного зрения дает нам экстраординарное решение. В этой статье мы углубимся в сферу 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.

Сталкиваетесь с проблемами ИИ? Свяжитесь со мной для получения решений, ориентированных на результат. Ваш следующий прорыв находится на расстоянии одного сообщения.

Фиверр

UpWork

Если вы хотите узнать больше о Python, подписывайтесь на меня:

Github
Средний
Linkedin