عدّ الكائنات في المناطق باستخدام Ultralytics YOLO26#
يتتبّع حل RegionCounter في Ultralytics YOLO26 الكائنات عبر إطارات الفيديو، ويعدّ في كل إطار الكائنات التي يقع مركز صندوق إحاطتها داخل كل منطقة تحددها. تُرسم كل منطقة على الإطار مع عددها المباشر، ما يتيح لك مراقبة عدة نطاقات، مثل ممرات المتاجر أو مسارات الطرق أو مناطق الإنتاج، باستخدام استدعاء واحد في Python أو أمر CLI.
Watch: Object Counting in Different Regions using Ultralytics YOLO | Ultralytics Solutions
لماذا تستخدم عدّ الكائنات في المناطق؟#
- عدة نطاقات في تمريرة واحدة: مرّر قاموسًا من المضلعات المسماة، وستحصل كل منطقة على عدد مستقل مرسوم على الإطار، بحيث يغطي تدفق فيديو واحد كل منطقة تهمك.
- التتبّع مضمّن: ينفّذ الحل اكتشاف 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 | 'botsort.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.

