عدّ الكائنات في المناطق باستخدام Ultralytics YOLO26#
يتتبع حلّ RegionCounter في Ultralytics YOLO26 الكائنات عبر إطارات الفيديو، ويعدّ في كل إطار الكائنات التي يقع مركز صندوق الإحاطة الخاص بها داخل كل منطقة تحددها. تُرسم كل منطقة على الإطار ويُعرض فيها عددها المباشر، لتتمكن من مراقبة عدة نطاقات، مثل ممرات المتاجر أو مسارات الطرق أو مناطق الإنتاج، باستدعاء Python واحد أو أمر CLI واحد.
شاهد: عدّ الكائنات في مناطق مختلفة باستخدام Ultralytics YOLO | حلول Ultralytics
لماذا نستخدم العدّ حسب المناطق؟#
- عدة نطاقات في مرور واحد: مرّر قاموسًا من المضلعات المسماة، وسيُعرض على الإطار عدد مستقل لكل نطاق، بحيث يغطي تدفق فيديو واحد كل منطقة تهمك.
- التتبع مضمّن: ينفذ الحل اكتشاف YOLO26 وتتبع الكائنات داخليًا، فلا حاجة إلى إعداد مسار تتبع منفصل.
- أعداد قابلة للقراءة برمجيًا: يعيد كل إطار معالَج كائن نتائج يحتوي على قاموس بأعداد المناطق، جاهزًا للاستخدام في لوحات المعلومات أو التنبيهات أو التسجيل.
تطبيقات في العالم الحقيقي#
| البيع بالتجزئة | شوارع الأسواق |
|---|---|
![]() | ![]() |
| عدّ الأشخاص في المناطق باستخدام Ultralytics YOLO | عدّ الحشود في المناطق باستخدام Ultralytics YOLO |
كيفية عدّ الكائنات في المناطق باستخدام Ultralytics YOLO#
شغّل حلّ RegionCounter على مصدر فيديو من CLI أو Python. يمكن أن تكون المنطقة قائمة نقاط (لنطاق واحد) أو قاموسًا يربط أسماء النطاقات بقوائم النقاط. يعدّ مثال Python أدناه الكائنات في منطقتين مسمّاتين، ويكتب الإطارات المعالَجة في ملف فيديو ناتج:
# Run a region counting example
yolo solutions region show=True
# Pass a source video
yolo solutions region source="path/to/video.mp4"
# Pass a custom region
yolo solutions region region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"وسيطات RegionCounter()#
إليك جدولًا بمعاملات RegionCounter:
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
model | str | None | مسار ملف نموذج Ultralytics YOLO. |
region | list أو dict | None | النقاط التي تحدد منطقة الاهتمام، سواء أكانت قائمة من الصفوف (x, y) أم قاموسًا يربط أسماء المناطق بقوائم النقاط لمناطق متعددة (في RegionCounter فقط). عندما يكون None، تستخدم الحلول التي تتطلب منطقة إعدادًا افتراضيًا محددًا مسبقًا. |
line_width | int | 2 | سماكة الخط للصناديق والنقاط المفتاحية والعدادات التي يرسمها الحل. |
verbose | bool | True | يفعّل سجل الحل لكل إطار، ويشمل شكل المدخل وعدد الفئات وسرعة المعالجة. يظل استدعاء التتبع نفسه صامتًا دائمًا. |
يتيح حلّ RegionCounter استخدام معلمات تتبع الكائنات:
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | يحدد خوارزمية التتبع المطلوب استخدامها. الخيارات المضمنة: botsort.yaml، bytetrack.yaml، ocsort.yaml، deepocsort.yaml، fasttrack.yaml، tracktrack.yaml. |
conf | float | 0.25 | يضبط عتبة الثقة للكشوفات؛ إذ تسمح القيم الأقل بتتبع مزيد من الكائنات، لكنها قد تتضمن إيجابيات كاذبة. |
iou | float | 0.7 | يضبط عتبة التقاطع على الاتحاد (IoU) لتصفية الكشوفات المتداخلة. |
classes | list | None | يصفّي النتائج حسب فهرس الفئة. على سبيل المثال، لا يتتبع classes=[0, 2, 3] إلا الفئات المحددة. |
device | str | None | يحدد الجهاز المستخدم للاستدلال (مثل cpu أو cuda:0 أو 0). ويتيح للمستخدمين الاختيار بين CPU أو GPU محددة أو أجهزة حوسبة أخرى لتنفيذ النموذج. |
imgsz | int or tuple | 640 | حجم صورة الاستدلال المستهدف: عدد صحيح لصورة مربعة، أو زوج (height, width). تُعدّل الأبعاد وفقًا لخطوة النموذج. |
max_det | int | 300 | الحد الأقصى لعدد الكشوفات التي يُحتفظ بها لكل إطار قبل التتبع، ما يحد من عدد الكائنات التي يعالجها الحل في المشاهد الكثيفة. |
quantize | int or str | None | دقة الاستدلال: 16 (FP16) أو 32/غير محدد (FP32) لنماذج PyTorch وTorchScript؛ أما التنسيقات الأخرى فتحسب بالدقة التي يحددها الملف الاصطناعي وبيئة التشغيل. يحل هذا الوسيط محل العلامة half التي أُهمل استخدامها. |
بالإضافة إلى ذلك، تُدعم إعدادات التصور التالية:
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
show | bool | False | إذا كان True، يعرض الصور أو مقاطع الفيديو المشروحة في نافذة. يفيد ذلك في الحصول على ملاحظات مرئية فورية أثناء التطوير أو الاختبار. |
show_conf | bool | True | يعرض درجة الثقة لكل اكتشاف بجوار التسمية، ما يوضح مدى يقين النموذج بشأن كل اكتشاف. |
show_labels | bool | True | يعرض تسميات كل اكتشاف في المخرجات المرئية، ما يتيح فهم الكائنات المكتشفة فورًا. |
آلية عمل العدّ حسب المناطق#
يحوّل حلّ RegionCounter كل منطقة تمرّرها إلى مضلع يتكون من ثلاث نقاط على الأقل. وتصبح قائمة النقاط العادية نطاقًا واحدًا اسمه Region#01، بينما يحتفظ القاموس بأسماء النطاقات التي تحددها؛ ويُرسم كل نطاق بلون مستقل من لوحة ألوان Ultralytics. بعد ذلك، تُعالج كل صورة في ثلاث خطوات:
- يكتشف التتبّع في YOLO26 كل كائن في الإطار ويتتبعه
- لكل كائن متعقَّب، يحسب الحل مركز صندوق الإحاطة ويتحقق من المضلعات التي تحتويه
- يُعرض عدد كل منطقة عند مركزها، وتُصفّر الأعداد قبل الإطار التالي
نظرًا إلى أن الأعداد تبدأ من جديد في كل إطار، فإن الرقم الظاهر على المنطقة يمثل إشغالها الحالي، أي عدد الكائنات الموجودة فيها الآن، وليس مجموعًا تراكميًا. لعدّ الكائنات التي تعبر حدًا تراكميًا، استخدم حلّ ObjectCounter بدلًا من ذلك.
يعيد كل استدعاء أيضًا كائن نتائج، حيث تحتوي السمة plot_im على الإطار المشروح، ويعين القاموس region_counts أسماء المناطق إلى أعدادها، مما يتيح لك تمرير الأرقام إلى منطق تطبيقك.
الخلاصة#
يراقب حلّ RegionCounter في Ultralytics YOLO26 أعداد الكائنات المباشرة في أي عدد تحتاج إليه من النطاقات المسماة، باستخدام بضعة أسطر من التعليمات البرمجية. وللتوسع أكثر، عدّ عمليات عبور الحدود باستخدام عدّ الكائنات، أو تتبع الكائنات داخل نطاق واحد باستخدام TrackZone، أو استكشف حلول Ultralytics الأخرى.
الأسئلة الشائعة#
يعدّ Ultralytics YOLO26 الكائنات في المناطق من خلال تتبع كل كائن في الإطار والتحقق مما إذا كان مركز صندوق الإحاطة يقع داخل كل مضلع يحدده المستخدم. ويمثل العدد الظاهر على المنطقة إشغالها الحالي في ذلك الإطار، وليس مجموعًا تراكميًا. تُدرج خيارات التهيئة في قسم وسيطات
RegionCounter().مرّر الوسيطة
regionعلى شكل قاموس يربط أسماء النطاقات بقوائم النقاط، كما في المثال الرئيسي:from ultralytics import solutions region_points = { "region-01": [(50, 50), (250, 50), (250, 250), (50, 250)], "region-02": [(640, 640), (780, 640), (780, 720), (640, 720)], } regioncounter = solutions.RegionCounter(region=region_points, model="yolo26n.pt", show=True)يُرسم كل نطاق مسمى بلون مستقل ويُعرض له عدد منفصل.
يحمل الكائن الذي يعيده كل استدعاء لـ
regioncounter(im0)قاموسregion_countsالذي يربط أسماء المناطق بأعدادها، إلى جانبplot_im(الإطار المشروح) وtotal_tracks(عدد الكائنات المتعقبة). اطبع كائن النتائج لفحص جميع الحقول المتاحة.نعم. مرّر الوسيطة
classesمع فهارس الفئات المطلوب الاحتفاظ بها، مثلclasses=[0]لاحتساب الأشخاص فقط باستخدام نموذج مُدرَّب مسبقًا على COCO. توجد القائمة الكاملة للوسائط المتعلقة بالتتبّع في قسم وسائطRegionCounter().يعرض
RegionCounterعدد العناصر الموجودة داخل كل منطقة متعددة الأضلاع في الإطار الحالي، بينما يحتسب ObjectCounter العناصر تراكميًا عند عبورها خطًا أو حد منطقة، ويتتبع إجمالي الدخول والخروج. استخدمRegionCounterلمعرفة الإشغال الفوري لمنطقة واحدة أو أكثر، واستخدمObjectCounterلاحتساب مرات الدخول والخروج؛ ولا تدعم المناطق على شكل خطوط إلاObjectCounter.

