عرض نتائج الاستدلال في الطرفية

Sixel example of image in Terminal

صورة من موقع libsixel

الدافع

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

تحذير

متوافق فقط مع 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
    
    # 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)

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

YOLO inference results displayed in terminal

خطر

لم يتم اختبار استخدام هذا المثال مع مقاطع الفيديو أو إطارات 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؟

لعرض نتائج استدلال 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="path_to_image")
    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 مدعوم حالياً فقط على Linux و macOS لأن هذه المنصات تمتلك إمكانيات طرفية أصلية متوافقة مع رسومات sixel. لا يزال دعم رسومات الطرفية باستخدام sixel على Windows قيد التطوير. للحصول على تحديثات حول توافق Windows، تحقق من حالة مشكلة VSCode والتوثيق.

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

إذا واجهت مشاكل في عرض الصور في طرفية VSCode باستخدام sixel:

  1. تأكد من تفعيل الإعدادات الضرورية في VSCode:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
  2. تحقق من تثبيت مكتبة sixel:

    pip install sixel
  3. تحقق من كود تحويل بيانات الصورة والرسم الخاص بك بحثاً عن أخطاء. على سبيل المثال:

    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)

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

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

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

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

لاستكشاف أخطاء مكتبة python-sixel وإصلاحها:

  1. تأكد من تثبيت المكتبة بشكل صحيح في بيئتك الافتراضية:

    pip install sixel
  2. تحقق من أن لديك تبعيات Python والنظام الضرورية.

  3. راجع مستودع GitHub الخاص بـ python-sixel للحصول على توثيق إضافي ودعم المجتمع.

  4. تحقق جيداً من الكود الخاص بك بحثاً عن أخطاء محتملة، وتحديداً استخدام SixelWriter وخطوات تحويل بيانات الصورة.

للحصول على مزيد من المساعدة حول العمل مع نماذج YOLO وتكامل sixel، راجع صفحات توثيق التصدير ووضع التنبؤ.

التعليقات