Просмотр результатов инференса в терминале
Изображение с веб-сайта libsixel.
Мотивация
При подключении к удаленной машине визуализация результатов изображения обычно невозможна или требует перемещения данных на локальное устройство с графическим интерфейсом. Интегрированный терминал VSCode позволяет напрямую отображать изображения. Это краткая демонстрация того, как использовать это в сочетании с ultralytics
с результатами предсказания.
Предупреждение
Совместимо только с Linux и MacOS. Проверьте репозиторий VSCode, проверьте статус Issue, или документацию для получения обновлений о поддержке 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
-
Загрузите модель и выполните инференс, затем постройте результаты и сохраните в переменной. Подробнее об аргументах инференса и работе с результатами можно узнать на странице режима 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)!
- См. параметры метода plot, чтобы увидеть возможные аргументы для использования.
-
Теперь используйте 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
, который возвращается.
-
Создайте
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)
Для получения дополнительной информации посетите страницу режима predict.
Почему протокол sixel работает только на Linux и macOS?
Протокол sixel в настоящее время поддерживается только в Linux и macOS, поскольку эти платформы имеют собственные возможности терминала, совместимые с графикой sixel. Поддержка графики терминала с использованием sixel в Windows все еще находится в разработке. Для получения обновлений о совместимости с Windows, проверьте статус Issue 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 и посетите раздел параметры метода plot для получения дополнительных указаний.
Может ли YOLO отображать результаты инференса видео в терминале с использованием sixel?
Отображение результатов инференса видео или кадров анимированных GIF-файлов с использованием sixel в терминале в настоящее время не протестировано и может не поддерживаться. Мы рекомендуем начать со статических изображений и проверить совместимость. Попытка получить результаты видео на свой страх и риск, помня об ограничениях производительности. Для получения дополнительной информации о построении графиков результатов инференса посетите страницу режима predict.
Как я могу устранить неполадки с python-sixel
библиотекой?
Чтобы устранить неполадки с python-sixel
библиотекой:
-
Убедитесь, что библиотека правильно установлена в вашей виртуальной среде:
pip install sixel
-
Убедитесь, что у вас есть необходимые зависимости python и системы.
-
Обратитесь к репозиторию python-sixel GitHub для получения дополнительной документации и поддержки сообщества.
-
Перепроверьте свой код на наличие потенциальных ошибок, особенно использование
SixelWriter
и этапы преобразования данных изображения.
Для получения дополнительной помощи по работе с моделями YOLO и интеграции sixel см. страницы документации export и режима predict.