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

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

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

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

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

    pip install sixel
    
  2. Импортируй соответствующие библиотеки

    import io
    
    import cv2 as cv
    
    from ultralytics import YOLO
    from sixel import SixelWriter
    
  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 чтобы сделать "файлоподобный" объект.

    # Results image as bytes
    im_bytes = cv.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() метод, чтобы нарисовать изображение в терминале.

    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)
    

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

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

Опасность

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

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

import io

import cv2 as cv

from ultralytics import YOLO
from sixel import SixelWriter

# 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 = cv.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 чтобы "стереть" вид изображения в терминале.



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

Комментарии