Link to this sectionكيفية عرض نتائج استدلال YOLO في طرفية VSCode#
صورة من موقع libsixel.
Link to this sectionالدافع#
عند الاتصال بجهاز بعيد عبر SSH، لا يمكن تصور نتائج الصور بالطريقة العادية أو يتطلب الأمر نقل البيانات إلى جهاز محلي يحتوي على واجهة رسومية (GUI). يمكن للطرفية المدمجة في VSCode عرض الصور مباشرة، مما يتيح لك فحص نتائج التنبؤ في نفس المكان الذي تقوم فيه بتشغيل الاستدلال، دون الحاجة إلى نسخ الملفات مرة أخرى إلى حاسوبك المحمول. يرشدك هذا الدليل خلال تفعيل الإعداد، وربط الكود، والإجابة على الأسئلة الشائعة.
متوافق فقط مع Linux و macOS. تحقق من مستودع VSCode، أو راجع حالة المشكلة، أو التوثيق للحصول على تحديثات حول دعم Windows لعرض الصور في الطرفية باستخدام sixel.
البروتوكولات المتوافقة مع VSCode لعرض الصور باستخدام الطرفية المدمجة هي sixel و iTerm. سيوضح هذا الدليل استخدام بروتوكول sixel.
Link to this sectionالعملية#
-
أولاً، يجب عليك تفعيل إعدادات
terminal.integrated.enableImagesوterminal.integrated.gpuAccelerationفي VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
ثبت مكتبة
python-sixelفي بيئتك الافتراضية. هذا هو تفرع لمكتبةPySixelالتي لم تعد تحت الصيانة.pip install sixel -
قم بتحميل نموذج وتنفيذ الاستدلال، ثم ارسم النتائج وخزنها في متغير. تعرف على المزيد حول وسائط الاستدلال والعمل مع النتائج في صفحة وضع التنبؤ.
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)!- راجع معاملات طريقة الرسم للاطلاع على الوسائط الممكن استخدامها.
-
الآن، استخدم 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الذي يتم إرجاعه هو الوحيد المطلوب.
-
أنشئ نسخة من
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مثال على نتائج الاستدلال#
لم يتم اختبار استخدام هذا المثال مع مقاطع الفيديو أو إطارات 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الذي يتم إرجاعه هو الوحيد المطلوب. - راجع معاملات طريقة الرسم للاطلاع على الوسائط الممكن استخدامها.
قد تحتاج إلى استخدام clear لـ "مسح" عرض الصورة في الطرفية.
Link to this sectionالأسئلة الشائعة#
Link to this sectionكيف يمكنني عرض نتائج استدلال YOLO في طرفية VSCode على macOS أو Linux؟#
لعرض نتائج استدلال YOLO في طرفية VSCode على macOS أو Linux، اتبع الخطوات التالية:
-
قم بتفعيل إعدادات VSCode الضرورية:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
ثبت مكتبة sixel:
pip install sixel -
قم بتحميل نموذج YOLO الخاص بك وشغل الاستدلال:
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="ultralytics/assets/bus.jpg") plot = results[0].plot() -
حوّل صورة نتيجة الاستدلال إلى بايتات واعرضها في الطرفية:
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؟#
إذا لم يتم عرض أي شيء، قم بإجراء هذه الفحوصات بالترتيب:
- تأكد من تفعيل كل من
terminal.integrated.enableImagesوterminal.integrated.gpuAccelerationكما هو موضح في قسم العملية، ثم أعد تشغيل الطرفية المدمجة حتى تصبح الإعدادات سارية المفعول. - تحقق من تثبيت
sixelفي نفس البيئة الافتراضية التي يعمل فيها سكربتك (pip install sixel). - تأكد من أن
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()، راجع توثيق وضع التنبؤ.