كيفية عرض نتائج استدلال YOLO في طرفية VSCode#
صورة من موقع libsixel.
الدافع#
عند الاتصال بجهاز بعيد عبر SSH، لا يكون تصور نتائج الصور ممكنًا في العادة أو يتطلب نقل البيانات إلى جهاز محلي به واجهة رسومية GUI. يمكن للمحطة الطرفية المدمجة في VSCode عرض الصور مباشرة، لذا يمكنك فحص نتائج التنبؤ تمامًا حيث تشغل الاستدلال، دون الحاجة إلى نسخ الملفات مرة أخرى إلى حاسوبك المحمول. يوضح هذا الدليل خطوات تفعيل الإعداد، وربط الكود، ويجيب عن الأسئلة الشائعة.
متوافق فقط مع Linux و macOS. تحقق من مستودع VSCode، أو تحقق من حالة المشكلة، أو الوثائق لمعرفة التحديثات حول دعم نظام Windows لعرض الصور في المحطة الطرفية باستخدام sixel.
البروتوكولات المتوافقة مع VSCode لعرض الصور باستخدام المحطة الطرفية المدمجة هي sixel و iTerm. سيوضح هذا الدليل استخدام بروتوكول sixel.
العملية#
-
أولاً، يجب عليك تفعيل الإعدادين
terminal.integrated.enableImagesوterminal.integrated.gpuAccelerationفي VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
قم بتثبيت مكتبة
python-sixelفي بيئتك الافتراضية. هذه نسخة متفرعة (fork) من مكتبة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لإنشاء كائن "يشبه الملف (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.
-
أنشئ مثيلاً لـ
SixelWriter، ثم استخدم طريقة.draw()لرسم الصورة في المحطة الطرفية.from sixel import SixelWriter # Create sixel writer object w = SixelWriter() # Draw the sixel image in the terminal w.draw(mem_file)
مثال على نتائج الاستدلال#
لم يتم اختبار استخدام هذا المثال مع مقاطع الفيديو أو إطارات 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. - راجع معلمات طريقة الرسم لمعرفة الوسائط الممكنة للاستخدام.
قد تحتاج إلى استخدام clear "لمسح" عرض الصورة في المحطة الطرفية.
الأسئلة الشائعة#
لعرض نتائج استدلال 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)
لمزيد من التفاصيل، تفضل بزيارة صفحة وضع التنبؤ.
-
بروتوكول sixel مدعوم حاليًا فقط على Linux و macOS لأن هذه المنصات تمتلك قدرات محطة طرفية أصلية متوافقة مع رسومات sixel. لا يزال دعم نظام Windows لرسومات المحطة الطرفية باستخدام sixel قيد التطوير. لمعرفة التحديثات حول توافق Windows، تحقق من حالة مشكلة VSCode و الوثائق.
إذا لم يتم عرض أي شيء، قم بإجراء هذه الفحوصات بالترتيب:
- تأكد من تمكين كل من
terminal.integrated.enableImagesوterminal.integrated.gpuAcceleration، كما هو موضح في قسم العملية، ثم أعد تشغيل المحطة الطرفية المدمجة لتسري الإعدادات. - تحقق من تثبيت
sixelفي نفس البيئة الافتراضية التي يعمل فيها النص البرمجي الخاص بك (pip install sixel). - تأكد من أن
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()، راجع وثائق وضع التنبؤ.