رؤية YOLO 2026:

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

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



Watch: Object Counting in Different Regions using Ultralytics YOLO | Ultralytics Solutions

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

  • عدة مناطق في تمريرة واحدة: قم بتمرير قاموس من المضلعات المسماة وسيحصل كل نطاق على عد مستقل مرسوم على الإطار، بحيث يغطي بث فيديو واحد كل منطقة تهتم بها.
  • التتبع المدمج: تشغيل الحل لاكتشاف YOLO26 وobject tracking داخلياً، لذلك لا توجد خطوط أنابيب تتبع منفصلة تحتاج إلى ربطها.
  • أعداد يمكنك قراءتها برمجياً: يُرجع كل إطار معالج كائن نتائج يحتوي على قاموس لأعداد المناطق، جاهز للوحات المعلومات، أو التنبيهات، أو التسجيل.

تطبيقات العالم الحقيقي#

التجزئةشوارع السوق
Ultralytics YOLO counting people inside drawn polygon regions in a retail storeUltralytics YOLO region counts overlaid on a crowded market street
عد الأشخاص في المناطق باستخدام 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يحدد عتبة Intersection over Union (IoU) لتصفية عمليات الكشف المتداخلة.
classeslistNoneيقوم بتصفية النتائج حسب الفهرس الفئة. على سبيل المثال، يقوم classes=[0, 2, 3] بتتبع الفئات المحددة فقط.
devicestrNoneيحدد الجهاز للاستدلال (مثل cpu أو cuda:0 أو 0). يسمح للمستخدمين بالاختيار بين وحدة المعالجة المركزية (CPU)، أو وحدة معالجة رسومية (GPU) محددة، أو أجهزة الحوسبة الأخرى لتنفيذ النموذج.

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

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

كيف يعمل عد المناطق#

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

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

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

يقوم كل استدعاء أيضاً بإرجاع كائن نتائج يحتوي سمته plot_im على الإطار المعلق بينما يربط قاموسه region_counts أسماء المناطق بأعدادها، حتى تتمكن من إدخال الأرقام في منطق التطبيق الخاص بك.

الخلاصة#

يقوم حل Ultralytics YOLO26 RegionCounter بمراقبة أعداد الكائنات الحية في أكبر عدد تحتاجه من المناطق المسماة باستخدام بأسطر قليلة من الكود. للمضي قدمًا، احسب عمليات عبور الحدود باستخدام object counting، أو تتبع الكائنات داخل منطقة واحدة باستخدام TrackZone، أو استكشف Ultralytics Solutions الأخرى.

الأسئلة الشائعة#

  • يقوم Ultralytics YOLO26 بحساب الكائنات في المناطق عن طريق تعقب كل كائن في الإطار واختبار ما إذا كان مركز مربع التحديد الخاص به يقع داخل كل مضلع محدد من قبل المستخدم. العد المعروض على المنطقة هو إشغالها الحالي لهذا الإطار، وليس إجماليًا تراكميًا. يتم سرد خيارات التكوين في قسم RegionCounter() Arguments.

  • قم بتمرير وسيطة region كقاموس يربط أسماء المناطق بقوائم النقاط، كما في main example:

    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() Arguments.

  • RegionCounter يوضح عدد الكائنات الموجودة داخل كل منطقة مضلعة في الإطار الحالي، بينما يقوم ObjectCounter بحساب الكائنات بشكل تراكمي أثناء عبورها لخط أو حدود منطقة، مع تتبع إجماليات الدخول والخروج. استخدم RegionCounter للإشغال الحي لمنطقة واحدة أو أكثر وObjectCounter لحساب الدخول والخروج؛ المناطق على شكل خط مدعومة بواسطة ObjectCounter فقط.

التعليقات