كيفية عرض نتائج استدلال 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 # تحميل نموذج model = YOLO("yolo26n.pt") # تشغيل الاستدلال على صورة results = model.predict(source="https://ultralytics.com/images/bus.jpg") # ارسم نتائج الاستدلال plot = results[0].plot() # (1)!- راجع معلمات طريقة الرسم لمعرفة الوسيطات الممكنة للاستخدام.
-
استخدم الآن OpenCV لتحويل
np.ndarrayإلى بياناتbytes. ثم استخدمio.BytesIOلإنشاء كائن «يشبه الملف».import io import cv2 # صورة النتائج على هيئة بايتات im_bytes = cv2.imencode( ".png", # (1)! plot, )[1].tobytes() # (2)! # بايتات الصورة على هيئة كائن يشبه الملف mem_file = io.BytesIO(im_bytes)- يمكنك أيضًا استخدام امتدادات صور أخرى.
- لا نحتاج إلا إلى الكائن المُعاد عند الفهرس
1.
-
أنشئ مثيلًا من
SixelWriter، ثم استخدم الطريقة.draw()لرسم الصورة في الطرفية.from sixel import SixelWriter # إنشاء كائن كاتب sixel w = SixelWriter() # رسم صورة sixel في الطرفية w.draw(mem_file)
مثال على نتائج الاستدلال#
لم يُختبر بعد استخدام هذا المثال مع مقاطع الفيديو أو إطارات GIF المتحركة. جرّب ذلك على مسؤوليتك الخاصة.
مثال كامل على الشيفرة#
import io
import cv2
from sixel import SixelWriter
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n.pt")
# تشغيل الاستدلال على صورة
results = model.predict(source="https://ultralytics.com/images/bus.jpg")
# ارسم نتائج الاستدلال
plot = results[0].plot() # (3)!
# صورة النتائج على هيئة بايتات
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="https://ultralytics.com/images/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. ولا يزال دعم رسومات الطرفية باستخدام sixel في Windows قيد التطوير. للاطلاع على آخر المستجدات بشأن التوافق مع 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()، راجع وثائق وضع التنبؤ.