YOLO Vision 2026:

Как просматривать результаты инференса YOLO в терминале VSCode#

Изображение с сайта libsixel.

Мотивация#

При подключении к удаленной машине по SSH визуализация результатов в виде изображений обычно невозможна или требует пересылки данных на локальное устройство с графическим интерфейсом. Встроенный терминал VSCode может отображать изображения напрямую, поэтому ты можешь изучать результаты предсказаний прямо там, где запускаешь инференс, без необходимости копировать файлы обратно на ноутбук. В этом руководстве описано включение настройки, подключение кода, а также даны ответы на часто задаваемые вопросы.

Только для Linux и macOS

Совместимо только с 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. Смотри параметры метода plot, чтобы узнать доступные аргументы.
  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 не тестировались

Использование этого примера с видео или анимированными кадрами 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. Смотри параметры метода plot, чтобы узнать доступные аргументы.

Очистка изображения

Тебе может потребоваться использовать clear, чтобы «стереть» изображение в терминале.

FAQ#

  • Чтобы просматривать результаты инференса 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="ultralytics/assets/bus.jpg")
      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. Поддержка графики в терминале с использованием sixel для Windows все еще находится в разработке. Обновления о совместимости с Windows проверяй в трекере проблем VSCode и документации.

  • Если ничего не отображается, выполни следующие проверки по порядку:

    1. Убедись, что включены как terminal.integrated.enableImages, так и terminal.integrated.gpuAcceleration, как показано в разделе Процесс, а затем перезапусти встроенный терминал, чтобы настройки вступили в силу.
    2. Убедись, что sixel установлена в том же виртуальном окружении, в котором запускается твой скрипт (pip install sixel).
    3. Убедись перед кодированием, что plot является допустимым массивом np.ndarray, так как cv2.imencode вызывает ошибку, если изображение пустое или не является допустимым массивом. См. параметры метода plot для значений, принимаемых results[0].plot().

    Если проблемы не исчезнут, обратись к репозиторию VSCode для проверки статуса поддержки изображений в терминале.

  • Отображение результатов инференса видео или анимированных кадров GIF с помощью sixel в терминале в настоящее время не тестировалось и может не поддерживаться. Мы рекомендуем начать со статических изображений и проверить совместимость. Попытка получить результаты для видео осуществляется на твой страх и риск с учетом ограничений производительности. Для получения дополнительной информации об отрисовке результатов инференса посети страницу режима предсказания.

  • Пакет sixel является форком неподдерживаемой библиотеки PySixel и представляет собой тонкую обертку на Python над Pillow (PIL). Если import sixel завершается сбоем или SixelWriter().draw() вызывает ошибку, убедись, что пакет установлен в твое активное виртуальное окружение, убедись в доступности Pillow и проверь репозиторий python-sixel на GitHub на наличие заметок для конкретной платформы. Подробнее о создании изображения, передаваемого в draw(), читай в документации по режиму предсказания.

Комментарии