Meet YOLO26: next-gen vision AI.

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

Sixel example of image in Terminal

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

Link to this sectionМотивация#

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

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

Совместимо только с Linux и macOS. Проверяй репозиторий VSCode, статус запросов или документацию для получения обновлений о поддержке Windows для отображения изображений в терминале с помощью sixel.

Протоколы, совместимые с VSCode для просмотра изображений во встроенном терминале, — это sixel и iTerm. В этом руководстве будет продемонстрировано использование протокола sixel.

Link to this sectionПроцесс#

  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. Загрузи модель и выполни инференс, затем отрисуй результаты и сохрани их в переменную. Подробнее об аргументах инференса и работе с результатами читай на странице predict mode.

    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)

Link to this sectionПример результатов инференса#

YOLO inference results displayed in terminal

Видео и GIF не тестировались

Использование этого примера с видео или анимированными кадрами 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. Можно использовать и другие расширения изображений.
  2. Нужен только объект, возвращаемый по индексу 1.
  3. Ознакомься с параметрами метода plot, чтобы узнать о доступных аргументах.

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

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

Link to this sectionFAQ#

Link to this sectionКак просматривать результаты инференса YOLO в терминале VSCode на macOS или Linux?#

Чтобы просматривать результаты инференса 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)

Дополнительные подробности ищи на странице predict mode.

Link to this sectionПочему протокол sixel работает только в Linux и macOS?#

Протокол sixel в настоящее время поддерживается только в Linux и macOS, так как эти платформы имеют встроенные возможности терминала, совместимые с графикой sixel. Поддержка графики в терминале Windows с помощью sixel все еще находится в разработке. Чтобы следить за обновлениями совместимости с Windows, проверяй статус запроса VSCode и документацию.

Link to this sectionЧто делать, если возникают проблемы с отображением изображений в терминале VSCode?#

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

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

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

Link to this sectionМожет ли YOLO отображать результаты инференса видео в терминале с помощью sixel?#

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

Link to this sectionКак устранить неполадки с библиотекой python-sixel?#

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

Комментарии