كيفية عرض نتائج استدلال YOLO في طرفية VSCode#
صورة من موقع libsixel.
الدافع#
عند الاتصال بجهاز بعيد عبر SSH، لا يكون تصور نتائج الصور بالطريقة المعتادة ممكنًا، أو يتطلب نقل البيانات إلى جهاز محلي مزود بواجهة رسومية. يمكن للطرفية المدمجة في 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في بيئتك الافتراضية. هذه المكتبة عبارة عن فرع من مكتبة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)
مثال على نتائج الاستدلال#
لم يُختبر استخدام هذا المثال مع مقاطع الفيديو أو إطارات 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عبارة عن فرع من مكتبةPySixelغير الخاضعة للصيانة، وهي غلاف Python رفيع حول Pillow (PIL). إذا فشلimport sixelأو أطلقSixelWriter().draw()خطأً، فتحقق من تثبيت الحزمة في بيئتك الافتراضية النشطة، وتأكد من توفر Pillow، وراجع مستودع python-sixel على GitHub للاطلاع على الملاحظات الخاصة بالمنصة. لمزيد من المعلومات حول إنشاء الصورة التي تمررها إلىdraw()، راجع وثائق وضع التنبؤ.