Просмотр результатов выводов в терминале
Изображение с сайта libsixel.
Мотивация
При подключении к удаленной машине визуализация результатов обработки изображений обычно невозможна или требует переноса данных на локальное устройство с графическим интерфейсом. Интегрированный терминал VSCode позволяет напрямую визуализировать изображения. Это краткая демонстрация того, как использовать его в сочетании с ultralytics
с результаты прогнозирования.
Внимание
Совместим только с Linux и MacOS. Проверьте Репозиторий VSCode, проверьте Состояние проблемы, или документация для получения обновлений о поддержке Windows для просмотра изображений в терминале с помощью sixel
.
Для просмотра изображений с помощью встроенного терминала используются следующие протоколы, совместимые с VSCode sixel
и iTerm
. Это руководство демонстрирует использование sixel
протокол.
Процесс
-
Сначала необходимо включить настройки
terminal.integrated.enableImages
иterminal.integrated.gpuAcceleration
в VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Установите
python-sixel
библиотека в вашей виртуальной среде. Это вилка изPySixel
библиотека, которая больше не поддерживается.pip install sixel
-
Загрузите модель и выполните вывод, затем постройте график результатов и сохраните их в переменной. Подробнее об аргументах для вывода и работе с результатами можно узнать на странице режима прогнозирования.
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)!
- Смотрите параметры метода plot, чтобы увидеть возможные аргументы для использования.
-
Теперь используйте 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
который возвращается, необходим.
-
Создайте
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
который возвращается, необходим. - Смотрите параметры метода plot, чтобы увидеть возможные аргументы для использования.
Наконечник
Вам может понадобиться clear
чтобы "стереть" изображение в терминале.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Как просмотреть результаты анализа YOLO в терминале VSCode на macOS или Linux?
Чтобы просмотреть результаты анализа YOLO в терминале VSCode на macOS или Linux, выполните следующие действия:
-
Включите необходимые настройки VSCode:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto"
-
Установите библиотеку sixel:
pip install sixel
-
Загрузите модель YOLO и запустите вывод:
from ultralytics import YOLO model = YOLO("yolo11n.pt") results = model.predict(source="path_to_image") plot = results[0].plot()
-
Преобразуйте изображение результатов вывода в байты и выведите его на экран терминала:
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:
-
Убедитесь, что необходимые настройки в VSCode включены:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto"
-
Проверьте установку библиотеки Sixel:
pip install sixel
-
Проверьте код преобразования данных изображения и черчения на наличие ошибок. Например:
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
библиотека:
-
Убедитесь, что библиотека правильно установлена в вашей виртуальной среде:
pip install sixel
-
Убедитесь, что у вас есть необходимый Python и системные зависимости.
-
Обратитесь к репозиториюpython -sixel GitHub для получения дополнительной документации и поддержки сообщества.
-
Дважды проверьте свой код на наличие потенциальных ошибок, в частности, использование
SixelWriter
и этапы преобразования данных изображения.
Дополнительную информацию о работе с моделями YOLO и интеграции Sixel см. на страницах документации по экспорту и режиму прогнозирования.