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

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

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

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

Мотивация

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

Внимание

Совместим только с 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

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

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

    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()  
    
  4. Теперь используйте OpenCV преобразовать numpy.ndarray на bytes данные. Затем используйте io.BytesIO чтобы создать "файлоподобный" объект.

    import io
    
    import cv2
    
    # Results image as bytes
    im_bytes = cv2.imencode(
        ".png",  
        plot,
    )[1].tobytes()  
    
    # Image bytes as a file-like object
    mem_file = io.BytesIO(im_bytes)
    
  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()  

# Results image as bytes
im_bytes = cv2.imencode(
    ".png",  
    plot,
)[1].tobytes()  

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)

Наконечник

Вам может понадобиться 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)
    

Более подробную информацию можно найти на странице режима прогнозирования.

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

В настоящее время протокол sixel поддерживается только в Linux и macOS, поскольку эти платформы имеют встроенные терминальные возможности, совместимые с графикой sixel. Поддержка Windows для терминальной графики с использованием sixel все еще находится в разработке. Для получения обновленной информации о совместимости с Windows проверьте статус выпуска 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 и посетите раздел параметров метода построения для получения дополнительных указаний.

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

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

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

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

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

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

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

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

Дополнительную информацию о работе с моделями YOLO и интеграции Sixel см. на страницах документации по экспорту и режиму прогнозирования.

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

Комментарии