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

عد الكائنات باستخدام Ultralytics YOLOv8

ما هو عد الكائنات؟

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


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

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

مزايا عد الكائنات؟

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

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

السوقيات تربيه الاحياء المائيه
عد حزم الحزام الناقل باستخدام Ultralytics YOLOv8 عد الأسماك في البحر باستخدام Ultralytics YOLOv8
عد حزم الحزام الناقل باستخدام Ultralytics YOLOv8 عد الأسماك في البحر باستخدام Ultralytics YOLOv8

عد الكائنات باستخدام YOLOv8 مثل

import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Define region points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Define region points as a polygon with 5 points
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360), (20, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=region_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Define line points
line_points = [(20, 400), (1080, 400)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO, solutions

model = YOLO("yolov8n.pt")
cap = cv2.VideoCapture("path/to/video/file.mp4")
assert cap.isOpened(), "Error reading video file"
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

line_points = [(20, 400), (1080, 400)]  # line or region points
classes_to_count = [0, 2]  # person and car classes for count

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init Object Counter
counter = solutions.ObjectCounter(
    view_img=True,
    reg_pts=line_points,
    names=model.names,
    draw_tracks=True,
    line_thickness=2,
)

while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)

    im0 = counter.start_counting(im0, tracks)
    video_writer.write(im0)

cap.release()
video_writer.release()
cv2.destroyAllWindows()
المنطقة متحركة

يمكنك تحريك المنطقة في أي مكان في الإطار من خلال النقر على حوافها

جدال ObjectCounter

إليك الجدول الذي يحتوي على ObjectCounter الحجج

اسم نوع افتراضي وصف
names dict None قاموس أسماء الفئات.
reg_pts list [(20, 400), (1260, 400)] قائمة النقاط التي تحدد منطقة العد.
count_reg_color tuple (255, 0, 255) لون RGB لمنطقة العد.
count_txt_color tuple (0, 0, 0) لون RGB لنص العد.
count_bg_color tuple (255, 255, 255) لون RGB لخلفية نص العد.
line_thickness int 2 سمك الخط للمربعات المحيطة.
track_thickness int 2 سُمك خطوط المسار.
view_img bool False ضع علامة للتحكم في ما إذا كنت تريد عرض دفق الفيديو أم لا.
view_in_counts bool True علامة للتحكم في ما إذا كان سيتم عرض التعداد الداخلي على دفق الفيديو أم لا.
view_out_counts bool True علامة للتحكم في ما إذا كان سيتم عرض الأعداد الخارجة على دفق الفيديو.
draw_tracks bool False علم للتحكم فيما إذا كان سيتم رسم مسارات الكائن أم لا.
track_color tuple None لون RGB للمسارات.
region_thickness int 5 سُمك منطقة عد الكائن.
line_dist_thresh int 15 عتبة المسافة الإقليدية لعداد الخطوط.
cls_txtdisplay_gap int 50 اعرض الفجوة بين كل عدد من الفصول.

الحجج model.track

اسم نوع افتراضي وصف
source im0 None الدليل المصدر للصور أو مقاطع الفيديو
persist bool False المسارات المستمرة بين الإطارات
tracker str botsort.yaml طريقة التتبع "bytetrack" أو "botsort"
conf float 0.3 عتبة الثقة
iou float 0.5 عتبة IOU
classes list None تصفية النتائج حسب الفئة ، أي الفئات = 0 ، أو الفئات = [0،2،3]
verbose bool True عرض نتائج تعقب الكائن

الأسئلة المتداولة

كيف يمكنني عد الكائنات في مقطع فيديو باستخدام Ultralytics YOLOv8 ؟

لعد الكائنات في مقطع فيديو باستخدام Ultralytics YOLOv8 ، يمكنك اتباع الخطوات التالية:

  1. استيراد المكتبات اللازمة (cv2, ultralytics).
  2. قم بتحميل نموذج YOLOv8 المدربين مسبقاً.
  3. حدد منطقة العد (على سبيل المثال، مضلع، خط، إلخ).
  4. قم بإعداد التقاط الفيديو وتهيئة عداد الكائنات.
  5. قم بمعالجة كل إطار لتتبع الأجسام وإحصائها داخل المنطقة المحددة.

إليك مثال بسيط للعد في منطقة ما:

import cv2

from ultralytics import YOLO, solutions


def count_objects_in_region(video_path, output_video_path, model_path):
    """Count objects in a specific region within a video."""
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)
    assert cap.isOpened(), "Error reading video file"
    w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
    region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
    counter = solutions.ObjectCounter(
        view_img=True, reg_pts=region_points, names=model.names, draw_tracks=True, line_thickness=2
    )

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or video processing has been successfully completed.")
            break
        tracks = model.track(im0, persist=True, show=False)
        im0 = counter.start_counting(im0, tracks)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolov8n.pt")

