Ultralytics YOLO27:
Get Started

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

يتتبع حلّ RegionCounter في Ultralytics YOLO26 الكائنات عبر إطارات الفيديو، ويعدّ في كل إطار الكائنات التي يقع مركز صندوق الإحاطة الخاص بها داخل كل منطقة تحددها. تُرسم كل منطقة على الإطار ويُعرض فيها عددها المباشر، لتتمكن من مراقبة عدة نطاقات، مثل ممرات المتاجر أو مسارات الطرق أو مناطق الإنتاج، باستدعاء Python واحد أو أمر CLI واحد.



شاهد: عدّ الكائنات في مناطق مختلفة باستخدام Ultralytics YOLO | حلول Ultralytics

لماذا نستخدم العدّ حسب المناطق؟#

  • عدة نطاقات في مرور واحد: مرّر قاموسًا من المضلعات المسماة، وسيُعرض على الإطار عدد مستقل لكل نطاق، بحيث يغطي تدفق فيديو واحد كل منطقة تهمك.
  • التتبع مضمّن: ينفذ الحل اكتشاف 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'tracktrack.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.

التعليقات