─░├žeri─če ge├ž

Çoklu Nesne Takibi ile Ultralytics YOLO

├çoklu nesne izleme ├Ârnekleri

Video analiti─či alan─▒nda nesne takibi, yaln─▒zca ├žer├ževe i├žindeki nesnelerin konumunu ve s─▒n─▒f─▒n─▒ tan─▒mlamakla kalmay─▒p ayn─▒ zamanda video ilerledik├že alg─▒lanan her nesne i├žin benzersiz bir kimlik sa─člayan kritik bir g├Ârevdir. G├Âzetim ve g├╝venlikten ger├žek zamanl─▒ spor analiti─čine kadar uzanan uygulamalar s─▒n─▒rs─▒zd─▒r.

Neden Nesne Takibi i├žin Ultralytics YOLO adresini se├žmelisiniz?

Ultralytics izleyicilerinden elde edilen ├ž─▒kt─▒ standart nesne alg─▒lama ile tutarl─▒d─▒r ancak nesne kimliklerinin katma de─čerine sahiptir. Bu, video ak─▒┼člar─▒ndaki nesneleri izlemeyi ve ard─▒ndan analiz ger├žekle┼čtirmeyi kolayla┼čt─▒r─▒r. Nesne izleme ihtiya├žlar─▒n─▒z i├žin neden Ultralytics YOLO adresini kullanmay─▒ d├╝┼č├╝nmeniz gerekti─čini a├ž─▒kl─▒yoruz:

  • Verimlilik: Do─čruluktan ├Âd├╝n vermeden video ak─▒┼člar─▒n─▒ ger├žek zamanl─▒ olarak i┼čleyin.
  • Esneklik: ├çoklu izleme algoritmalar─▒n─▒ ve konfig├╝rasyonlar─▒n─▒ destekler.
  • Kullan─▒m Kolayl─▒─č─▒: H─▒zl─▒ entegrasyon ve da─č─▒t─▒m i├žin basit Python API ve CLI se├ženekleri.
  • ├ľzelle┼čtirilebilirlik: ├ľzel e─čitimli YOLO modelleri ile kullan─▒m─▒ kolayd─▒r ve alana ├Âzg├╝ uygulamalara entegrasyon sa─člar.



─░zle: Ultralytics YOLOv8 ile Nesne Tespiti ve Takibi .

Ger├žek D├╝nya Uygulamalar─▒

Ula┼č─▒m Perakende Akuak├╝lt├╝r
Ara├ž Takip Ki┼či Takibi Bal─▒k Takibi
Ara├ž Takip Ki┼či Takibi Bal─▒k Takibi

Bir Bak─▒┼čta ├ľzellikler

Ultralytics YOLO sa─člam ve ├žok y├Ânl├╝ nesne takibi sa─člamak i├žin nesne alg─▒lama ├Âzelliklerini geni┼čletir:

  • Ger├žek Zamanl─▒ ─░zleme: Y├╝ksek kare h─▒zl─▒ videolardaki nesneleri sorunsuzca izleyin.
  • ├çoklu ─░zleyici Deste─či: ├çe┼čitli yerle┼čik izleme algoritmalar─▒ aras─▒ndan se├žim yap─▒n.
  • ├ľzelle┼čtirilebilir ─░zleyici Yap─▒land─▒rmalar─▒: ├çe┼čitli parametreleri ayarlayarak izleme algoritmas─▒n─▒ ├Âzel gereksinimleri kar┼č─▒layacak ┼čekilde uyarlay─▒n.

Mevcut ─░zleyiciler

Ultralytics YOLO a┼ča─č─▒daki izleme algoritmalar─▒n─▒ destekler. Bunlar, a┼ča─č─▒daki gibi ilgili YAML yap─▒land─▒rma dosyas─▒ ge├žirilerek etkinle┼čtirilebilir tracker=tracker_type.yaml:

  • BoT-SORT - Kullan─▒m botsort.yaml bu izleyiciyi etkinle┼čtirmek i├žin.
  • ByteTrack - Kullan─▒m bytetrack.yaml bu izleyiciyi etkinle┼čtirmek i├žin.

Varsay─▒lan izleyici BoT-SORT'tur.

Takip

─░zleyici E┼čik Bilgileri

Nesne g├╝ven puan─▒ d├╝┼č├╝k olacaksa, yani track_high_threshbu durumda ba┼čar─▒l─▒ bir ┼čekilde d├Ând├╝r├╝len ve g├╝ncellenen hi├žbir par├ža olmayacakt─▒r.

─░zleyiciyi video ak─▒┼člar─▒ ├╝zerinde ├žal─▒┼čt─▒rmak i├žin YOLOv8n, YOLOv8n-seg ve YOLOv8n-pose gibi e─čitimli bir Alg─▒lama, Segment veya Poz modeli kullan─▒n.

