Перейти к содержанию

Просмотр результатов инференса в терминале

Пример Sixel изображения в терминале

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

Мотивация

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

Предупреждение

Совместимо только с Linux и MacOS. Проверьте репозиторий VSCode, проверьте статус Issue, или документацию для получения обновлений о поддержке 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 включить настройку изображений терминала

  2. Установите python-sixel библиотеку в вашей виртуальной среде. Это форк от PySixel библиотеки, которая больше не поддерживается.

    pip install sixel
    
  3. Загрузите модель и выполните инференс, затем постройте результаты и сохраните в переменной. Подробнее об аргументах инференса и работе с результатами можно узнать на странице режима predict.

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo11n.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 чтобы создать "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. Также можно использовать другие расширения изображений.
    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)
    

Пример результатов инференса

Просмотр изображения в терминале

Осторожно

Использование этого примера с видео или анимированными GIF-кадрами не было протестировано. Попытка на свой страх и риск.

Полный пример кода

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.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 чтобы "стереть" изображение в терминале.

Часто задаваемые вопросы

Как я могу просмотреть результаты инференса 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("yolo11n.pt")
    results = model.predict(source="path_to_image")
    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.

Почему протокол sixel работает только на Linux и macOS?

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

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

Если у вас возникли проблемы с отображением изображений в терминале VSCode с использованием sixel:

  1. Убедитесь, что в VSCode включены необходимые настройки:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Проверьте установку библиотеки sixel:

    pip install sixel
    
  3. Проверьте код преобразования данных изображения и построения графиков на наличие ошибок. Например:

    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)
    

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

Может ли YOLO отображать результаты инференса видео в терминале с использованием sixel?

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

Как я могу устранить неполадки с python-sixel библиотекой?

Чтобы устранить неполадки с python-sixel библиотекой:

  1. Убедитесь, что библиотека правильно установлена в вашей виртуальной среде:

    pip install sixel
    
  2. Убедитесь, что у вас есть необходимые зависимости python и системы.

  3. Обратитесь к репозиторию python-sixel GitHub для получения дополнительной документации и поддержки сообщества.

  4. Перепроверьте свой код на наличие потенциальных ошибок, особенно использование SixelWriter и этапы преобразования данных изображения.

Для получения дополнительной помощи по работе с моделями YOLO и интеграции sixel см. страницы документации export и режима predict.



📅 Создано 1 год назад ✏️ Обновлено 7 дней назад

Комментарии