Ultralytics YOLO27:
Get Started

كيفية عرض نتائج استدلال YOLO في طرفية VSCode#

صورة من موقع libsixel.

الدافع#

عند الاتصال بجهاز بعيد عبر SSH، يتعذر عادةً عرض نتائج الصور بصريًا، أو يتطلب ذلك نقل البيانات إلى جهاز محلي مزود بواجهة رسومية. تستطيع الطرفية المدمجة في VSCode عرض الصور مباشرةً، لذا يمكنك فحص نتائج التنبؤ في المكان الذي تُجري فيه الاستدلال، دون نسخ الملفات إلى حاسوبك المحمول. يشرح هذا الدليل كيفية تفعيل الإعداد، وتهيئة الشيفرة، ويجيب عن الأسئلة الشائعة.

لنظامي Linux وmacOS فقط

متوافق مع Linux وmacOS فقط. راجع مستودع VSCode، أو تحقّق من حالة المشكلة، أو راجع الوثائق لمعرفة آخر المستجدات بشأن دعم Windows لعرض الصور في الطرفية باستخدام sixel.

البروتوكولات المتوافقة مع VSCode لعرض الصور باستخدام الطرفية المدمجة هي sixel وiTerm. سيوضح هذا الدليل كيفية استخدام بروتوكول sixel.

الخطوات#

  1. أولًا، يجب تفعيل الإعدادين terminal.integrated.enableImages وterminal.integrated.gpuAcceleration في VSCode.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": true

    VSCode enable terminal images setting

  2. ثبّت مكتبة python-sixel في بيئتك الافتراضية. هذه المكتبة تفرّع من مكتبة PySixel التي لم تعد تُصان.

    pip install sixel
  3. حمّل نموذجًا ونفّذ الاستدلال، ثم ارسم النتائج واحفظها في متغير. اطّلع على مزيد من المعلومات حول وسيطات الاستدلال والتعامل مع النتائج في صفحة وضع التنبؤ.

    from ultralytics import YOLO
    
    # ⁨تحميل نموذج⁩
    model = YOLO("yolo26n.pt")
    
    # ⁨تشغيل الاستدلال على صورة⁩
    results = model.predict(source="https://ultralytics.com/images/bus.jpg")
    
    # ⁨ارسم نتائج الاستدلال⁩
    plot = results[0].plot()  # (1)!
    1. راجع معلمات طريقة الرسم لمعرفة الوسيطات الممكنة للاستخدام.
  4. استخدم الآن OpenCV لتحويل np.ndarray إلى بيانات bytes. ثم استخدم io.BytesIO لإنشاء كائن «يشبه الملف».

    import io
    
    import cv2
    
    # ⁨صورة النتائج على هيئة بايتات⁩
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # ⁨بايتات الصورة على هيئة كائن يشبه الملف⁩
    mem_file = io.BytesIO(im_bytes)
    1. يمكنك أيضًا استخدام امتدادات صور أخرى.
    2. لا نحتاج إلا إلى الكائن المُعاد عند الفهرس 1.
  5. أنشئ مثيلًا من SixelWriter، ثم استخدم الطريقة .draw() لرسم الصورة في الطرفية.

    from sixel import SixelWriter
    
    # ⁨إنشاء كائن كاتب sixel⁩
    w = SixelWriter()
    
    # ⁨رسم صورة sixel في الطرفية⁩
    w.draw(mem_file)

مثال على نتائج الاستدلال#

YOLO inference results displayed in terminal

لم تُختبر مقاطع الفيديو وصور GIF

لم يُختبر بعد استخدام هذا المثال مع مقاطع الفيديو أو إطارات GIF المتحركة. جرّب ذلك على مسؤوليتك الخاصة.

مثال كامل على الشيفرة#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# ⁨تحميل نموذج⁩
model = YOLO("yolo26n.pt")

# ⁨تشغيل الاستدلال على صورة⁩
results = model.predict(source="https://ultralytics.com/images/bus.jpg")

# ⁨ارسم نتائج الاستدلال⁩
plot = results[0].plot()  # (3)!

