You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

21 KiB

comments description keywords
true تعرف على كيفية استخدام Ultralytics YOLO لتتبع الكائنات في تدفقات الفيديو. أدلة لاستخدام مختلف المتتبعين وتخصيص إعدادات المتتبع. Ultralytics، YOLO، تتبع الكائنات، تدفقات الفيديو، BoT-SORT، ByteTrack، دليل Python، دليل خط الأوامر (CLI)

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

Multi-object tracking examples

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

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

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

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



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

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

النقل البيع بالتجزئة الاستزراع المائي
Vehicle Tracking People Tracking Fish Tracking
تتبع المركبات تتبع الأشخاص تتبع الأسماك

ملامح بلمحة

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

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

متتبعون متاحون

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

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

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

تتبع

لتشغيل المتتبع على تدفقات الفيديو، استخدم نموذج تحديد (Detect) أو قطع (Segment) أو وضع (Pose) مدرب مثل YOLOv8n و YOLOv8n-seg و YOLOv8n-pose.

!!! Example "مثال"

=== "Python"

    ```python
    from ultralytics import YOLO

    # قم بتحميل نموذج رسمي أو مخصص
    model = YOLO('yolov8n.pt')  # قم بتحميل نموذج رسمي Detect
    model = YOLO('yolov8n-seg.pt')  # قم بتحميل نموذج رسمي Segment
    model = YOLO('yolov8n-pose.pt')  # قم بتحميل نموذج رسمي Pose
    model = YOLO('path/to/best.pt')  # قم بتحميل نموذج مخصص مدرب

    # قم بتنفيذ التتبع باستخدام النموذج
    results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True)  # التتبع باستخدام المتتبع الافتراضي
    results = model.track(source="https://youtu.be/LNwODJXcvt4", show=True, tracker="bytetrack.yaml")  # التتبع باستخدام متتبع ByteTrack
    ```

=== "CLI"

    ```bash
    # قم بتنفيذ التتبع باستخدام مختلف النماذج باستخدام واجهة سطر الأوامر
    yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4"  # نموذج Detect رسمي
    yolo track model=yolov8n-seg.pt source="https://youtu.be/LNwODJXcvt4"  # نموذج Segment رسمي
    yolo track model=yolov8n-pose.pt source="https://youtu.be/LNwODJXcvt4"  # نموذج Pose رسمي
    yolo track model=path/to/best.pt source="https://youtu.be/LNwODJXcvt4"  # تم تدريب نموذج مخصص

    # تتبع عن طريق ByteTrack متتبع
    yolo track model=path/to/best.pt tracker="bytetrack.yaml"
    ```

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

الاعدادات

معاملات التتبع

تتشارك إعدادات التتبع الخصائص مع وضع التوقعات (Predict)، مثل conf و iou و show. للحصول على مزيد من التكوينات، راجع صفحة النموذج Predict.

!!! Example "مثال"

=== "Python"

    ```python
    from ultralytics import YOLO

    # قم بتكوين معلمات التتبع وقم بتشغيل التتبع
    model = YOLO('yolov8n.pt')
    results = model.track(source="https://youtu.be/LNwODJXcvt4", conf=0.3, iou=0.5, show=True)
    ```

=== "CLI"

    ```bash
    # قم بتكوين معلمات التتبع وقم بتشغيل التتبع باستخدام واجهة سطر الأوامر
    yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4" conf=0.3, iou=0.5 show
    ```

اختيار المتتبع

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

!!! Example "مثال"

=== "Python"

    ```python
    from ultralytics import YOLO

    # قم بتحميل النموذج وتشغيل التتبع باستخدام ملف تكوين مخصص
    model = YOLO('yolov8n.pt')
    results = model.track(source="https://youtu.be/LNwODJXcvt4", tracker='custom_tracker.yaml')
    ```

=== "CLI"

    ```bash
    # قم بتحميل النموذج وتشغيل التتبع باستخدام ملف تكوين مخصص باستخدام واجهة سطر الأوامر
    yolo track model=yolov8n.pt source="https://youtu.be/LNwODJXcvt4" tracker='custom_tracker.yaml'
    ```

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

أمثلة Python

الحفاظ على المسارات التكرارية

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

!!! Example "For-loop للتدفق مع التتبع"

