انتقل إلى المحتوى

تتبع الكائنات المتعددة مع Ultralytics YOLO

أمثلة على تتبع الكائنات المتعددة

يعد تتبع الكائنات في مجال تحليلات الفيديو مهمة مهمة لا تحدد موقع وفئة الكائنات داخل الإطار فحسب ، بل تحافظ أيضا على معرف فريد لكل كائن تم اكتشافه مع تقدم الفيديو. التطبيقات لا حدود لها - بدءا من المراقبة والأمن إلى التحليلات الرياضية في الوقت الفعلي.

لماذا تختار Ultralytics YOLO لتتبع الكائن؟

الناتج من Ultralytics يتوافق المتعقبون مع اكتشاف الكائنات القياسي ولكنه يحتوي على القيمة المضافة لمعرفات الكائنات. هذا يجعل من السهل تتبع الكائنات في تدفقات الفيديو وإجراء التحليلات اللاحقة. إليك لماذا يجب أن تفكر في استخدام Ultralytics YOLO لاحتياجات تتبع الكائن الخاص بك:

  • كفاءة: قم بمعالجة تدفقات الفيديو في الوقت الفعلي دون المساس بالدقة.
  • المرونه: يدعم خوارزميات وتكوينات تتبع متعددة.
  • سهولة الاستخدام: بسيط Python واجهة برمجة التطبيقات و CLI خيارات للتكامل والنشر السريع.
  • التخصيص: سهل الاستخدام مع تدريب مخصص YOLO النماذج ، مما يسمح بالتكامل في التطبيقات الخاصة بالمجال.



شاهد: الكشف عن الكائنات وتتبعها باستخدام Ultralytics YOLOv8.

تطبيقات العالم الحقيقي

النقل التجزئه تربيه الاحياء المائيه
تتبع المركبات تتبع الأشخاص تتبع الأسماك
تتبع المركبات تتبع الأشخاص تتبع الأسماك

الميزات في لمحة

Ultralytics YOLO يوسع ميزات اكتشاف الكائنات الخاصة به لتوفير تتبع قوي ومتعدد الاستخدامات للكائنات:

  • التتبع في الوقت الحقيقي: تتبع الكائنات بسلاسة في مقاطع الفيديو ذات معدل الإطارات العالي.
  • دعم تعقب متعددة: اختر من بين مجموعة متنوعة من خوارزميات التتبع المعمول بها.
  • تكوينات تعقب قابلة للتخصيص: قم بتخصيص خوارزمية التتبع لتلبية متطلبات محددة عن طريق ضبط المعلمات المختلفة.

أجهزة التتبع المتاحة

Ultralytics YOLO يدعم خوارزميات التتبع التالية. يمكن تمكينها عن طريق تمرير ملف تكوين YAML ذي الصلة مثل tracker=tracker_type.yaml:

  • بوت سورت -استخدام botsort.yaml لتمكين هذا المتتبع.
  • بايت تراك -استخدام bytetrack.yaml لتمكين هذا المتتبع.

المتعقب الافتراضي هو BoT-SORT.

تتبع

معلومات عتبة المتعقب

إذا كانت درجة ثقة الكائن منخفضة، أي أقل من track_high_thresh، فلن يتم إرجاع أي مسارات وتحديثها بنجاح.

لتشغيل المتعقب على تدفقات الفيديو ، استخدم نموذجا مدربا للكشف أو المقطع أو الوضع مثل YOLOv8n, YOLOv8n-سيج و YOLOv8n-تشكل.

مثل

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"

كما يتضح من الاستخدام أعلاه ، يتوفر التتبع لجميع طرز Detect و Segment و Pose التي تعمل على مقاطع الفيديو أو مصادر البث.

تكوين

معلومات عتبة المتعقب

إذا كانت درجة ثقة الكائن منخفضة، أي أقل من track_high_thresh، فلن يتم إرجاع أي مسارات وتحديثها بنجاح.

تتبع الحجج

يشارك تكوين التعقب الخصائص مع وضع التنبؤ، مثل conf, iouو show. لمزيد من التكوينات، راجع تنبأ صفحة النموذج.

مثل

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

اختيار المقتفي

Ultralytics يسمح لك أيضا باستخدام ملف تكوين تعقب معدل. للقيام بذلك ، ما عليك سوى إنشاء نسخة من ملف تكوين تعقب (على سبيل المثال ، custom_tracker.yaml) من ultralytics/ cfg / بتتبع وتعديل أي تكوينات (باستثناء tracker_type) حسب احتياجاتك.

مثل

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'

للحصول على قائمة شاملة بوسيطات التعقب، ارجع إلى ultralytics/ cfg / صفحة التتبع .

Python امثله

حلقة المسارات المستمرة

هنا Python البرنامج النصي باستخدام OpenCV (cv2) و YOLOv8 لتشغيل تتبع الكائن على إطارات الفيديو. لا يزال هذا البرنامج النصي يفترض أنك قمت بالفعل بتثبيت الحزم الضرورية (opencv-python و ultralytics). ال persist=True تخبر الوسيطة المتعقب أن الصورة أو الإطار الحالي هو التالي في تسلسل وتوقع مسارات من الصورة السابقة في الصورة الحالية.