├ľrnek

from ultralytics import YOLO

# Load an official or custom model
model = YOLO("yolov8n.pt")  # Load an official Detect model
model = YOLO("yolov8n-seg.pt")  # Load an official Segment model
model = YOLO("yolov8n-pose.pt")  # Load an official Pose model
model = YOLO("path/to/best.pt")  # Load a custom trained model

# Perform tracking with the model
results = model.track("https://youtu.be/LNwODJXcvt4", show=True)  # Tracking with default tracker
results = model.track("https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")  # with ByteTrack
# Perform tracking with various models using the command line interface
yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4"  # Official Detect model
yolo track model=yolov8n-seg.pt source="https://youtu.be/LNwODJXcvt4"  # Official Segment model
yolo track model=yolov8n-pose.pt source="https://youtu.be/LNwODJXcvt4"  # Official Pose model
yolo track model=path/to/best.pt source="https://youtu.be/LNwODJXcvt4"  # Custom trained model

# Track using ByteTrack tracker
yolo track model=path/to/best.pt tracker="bytetrack.yaml"

Yukar─▒daki kullan─▒mda g├Âr├╝lebilece─či gibi, videolar veya ak─▒┼č kaynaklar─▒ ├╝zerinde ├žal─▒┼čt─▒r─▒lan t├╝m Detect, Segment ve Pose modelleri i├žin izleme mevcuttur.

Konfig├╝rasyon

─░zleyici E┼čik Bilgileri

Nesne g├╝ven puan─▒ d├╝┼č├╝k olacaksa, yani track_high_threshbu durumda ba┼čar─▒l─▒ bir ┼čekilde d├Ând├╝r├╝len ve g├╝ncellenen hi├žbir par├ža olmayacakt─▒r.

Arg├╝manlar─▒n ─░zlenmesi

─░zleme yap─▒land─▒rmas─▒, Tahmin modu ile a┼ča─č─▒daki gibi ├Âzellikleri payla┼č─▒r conf, iouve show. Daha fazla konfig├╝rasyon i├žin bkz. Tahmin Et Model sayfas─▒.

├ľrnek

from ultralytics import YOLO

# Configure the tracking parameters and run the tracker
model = YOLO("yolov8n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", conf=0.3, iou=0.5, show=True)
# Configure tracking parameters and run the tracker using the command line interface
yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4" conf=0.3, iou=0.5 show

─░zleyici Se├žimi

Ultralytics ayr─▒ca de─či┼čtirilmi┼č bir izleyici yap─▒land─▒rma dosyas─▒ kullanman─▒za da olanak tan─▒r. Bunu yapmak i├žin, bir izleyici yap─▒land─▒rma dosyas─▒n─▒n bir kopyas─▒n─▒ olu┼čturman─▒z yeterlidir (├Ârn, custom_tracker.yaml) dan ultralytics/cfg/trackers ve herhangi bir konfig├╝rasyonu de─či┼čtirin (hari├ž tracker_type) ihtiya├žlar─▒n─▒za g├Âre.

├ľrnek

from ultralytics import YOLO

# Load the model and run the tracker with a custom configuration file
model = YOLO("yolov8n.pt")
results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker="custom_tracker.yaml")
# Load the model and run the tracker with a custom configuration file using the command line interface
yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4" tracker='custom_tracker.yaml'

─░zleme arg├╝manlar─▒n─▒n kapsaml─▒ bir listesi i├žin ultralytics/cfg/trackers sayfas─▒na bak─▒n.

Python ├ľrnekler

Devam Eden ─░zler D├Âng├╝s├╝

─░┼čte OpenCV kullanan bir Python beti─či (cv2) ve YOLOv8 adreslerini kullanarak video kareleri ├╝zerinde nesne izlemeyi ├žal─▒┼čt─▒rabilirsiniz. Bu betik hala gerekli paketleri zaten y├╝kledi─činizi varsayar (opencv-python ve ultralytics). Bu persist=True arg├╝man─▒, izleyiciye ge├žerli g├Âr├╝nt├╝n├╝n veya karenin bir dizinin sonraki g├Âr├╝nt├╝s├╝ oldu─čunu ve ge├žerli g├Âr├╝nt├╝de ├Ânceki g├Âr├╝nt├╝den izler beklemesini s├Âyler.

─░zleme ile for d├Âng├╝s├╝ ak─▒┼č─▒

import cv2

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("yolov8n.pt")

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 tracking on the frame, persisting tracks between frames
        results = model.track(frame, persist=True)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Tracking", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