# ⁨صورة النتائج على هيئة بايتات⁩
im_bytes = cv2.imencode(
    ".png",  # (1)!
    plot,
)[1].tobytes()  # (2)!

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
  1. يمكنك أيضًا استخدام امتدادات صور أخرى.
  2. لا نحتاج إلا إلى الكائن المُعاد عند الفهرس 1.
  3. راجع معلمات طريقة الرسم لمعرفة الوسيطات الممكنة للاستخدام.
مسح الصورة

قد تحتاج إلى استخدام clear «لمسح» عرض الصورة في الطرفية.

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

  • لعرض نتائج استدلال YOLO في طرفية VSCode على macOS أو Linux، اتبع الخطوات التالية:

    1. فعّل إعدادات VSCode اللازمة:

      "terminal.integrated.enableImages": true
      "terminal.integrated.gpuAcceleration": "auto"
    2. ثبّت مكتبة sixel:

      pip install sixel
    3. حمّل نموذج YOLO وشغّل الاستدلال:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      results = model.predict(source="https://ultralytics.com/images/bus.jpg")
      plot = results[0].plot()
    4. حوّل صورة نتيجة الاستدلال إلى بايتات واعرضها في الطرفية:

      import io
      
      import cv2
      from sixel import SixelWriter
      
      im_bytes = cv2.imencode(".png", plot)[1].tobytes()
      mem_file = io.BytesIO(im_bytes)
      SixelWriter().draw(mem_file)

    لمزيد من التفاصيل، تفضل بزيارة صفحة وضع التنبؤ.

  • لا يتوفر دعم بروتوكول sixel حاليًا إلا على Linux وmacOS، لأن هذين النظامين الأساسيين يشتملان على إمكانات أصلية في الطرفية متوافقة مع رسومات sixel. ولا يزال دعم رسومات الطرفية باستخدام sixel في Windows قيد التطوير. للاطلاع على آخر المستجدات بشأن التوافق مع Windows، راجع حالة المشكلة في VSCode والوثائق.

  • إذا لم يظهر شيء، فنفّذ عمليات التحقق التالية بالترتيب:

    1. تأكد من تفعيل كلٍّ من terminal.integrated.enableImages وterminal.integrated.gpuAcceleration، كما هو موضح في قسم الخطوات، ثم أعد تشغيل الطرفية المدمجة لتطبيق الإعدادات.
    2. تحقّق من تثبيت sixel في البيئة الافتراضية نفسها التي يعمل فيها النص البرمجي (pip install sixel).
    3. تأكد من أن plot هو np.ndarray صالح قبل ترميزه، إذ يُصدر cv2.imencode خطأً إذا كانت الصورة فارغة أو لم تكن مصفوفةً صالحة. راجع معلمات طريقة الرسم لمعرفة القيم التي يقبلها results[0].plot().

    إذا استمرت المشكلات، فراجع مستودع VSCode لمعرفة حالة دعم الصور في الطرفية.

  • لم يُختبر حاليًا عرض نتائج استدلال الفيديو أو إطارات GIF المتحركة باستخدام sixel في الطرفية، وقد لا يكون مدعومًا. نوصي بالبدء بالصور الثابتة والتحقق من التوافق. جرّب عرض نتائج الفيديو على مسؤوليتك الخاصة، مع مراعاة قيود الأداء. لمزيد من المعلومات حول رسم نتائج الاستدلال، تفضل بزيارة صفحة وضع التنبؤ.

  • حزمة sixel هي تفرّع من مكتبة PySixel التي لم تعد تُصان، وهي غلاف رقيق بلغة Python حول Pillow (PIL). إذا تعذّر تشغيل import sixel أو أصدرت SixelWriter().draw() خطأً، فتحقّق من تثبيت الحزمة في بيئتك الافتراضية النشطة، وتأكد من توفر Pillow، وراجع مستودع python-sixel على GitHub للاطلاع على الملاحظات الخاصة بالمنصات. لمزيد من المعلومات حول إنشاء الصورة التي تمررها إلى draw()، راجع وثائق وضع التنبؤ.

التعليقات