ในยุคของความก้าวหน้าทางเทคโนโลยีอย่างรวดเร็ว ความจำเป็นในการเฝ้าระวังท้องฟ้าของเราอย่างมีประสิทธิภาพและแม่นยำไม่เคยมีความสำคัญมากเท่านี้มาก่อน ไม่ว่าจะเป็นการจัดการน่านฟ้า การรักษาความปลอดภัยของสนามบิน หรือการตรวจสอบผลกระทบต่อสิ่งแวดล้อม ความสามารถในการตรวจจับและนับจำนวนเครื่องบินแบบเรียลไทม์มีบทบาทสำคัญ วิธีการแบบเดิมๆ มักไม่ประสบผลสำเร็จเมื่อเผชิญกับความท้าทายเหล่านี้ แต่ในปัจจุบัน การผสมผสานระหว่างการเรียนรู้เชิงลึกและเทคนิคการมองเห็นคอมพิวเตอร์ที่ล้ำสมัยทำให้เรามีวิธีแก้ปัญหาที่พิเศษ ในบทความนี้ เราจะเจาะลึกขอบเขตของ YOLOv8 (คุณดูเพียงครั้งเดียว เวอร์ชัน 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"

เผชิญกับความท้าทายด้าน AI ใช่ไหม ติดต่อฉันสำหรับโซลูชันที่ขับเคลื่อนด้วยผลลัพธ์ ความก้าวหน้าครั้งถัดไปของคุณอยู่ห่างออกไปเพียงข้อความเดียว

ไฟเวอร์

อัพเวิร์ค

หากคุณสนใจที่จะสำรวจเนื้อหา Python เพิ่มเติม โปรดติดตามฉัน:

Github
ปานกลาง
Linkedin