L├╝tfen ┼ču de─či┼čikli─če dikkat edin model(frame) i├žin model.track(frame)basit alg─▒lama yerine nesne izlemeyi etkinle┼čtirir. Bu de─či┼čtirilmi┼č komut dosyas─▒, videonun her karesinde izleyiciyi ├žal─▒┼čt─▒racak, sonu├žlar─▒ g├Ârselle┼čtirecek ve bir pencerede g├Âr├╝nt├╝leyecektir. D├Âng├╝den 'q' tu┼čuna bas─▒larak ├ž─▒k─▒labilir.

─░zleri Zaman ─░├žinde ├çizme

Ard─▒┼č─▒k kareler ├╝zerindeki nesne izlerini g├Ârselle┼čtirmek, bir videodaki alg─▒lanan nesnelerin hareket kal─▒plar─▒ ve davran─▒┼člar─▒ hakk─▒nda de─čerli bilgiler sa─člayabilir. Ultralytics YOLOv8 ile bu izleri ├žizmek sorunsuz ve verimli bir s├╝re├žtir.

A┼ča─č─▒daki ├Ârnekte, tespit edilen nesnelerin hareketini birden fazla video karesi boyunca ├žizmek i├žin YOLOv8'un izleme yeteneklerinin nas─▒l kullan─▒laca─č─▒n─▒ g├Âsteriyoruz. Bu komut dosyas─▒ bir video dosyas─▒n─▒ a├žmay─▒, kare kare okumay─▒ ve ├že┼čitli nesneleri tan─▒mlamak ve izlemek i├žin YOLO modelini kullanmay─▒ i├žerir. Tespit edilen s─▒n─▒rlay─▒c─▒ kutular─▒n merkez noktalar─▒n─▒ koruyarak ve bunlar─▒ birle┼čtirerek, izlenen nesneler taraf─▒ndan izlenen yollar─▒ temsil eden ├žizgiler ├žizebiliriz.

Birden fazla video karesi ├╝zerinde izleri ├žizme

from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("yolov8n.pt")

