Перейти к содержимому

Просмотр результатов умозаключений в терминале

Сиксель пример изображения в терминале

Изображение с сайта 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": false
    

    Настройка изображений терминала для включения VSCode

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

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

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolov8n.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, чтобы преобразовать numpy.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)
    

Пример результатов умозаключений

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

Опасность

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

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

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.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("yolov8n.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 ты найдешь на страницах документации по экспорту и режиму прогнозирования.



Создано 2024-03-09, Обновлено 2024-07-05
Авторы: glenn-jocher (6), IvorZhu331 (1), Burhan-Q (1)

Комментарии