Просмотр результатов инференса в терминале
Изображение с веб-сайта 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("yolo26n.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, чтобы создать «файлоподобный» объект.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("yolo26n.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, чтобы «стереть» изображение в терминале.
Часто задаваемые вопросы (FAQ)
Как я могу просматривать результаты инференса 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("yolo26n.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 и посети раздел параметры метода plot для получения дополнительных рекомендаций.
Может ли YOLO отображать результаты инференса видео в терминале с помощью sixel?
Отображение результатов инференса видео или анимированных кадров GIF с помощью sixel в терминале в настоящее время не протестировано и может не поддерживаться. Мы рекомендуем начать со статических изображений и проверить совместимость. Пробуй использовать видеорезультаты на свой страх и риск, учитывая ограничения производительности. Для получения дополнительной информации об отрисовке результатов инференса посети страницу режима предсказания.
Как я могу устранить неполадки с библиотекой python-sixel?
Для устранения неполадок с библиотекой python-sixel:
-
Убедись, что библиотека правильно установлена в твоем виртуальном окружении:
pip install sixel -
Проверь наличие необходимых зависимостей Python и системы.
-
Обратись к GitHub-репозиторию python-sixel за дополнительной документацией и поддержкой сообщества.
-
Дважды проверь свой код на наличие потенциальных ошибок, особенно использование
SixelWriterи этапы преобразования данных изображения.
За дополнительной помощью по работе с моделями YOLO и интеграцией sixel обратись к страницам документации экспорт и режим предсказания.