رؤية YOLO 2026:

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

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

الدافع#

عند الاتصال بجهاز بعيد عبر SSH، لا يكون تصور نتائج الصور ممكنًا في العادة أو يتطلب نقل البيانات إلى جهاز محلي به واجهة رسومية GUI. يمكن للمحطة الطرفية المدمجة في 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 في بيئتك الافتراضية. هذه نسخة متفرعة (fork) من مكتبة PySixel التي لم تعد صاشحة للصيانة.

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

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot()  # (1)!
    1. راجع معلمات طريقة الرسم لمعرفة الوسائط الممكنة للاستخدام.
  4. الآن، استخدم OpenCV لتحويل بيانات np.ndarray إلى bytes. ثم استخدم io.BytesIO لإنشاء كائن "يشبه الملف (file-like)".

    import io
    
    import cv2
    
    # Results image as bytes
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # Image bytes as a file-like object
    mem_file = io.BytesIO(im_bytes)
    1. من الممكن استخدام امتدادات صور أخرى أيضاً.
    2. الكائن الوحيد المطلوب هو الكائن الذي يتم إرجاعه عند الفهرس 1.
  5. أنشئ مثيلاً لـ SixelWriter، ثم استخدم طريقة .draw() لرسم الصورة في المحطة الطرفية.

    from sixel import SixelWriter
    
    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)

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

YOLO inference results displayed in terminal

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

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

مثال كامل للكود#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Run inference on an image
results = model.predict(source="ultralytics/assets/bus.jpg")

# Plot inference results
plot = results[0].plot()  # (3)!

# Results image as bytes
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="ultralytics/assets/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. لا يزال دعم نظام Windows لرسومات المحطة الطرفية باستخدام sixel قيد التطوير. لمعرفة التحديثات حول توافق 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 هي نسخة متفرعة (fork) لمكتبة PySixel التي لم تعد تدار، وهي غلاف Python خفيف فوق Pillow (PIL). إذا فشلت import sixel أو أطلقت SixelWriter().draw() خطأً، فتأكد من تثبيت الحزمة في بيئتك الافتراضية النشطة، وتأكد من توفر Pillow، وراجع مستودع python-sixel على GitHub للاطلاع على ملاحظات خاصة بالمنصة. لمزيد من المعلومات حول إنشاء الصورة التي تمررها إلى draw()، راجع وثائق وضع التنبؤ.

التعليقات