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

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

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

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


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

شاهد: Class-wise Object Counting using 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,
    classes_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,
    classes_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,
    classes_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,
    classes_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 الحجج

اسم نوع افتراضي وصف
classes_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 عرض نتائج تعقب الكائن


Created 2023-12-02, Updated 2024-06-10
Authors: glenn-jocher (14), IvorZhu331 (1), RizwanMunawar (6), AyushExel (1)

التعليقات