البث للحلقة مع التتبع

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()

يرجى ملاحظة التغيير من model(frame) ل model.track(frame)، مما يتيح تتبع الكائنات بدلا من الاكتشاف البسيط. سيقوم هذا البرنامج النصي المعدل بتشغيل المتعقب على كل إطار من الفيديو ، وتصور النتائج ، وعرضها في نافذة. يمكن الخروج من الحلقة بالضغط على "q".

رسم المسارات بمرور الوقت

يمكن أن يوفر تصور مسارات الكائنات عبر إطارات متتالية رؤى قيمة حول أنماط الحركة وسلوك الكائنات المكتشفة داخل الفيديو. مع Ultralytics YOLOv8، فإن رسم هذه المسارات عملية سلسة وفعالة.

في المثال التالي ، نوضح كيفية استخدام YOLOv8لرسم حركة الكائنات المكتشفة عبر إطارات فيديو متعددة. يتضمن هذا البرنامج النصي فتح ملف فيديو ، وقراءته إطارا تلو الآخر ، واستخدام ملف YOLO نموذج لتحديد وتتبع الكائنات المختلفة. من خلال الاحتفاظ بالنقاط المركزية للمربعات المحيطة المكتشفة وتوصيلها ، يمكننا رسم خطوط تمثل المسارات التي تتبعها الكائنات المتعقبة.

رسم المسارات على إطارات فيديو متعددة

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()

تتبع متعدد مؤشرات الترابط

يوفر التتبع متعدد مؤشرات الترابط القدرة على تشغيل تتبع الكائنات على تدفقات فيديو متعددة في وقت واحد. هذا مفيد بشكل خاص عند التعامل مع مدخلات فيديو متعددة ، مثل كاميرات المراقبة المتعددة ، حيث يمكن للمعالجة المتزامنة أن تعزز الكفاءة والأداء بشكل كبير.

في المقدمة Python البرنامج النصي ، ونحن الاستفادة من Python's threading وحدة لتشغيل مثيلات متعددة من المتعقب في وقت واحد. كل مؤشر ترابط مسؤول عن تشغيل المتعقب على ملف فيديو واحد ، ويتم تشغيل جميع سلاسل الرسائل في وقت واحد في الخلفية.

للتأكد من أن كل مؤشر ترابط يتلقى المعلمات الصحيحة (ملف الفيديو والنموذج المراد استخدامه وفهرس الملف) ، نحدد وظيفة run_tracker_in_thread يقبل هذه المعلمات ويحتوي على حلقة التتبع الرئيسية. تقرأ هذه الوظيفة إطار الفيديو بإطار ، وتدير المتعقب ، وتعرض النتائج.

يتم استخدام نموذجين مختلفين في هذا المثال: yolov8n.pt و yolov8n-seg.pt، كل كائنات تتبع في ملف فيديو مختلف. يتم تحديد ملفات الفيديو في video_file1 و video_file2.

ال daemon=True المعلمة في threading.Thread يعني أنه سيتم إغلاق هذه المواضيع بمجرد انتهاء البرنامج الرئيسي. ثم نبدأ المواضيع مع start() والاستخدام join() لجعل مؤشر الترابط الرئيسي ينتظر حتى ينتهي كل من مؤشرات التعقب.

أخيرا ، بعد إكمال جميع مؤشرات الترابط مهمتها ، يتم إغلاق النوافذ التي تعرض النتائج باستخدام cv2.destroyAllWindows().

البث للحلقة مع التتبع

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()

يمكن توسيع هذا المثال بسهولة للتعامل مع المزيد من ملفات الفيديو والنماذج عن طريق إنشاء المزيد من سلاسل الرسائل وتطبيق نفس المنهجية.

ساهم بأجهزة تتبع جديدة

هل أنت بارع في تتبع الكائنات المتعددة وقمت بتنفيذ أو تكييف خوارزمية تتبع بنجاح مع Ultralytics YOLO? ندعوك للمساهمة في قسم التتبع الخاص بنا في ultralytics/ cfg / تتبع! يمكن أن تكون تطبيقاتك وحلولك الواقعية لا تقدر بثمن للمستخدمين الذين يعملون على تتبع المهام.

من خلال المساهمة في هذا القسم ، فإنك تساعد في توسيع نطاق حلول التتبع المتاحة داخل Ultralytics YOLO الإطار ، إضافة طبقة أخرى من الوظائف والمرافق للمجتمع.

لبدء مساهمتك ، يرجى الرجوع إلى دليل المساهمة الخاص بنا للحصول على إرشادات شاملة حول تقديم طلب السحب (PR). 🛠️ نحن متحمسون لرؤية ما تجلبه إلى الطاولة!

معا ، دعونا نعزز قدرات التتبع الخاصة ب Ultralytics YOLO 🙏 النظام البيئي !



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

التعليقات