# Open the video file
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# Store the track history
track_history = defaultdict(lambda: [])

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 tracking on the frame, persisting tracks between frames
        results = model.track(frame, persist=True)

        # Get the boxes and track IDs
        boxes = results[0].boxes.xywh.cpu()
        track_ids = results[0].boxes.id.int().cpu().tolist()

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Plot the tracks
        for box, track_id in zip(boxes, track_ids):
            x, y, w, h = box
            track = track_history[track_id]
            track.append((float(x), float(y)))  # x, y center point
            if len(track) > 30:  # retain 90 tracks for 90 frames
                track.pop(0)

            # Draw the tracking lines
            points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
            cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)

        # Display the annotated frame
        cv2.imshow("YOLOv8 Tracking", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

├çok ─░┼č Par├žac─▒kl─▒ ─░zleme

├çok i┼č par├žac─▒kl─▒ izleme, nesne izlemeyi ayn─▒ anda birden fazla video ak─▒┼č─▒ ├╝zerinde ├žal─▒┼čt─▒rma olana─č─▒ sa─člar. Bu ├Âzellikle, e┼č zamanl─▒ i┼člemenin verimlili─či ve performans─▒ b├╝y├╝k ├Âl├ž├╝de art─▒rabilece─či birden fazla g├╝venlik kameras─▒ gibi birden fazla video giri┼čini i┼člerken kullan─▒┼čl─▒d─▒r.

Sa─članan Python beti─činde, Python'in threading mod├╝l├╝n├╝ kullanarak izleyicinin birden fazla ├Ârne─čini e┼čzamanl─▒ olarak ├žal─▒┼čt─▒rabilirsiniz. Her i┼č par├žac─▒─č─▒ izleyiciyi bir video dosyas─▒ ├╝zerinde ├žal─▒┼čt─▒rmaktan sorumludur ve t├╝m i┼č par├žac─▒klar─▒ arka planda ayn─▒ anda ├žal─▒┼č─▒r.

Her i┼č par├žac─▒─č─▒n─▒n do─čru parametreleri (video dosyas─▒, kullan─▒lacak model ve dosya indeksi) almas─▒n─▒ sa─člamak i├žin bir fonksiyon tan─▒ml─▒yoruz run_tracker_in_thread bu parametreleri kabul eder ve ana izleme d├Âng├╝s├╝n├╝ i├žerir. Bu i┼člev videoyu kare kare okur, izleyiciyi ├žal─▒┼čt─▒r─▒r ve sonu├žlar─▒ g├Âr├╝nt├╝ler.

Bu ├Ârnekte iki farkl─▒ model kullan─▒lm─▒┼čt─▒r: yolov8n.pt ve yolov8n-seg.pther biri farkl─▒ bir video dosyas─▒ndaki nesneleri izler. Video dosyalar─▒ ┼čurada belirtilir video_file1 ve video_file2.

Bu daemon=True i├žinde parametre threading.Thread ana program biter bitmez bu i┼č par├žac─▒klar─▒n─▒n kapat─▒laca─č─▒ anlam─▒na gelir. Daha sonra i┼č par├žac─▒klar─▒n─▒ ┼ču ┼čekilde ba┼člat─▒r─▒z start() ve kullan─▒n join() ana i┼č par├žac─▒─č─▒n─▒n her iki izleyici i┼č par├žac─▒─č─▒n─▒n i┼či bitene kadar beklemesini sa─člamak i├žin.

Son olarak, t├╝m i┼č par├žac─▒klar─▒ g├Ârevlerini tamamlad─▒ktan sonra, sonu├žlar─▒ g├Âr├╝nt├╝leyen pencereler cv2.destroyAllWindows().

─░zleme ile for d├Âng├╝s├╝ ak─▒┼č─▒

import threading

import cv2

from ultralytics import YOLO


def run_tracker_in_thread(filename, model, file_index):
    """
    Runs a video file or webcam stream concurrently with the YOLOv8 model using threading.

    This function captures video frames from a given file or camera source and utilizes the YOLOv8 model for object
    tracking. The function runs in its own thread for concurrent processing.

    Args:
        filename (str): The path to the video file or the identifier for the webcam/external camera source.
        model (obj): The YOLOv8 model object.
        file_index (int): An index to uniquely identify the file being processed, used for display purposes.

    Note:
        Press 'q' to quit the video display window.
    """
    video = cv2.VideoCapture(filename)  # Read the video file

    while True:
        ret, frame = video.read()  # Read the video frames

        # Exit the loop if no more frames in either video
        if not ret:
            break

        # Track objects in frames if available
        results = model.track(frame, persist=True)
        res_plotted = results[0].plot()
        cv2.imshow(f"Tracking_Stream_{file_index}", res_plotted)

        key = cv2.waitKey(1)
        if key == ord("q"):
            break

    # Release video sources
    video.release()


# Load the models
model1 = YOLO("yolov8n.pt")
model2 = YOLO("yolov8n-seg.pt")

# Define the video files for the trackers
video_file1 = "path/to/video1.mp4"  # Path to video file, 0 for webcam
video_file2 = 0  # Path to video file, 0 for webcam, 1 for external camera

# Create the tracker threads
tracker_thread1 = threading.Thread(target=run_tracker_in_thread, args=(video_file1, model1, 1), daemon=True)
tracker_thread2 = threading.Thread(target=run_tracker_in_thread, args=(video_file2, model2, 2), daemon=True)

# Start the tracker threads
tracker_thread1.start()
tracker_thread2.start()

# Wait for the tracker threads to finish
tracker_thread1.join()
tracker_thread2.join()

# Clean up and close windows
cv2.destroyAllWindows()

Bu ├Ârnek, daha fazla i┼č par├žac─▒─č─▒ olu┼čturarak ve ayn─▒ metodolojiyi uygulayarak daha fazla video dosyas─▒ ve modeli i┼člemek i├žin kolayca geni┼čletilebilir.

Yeni ─░zleyicilere Katk─▒da Bulunun

├çoklu nesne izleme konusunda uzman m─▒s─▒n─▒z ve Ultralytics YOLO ile bir izleme algoritmas─▒n─▒ ba┼čar─▒yla uygulad─▒n─▒z veya uyarlad─▒n─▒z m─▒? Sizi ultralytics/cfg/trackers adresindeki ─░zleyiciler b├Âl├╝m├╝m├╝ze katk─▒da bulunmaya davet ediyoruz! Ger├žek d├╝nyadaki uygulamalar─▒n─▒z ve ├ž├Âz├╝mleriniz, izleme g├Ârevleri ├╝zerinde ├žal─▒┼čan kullan─▒c─▒lar i├žin ├žok de─čerli olabilir.

Bu b├Âl├╝me katk─▒da bulunarak, Ultralytics YOLO ├žer├ževesinde mevcut izleme ├ž├Âz├╝mlerinin kapsam─▒n─▒ geni┼čletmeye yard─▒mc─▒ olur, topluluk i├žin ba┼čka bir i┼člevsellik ve fayda katman─▒ eklersiniz.

Katk─▒n─▒z─▒ ba┼člatmak i├žin l├╝tfen ­čŤá´ŞĆ adresinde bir ├çekme ─░ste─či (PR) g├Ândermeye ili┼čkin kapsaml─▒ talimatlar i├žin Katk─▒da Bulunma K─▒lavuzumuza bak─▒n. Masaya ne getirece─činizi g├Ârmek i├žin heyecanl─▒y─▒z!

Birlikte Ultralytics YOLO ekosisteminin izleme yeteneklerini geli┼čtirelim ­čÖĆ!



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (15), IvorZhu331 (1), Burhan-Q (1)

Yorumlar