Link to this sectionКак просматривать результаты инференса YOLO в терминале VSCode#
Изображение с сайта libsixel.
Link to this sectionМотивация#
При подключении к удаленной машине по SSH визуализация изображений стандартными средствами невозможна или требует передачи данных на локальное устройство с графическим интерфейсом. Встроенный терминал VSCode может отображать изображения напрямую, что позволяет просматривать результаты предсказаний прямо там, где ты запускаешь инференс, не копируя файлы обратно на ноутбук. Это руководство поможет тебе настроить процесс, подключить код и даст ответы на часто задаваемые вопросы.
Совместимо только с Linux и macOS. Проверяй репозиторий VSCode, статус запросов или документацию для получения обновлений о поддержке Windows для отображения изображений в терминале с помощью sixel.
Протоколы, совместимые с VSCode для просмотра изображений во встроенном терминале, — это sixel и iTerm. В этом руководстве будет продемонстрировано использование протокола sixel.
Link to this sectionПроцесс#
-
Сначала тебе нужно включить настройки
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 mode.
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)
Link to this sectionПример результатов инференса#
Использование этого примера с видео или анимированными кадрами GIF не тестировалось. Попробуй на свой страх и риск.
Link to this sectionПолный пример кода#
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, чтобы «стереть» изображение в терминале.
Link to this sectionFAQ#
Link to this sectionКак просматривать результаты инференса 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="ultralytics/assets/bus.jpg") 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 mode.
Link to this sectionПочему протокол sixel работает только в Linux и macOS?#
Протокол sixel в настоящее время поддерживается только в Linux и macOS, так как эти платформы имеют встроенные возможности терминала, совместимые с графикой sixel. Поддержка графики в терминале Windows с помощью sixel все еще находится в разработке. Чтобы следить за обновлениями совместимости с Windows, проверяй статус запроса VSCode и документацию.
Link to this sectionЧто делать, если возникают проблемы с отображением изображений в терминале VSCode?#
Если ничего не отображается, выполни следующие проверки по порядку:
- Убедись, что обе настройки
terminal.integrated.enableImagesиterminal.integrated.gpuAccelerationвключены, как показано в разделе Процесс, а затем перезапусти интегрированный терминал, чтобы настройки вступили в силу. - Проверь, что
sixelустановлен в том же виртуальном окружении, в котором выполняется твой скрипт (pip install sixel). - Убедись, что
plotявляется допустимымnp.ndarrayперед кодированием, так какcv2.imencodeвыдает ошибку, если изображение пустое или не является допустимым массивом. См. параметры метода plot для значений, которые принимаетresults[0].plot().
Если проблемы не исчезают, обратись к репозиторию VSCode за информацией о статусе поддержки изображений в терминале.
Link to this sectionМожет ли YOLO отображать результаты инференса видео в терминале с помощью sixel?#
Отображение результатов инференса видео или анимированных кадров GIF с помощью sixel в терминале на данный момент не тестировалось и может не поддерживаться. Мы рекомендуем начать со статических изображений и проверить совместимость. Пробуй обрабатывать видео на свой страх и риск, учитывая ограничения производительности. Для получения дополнительной информации о построении результатов инференса посети страницу predict mode.
Link to this sectionКак устранить неполадки с библиотекой python-sixel?#
Пакет sixel — это форк заброшенной библиотеки PySixel, представляющий собой легкую Python-обертку над Pillow (PIL). Если import sixel выдает ошибку или SixelWriter().draw() вызывает ошибку, подтверди, что пакет установлен в активном виртуальном окружении, убедись, что Pillow доступен, и проверь GitHub-репозиторий python-sixel для получения примечаний по конкретным платформам. Подробнее о создании изображения, которое ты передаешь в draw(), читай в документации predict mode.