Meet YOLO26: next-gen vision AI.

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

Sixel example of image in Terminal

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

Link to this sectionالدافع#

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

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

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

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

Link to this sectionالعملية#

  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
    
    # 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 لإنشاء كائن "يشبه الملف".

    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)

Link to this sectionمثال على نتائج الاستدلال#

YOLO inference results displayed in terminal

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

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

Link to this sectionمثال كامل للكود#

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 لـ "مسح" عرض الصورة في الطرفية.

Link to this sectionالأسئلة الشائعة#

Link to this sectionكيف يمكنني عرض نتائج استدلال YOLO في طرفية VSCode على macOS أو Linux؟#

لعرض نتائج استدلال 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)

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

Link to this sectionلماذا يعمل بروتوكول sixel فقط على Linux و macOS؟#

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

Link to this sectionماذا لو واجهت مشكلات في عرض الصور في طرفية VSCode؟#

إذا لم يتم عرض أي شيء، قم بإجراء هذه الفحوصات بالترتيب:

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

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

Link to this sectionهل يمكن لـ YOLO عرض نتائج استدلال الفيديو في الطرفية باستخدام sixel؟#

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

Link to this sectionكيف يمكنني استكشاف الأخطاء وإصلاحها في مكتبة python-sixel؟#

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

التعليقات