```python
import cv2
from ultralytics import YOLO

# حمّل نموذج YOLOv8
model = YOLO('yolov8n.pt')

# افتح ملف الفيديو
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# تحلق عبر إطارات الفيديو
while cap.isOpened():
    # قراءة الإطار من الفيديو
    success, frame = cap.read()

    if success:
        # تشغيل تتبع YOLOv8 على الإطار ، وحفظ المسارات بين الإطارات
        results = model.track(frame, persist=True)

        # تصور النتائج على الإطار
        annotated_frame = results[0].plot()

        # عرض الإطار المعلق
        cv2.imshow("YOLOv8 Tracking", annotated_frame)

        # كسر اللوب في حالة الضغط على 'q'
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # كسر اللوب في نهاية الفيديو
        break

# إطلاق كائن التقاط الفيديو وإغلاق نافذة العرض
cap.release()
cv2.destroyAllWindows()
```

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

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

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

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

!!! Example "رسم المسارات عبر إطارات الفيديو المتعددة"

```python
from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

# حمّل نموذج YOLOv8
model = YOLO('yolov8n.pt')

# افتح ملف الفيديو
video_path = "path/to/video.mp4"
cap = cv2.VideoCapture(video_path)

# احفظ تاريخ المسارات
track_history = defaultdict(lambda: [])

# تحلق عبر إطارات الفيديو
while cap.isOpened():
    # قراءة الإطار من الفيديو
    success, frame = cap.read()

    if success:
        # تشغيل تتبع YOLOv8 على الإطار ، وحفظ المسارات بين الإطارات
        results = model.track(frame, persist=True)

        # الحصول على المربعات ومعرفات المسار
        boxes = results[0].boxes.xywh.cpu()
        track_ids = results[0].boxes.id.int().cpu().tolist()

        # تصور النتائج على الإطار
        annotated_frame = results[0].plot()

        # رسم المسارات
        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 نقطة الوسط
            if len(track) > 30:  # احتفظ بـ 90 مسارًا لـ 90 إطارًا
                track.pop(0)

            # رسم خطوط التتبع
            points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
            cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)

        # عرض الإطار المعلق
        cv2.imshow("YOLOv8 Tracking", annotated_frame)

        # كسر اللوب في حالة الضغط على 'q'
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # كسر اللوب في نهاية الفيديو
        break

# إطلاق كائن التقاط الفيديو وإغلاق نافذة العرض
cap.release()
cv2.destroyAllWindows()
```

التتبع متعدد الخيوط

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

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

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

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

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

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

!!! Example "Streaming for-loop with tracking"

```python
import threading
import cv2
from ultralytics import YOLO


def run_tracker_in_thread(filename, model, file_index):
    """
    يشغل ملف فيديو أو مصدر تيار الكاميرا بالتزامن مع YOLOv8 النموذج باستخدام تعدد الخيوط.

    هذه الوظيفة تلتقط إطارات الفيديو من ملف أو مصدر الكاميرا المعروف ، وتستخدم نموذج YOLOv8 لتتبع الكائنات.
    يعمل البرنامج في خيطه الخاص للمعالجة المتزامنة.

    Args:
        filename (str): مسار ملف الفيديو أو معرف مصدر كاميرا الويب / خارجية.
        model (obj): كائن نموذج YOLOv8.
        file_index (int): مؤشر لتحديد الملف بشكل فريد ، يُستخدم لأغراض العرض.

    ملاحظة:
        اضغط على 'q' لإنهاء نافذة عرض الفيديو.
    """
    video = cv2.VideoCapture(filename)  # قراءة ملف الفيديو

    while True:
        ret, frame = video.read()  # قراءة إطارات الفيديو

        # إنهاء الدورة إذا لم يتبقى إطارات على الفيديوين
        if not ret:
            break

        # تتبع كائنات في الإطارات إذا توفرت
        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

    # إطلاق مصدري الفيديو
    video.release()


# حمّل النماذج
model1 = YOLO('yolov8n.pt')
model2 = YOLO('yolov8n-seg.pt')

# حدد ملفات الفيديو للمتابعين
video_file1 = "path/to/video1.mp4"  # مسار ملف الفيديو ، 0 لكاميرا الويب
video_file2 = 0  # مسار ملف الفيديو ، 0 لكاميرا الويب ، 1 لكاميرا خارجية

# إنشاء خيوط المتابع
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)

# بدء خيوط المتابع
tracker_thread1.start()
tracker_thread2.start()

#  انتظر حتى ينتهي خيط المتابع
tracker_thread1.join()
tracker_thread2.join()

# Clean up and close windows
cv2.destroyAllWindows()
```

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

المساهمة في المتتبعون الجديدون

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

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

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

لنعزز معًا قدرات عملية التتبع لأجهزة Ultralytics YOLO 🙏!