استكشف المزيد من التكوينات والخيارات في قسم عد الكائنات.

ما هي مزايا استخدام Ultralytics YOLOv8 لعد الكائنات؟

يوفر استخدام Ultralytics YOLOv8 لعدّ الكائنات العديد من المزايا:

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

للحصول على تطبيقات واقعية وأمثلة على التعليمات البرمجية، قم بزيارة قسم مزايا عد الكائنات.

كيف يمكنني حساب فئات محددة من الكائنات باستخدام Ultralytics YOLOv8 ؟

لحساب فئات محددة من الكائنات باستخدام Ultralytics YOLOv8 ، تحتاج إلى تحديد الفئات التي تهتم بها أثناء مرحلة التتبع. فيما يلي مثال Python :

import cv2

from ultralytics import YOLO, solutions


def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
    """Count specific classes of objects in a video."""
    model = YOLO(model_path)
    cap = cv2.VideoCapture(video_path)
    assert cap.isOpened(), "Error reading video file"
    w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
    line_points = [(20, 400), (1080, 400)]
    video_writer = cv2.VideoWriter(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
    counter = solutions.ObjectCounter(
        view_img=True, reg_pts=line_points, names=model.names, draw_tracks=True, line_thickness=2
    )

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or video processing has been successfully completed.")
            break
        tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)
        im0 = counter.start_counting(im0, tracks)
        video_writer.write(im0)

    cap.release()
    video_writer.release()
    cv2.destroyAllWindows()


count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolov8n.pt", [0, 2])

في هذا المثال classes_to_count=[0, 2]مما يعني أنه يحسب كائنات الفئة 0 و 2 (على سبيل المثال، شخص وسيارة).

لماذا يجب استخدام YOLOv8 بدلاً من نماذج اكتشاف الكائنات الأخرى لتطبيقات الوقت الحقيقي؟

Ultralytics YOLOv8 العديد من المزايا مقارنةً بنماذج اكتشاف الأجسام الأخرى مثل Faster R-CNN و SSD والإصدارات السابقة YOLO :

  1. السرعة والفعالية: YOLOv8 يوفر إمكانات معالجة في الوقت الفعلي، مما يجعله مثاليًا للتطبيقات التي تتطلب استدلالاً عالي السرعة، مثل المراقبة والقيادة الذاتية.
  2. الدقة: يوفر دقة فائقة في مهام اكتشاف الأجسام وتتبعها، مما يقلل من عدد النتائج الإيجابية الخاطئة ويحسن موثوقية النظام بشكل عام.
  3. سهولة التكامل: YOLOv8 يوفر التكامل السلس مع مختلف المنصات والأجهزة، بما في ذلك الأجهزة المحمولة والأجهزة المتطورة، وهو أمر بالغ الأهمية لتطبيقات الذكاء الاصطناعي الحديثة.
  4. المرونة: يدعم مهام مختلفة مثل اكتشاف الكائنات وتجزئتها وتتبعها بنماذج قابلة للتكوين لتلبية متطلبات حالة استخدام محددة.

راجع Ultralytics YOLOv8 Documentation للتعمق أكثر في ميزاته ومقارنات الأداء.

هل يمكنني استخدام YOLOv8 للتطبيقات المتقدمة مثل تحليل الحشود وإدارة حركة المرور؟

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

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

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



تم الإنشاء 2023-12-02، تم التحديث 2024-07-14
المؤلفون: RizwanMunawar (6)، Glenn-jocher (15)، IvorZhu331 (1)، AyushExel (1)

التعليقات