Ultralytics YOLO27:

عدّ الكائنات في المناطق باستخدام 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عدّ الحشود في المناطق باستخدام Ultralytics YOLO

كيفية عدّ الكائنات في المناطق باستخدام Ultralytics YOLO#

شغّل حل RegionCounter على مصدر فيديو من CLI أو Python. يمكن أن تكون المنطقة قائمة نقاط (نطاقًا واحدًا) أو قاموسًا يربط أسماء النطاقات بقوائم النقاط. يعدّ مثال Python أدناه الكائنات في منطقتين مسمّاتين ويكتب الإطارات المعالجة في ملف فيديو ناتج:

عدّ المناطق باستخدام Ultralytics YOLO
# 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:

الوسيطةالنوعالافتراضيالوصف
modelstrNoneالمسار إلى ملف نموذج Ultralytics YOLO.
regionlist أو dictNoneالنقاط التي تحدد منطقة الاهتمام، إما على شكل قائمة من صفوف (x, y) أو قاموس يربط أسماء المناطق بقوائم النقاط لمناطق متعددة (RegionCounter فقط). عندما تكون قيمة None، تعود الحلول التي تتطلب منطقة إلى إعداد افتراضي محدد مسبقًا.
line_widthint2سُمك الخط للصناديق والنقاط الرئيسية والأعداد التي يرسمها الحل.
verboseboolTrueيمكّن سجل الحل لكل إطار، والذي يتضمن شكل الإدخال وأعداد الفئات وسرعة المعالجة. ويظل استدعاء التتبع نفسه صامتًا دائمًا.

يتيح الحل RegionCounter استخدام معلمات تتبّع الكائنات:

الوسيطةالنوعالافتراضيالوصف
trackerstr'botsort.yaml'يحدد خوارزمية التتبع المراد استخدامها. الخيارات المضمنة: botsort.yaml وbytetrack.yaml وocsort.yaml وdeepocsort.yaml وfasttrack.yaml وtracktrack.yaml.
conffloat0.25يضبط عتبة الثقة للاكتشافات؛ إذ تتيح القيم الأقل تتبع مزيد من الكائنات، لكنها قد تتضمن إيجابيات كاذبة.
ioufloat0.7يضبط عتبة التقاطع على الاتحاد (IoU) لتصفية الاكتشافات المتداخلة.
classeslistNoneيصفّي النتائج حسب فهرس الفئة. على سبيل المثال، لا يتتبع classes=[0, 2, 3] سوى الفئات المحددة.
devicestrNoneيحدد الجهاز المستخدم للاستدلال (مثل cpu أو cuda:0 أو 0). ويتيح للمستخدمين الاختيار بين CPU أو GPU محدد أو أجهزة حوسبة أخرى لتنفيذ النموذج.
imgszint or tuple640حجم صورة الاستدلال المستهدفة: عدد صحيح لشكل مربع أو زوج (height, width). يتم ضبط الأشكال لتتناسب مع خطوة النموذج.
max_detint300الحد الأقصى لعدد الاكتشافات المحتفظ بها لكل إطار قبل التتبع، مما يحد من الكائنات التي يعالجها الحل في المشاهد المزدحمة.
quantizeint or strNoneدقة الاستدلال: 16 (FP16) أو 32/غير محدد (FP32) لنموذجي PyTorch وTorchScript؛ بينما تحسب التنسيقات الأخرى بالدقة التي تحددها ملفاتها ومحيط تشغيلها. يحل محل علامة half المهملة.

بالإضافة إلى ذلك، تُدعَم إعدادات التصوير المرئي التالية:

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

آلية عمل عدّ المناطق#

يحوّل حل RegionCounter كل منطقة تمررها إلى مضلع يتكون من ثلاث نقاط على الأقل لكل منطقة. وتصبح قائمة النقاط العادية منطقة واحدة باسم Region#01، بينما يحافظ القاموس على أسماء نطاقاتك الخاصة؛ وتُرسم كل منطقة بلونها الخاص من لوحة ألوان Ultralytics. ثم تتم معالجة كل إطار في ثلاث خطوات:

  1. يكتشف YOLO26 كل كائن في الإطار ويتتبّعه
  2. لكل كائن متتبَّع، يحسب الحل مركز صندوق الإحاطة ويتحقق من المضلعات المناطقية التي تحتويه
  3. يُرسم عدد كل منطقة عند مركزها، وتُصفّر الأعداد قبل الإطار التالي

نظرًا إلى أن الأعداد تبدأ من جديد في كل إطار، فإن الرقم الظاهر على المنطقة يمثل إشغالها الحالي، أي عدد الكائنات الموجودة داخلها الآن، وليس إجماليًا تراكميًا. لعدّ الكائنات التي تعبر حدًا تراكميًا، استخدم حل 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.

التعليقات