如何在 VSCode 终端中查看 YOLO 推理结果#
图片来自 libsixel 网站。
动机#
通过 SSH 连接到远程机器时,通常无法直接可视化图像结果,或者需要将数据传到带图形界面的本地设备上。VSCode 集成终端可以直接渲染图像,因此你无需将文件复制回笔记本电脑,就能在运行推理的位置查看预测结果。本指南将介绍如何启用设置、配置代码,并解答常见问题。
VSCode 集成终端支持通过 sixel 和 iTerm 协议查看图像。本指南将演示如何使用 sixel 协议。
流程#
-
首先,你必须在 VSCode 中启用设置
terminal.integrated.enableImages和terminal.integrated.gpuAcceleration。"terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
在虚拟环境中安装
python-sixel库。它是PySixel库的一个 fork,而原库已停止维护。pip install sixel -
加载模型并执行推理,然后绘制结果并将其存储在变量中。有关推理参数和结果处理的更多信息,请参阅预测模式页面。
from ultralytics import YOLO # 加载模型 model = YOLO("yolo26n.pt") # 对图像进行推理 results = model.predict(source="https://ultralytics.com/images/bus.jpg") # 绘制推理结果 plot = results[0].plot() # (1)!- 请参阅绘图方法参数,了解可用参数。
-
现在,使用 OpenCV 将
np.ndarray转换为bytes数据。然后使用io.BytesIO创建一个类似文件的对象。import io import cv2 # 将推理结果图像转换为字节 im_bytes = cv2.imencode( ".png", # (1)! plot, )[1].tobytes() # (2)! # 将图像字节转换为类似文件的对象 mem_file = io.BytesIO(im_bytes)- 也可以使用其他图像扩展名。
- 只需要返回的索引为
1的对象。
-
创建一个
SixelWriter实例,然后使用.draw()方法在终端中绘制图像。from sixel import SixelWriter # 创建 sixel 写入器对象 w = SixelWriter() # 在终端中绘制 sixel 图像 w.draw(mem_file)
推理结果示例#
尚未测试将此示例用于视频或动画 GIF 帧的情况。请自行承担风险并尝试。
完整代码示例#
import io
import cv2
from sixel import SixelWriter
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo26n.pt")
# 对图像进行推理
results = model.predict(source="https://ultralytics.com/images/bus.jpg")
# 绘制推理结果
plot = results[0].plot() # (3)!
# 将推理结果图像转换为字节
im_bytes = cv2.imencode(
".png", # (1)!
plot,
)[1].tobytes() # (2)!
mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)- 也可以使用其他图像扩展名。
- 只需要返回的索引为
1的对象。 - 请参阅绘图方法参数,了解可用参数。
你可能需要使用 clear 来“擦除”终端中显示的图像。
常见问题#
若要在 macOS 或 Linux 的 VSCode 终端中查看 YOLO 推理结果,请按以下步骤操作:
-
启用必要的 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="https://ultralytics.com/images/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)
更多详情请访问预测模式页面。
-
目前,sixel 协议仅支持 Linux 和 macOS,因为这两个平台具备与 sixel 图形兼容的原生终端功能。Windows 对使用 sixel 显示终端图形的支持仍在开发中。有关 Windows 兼容性的最新信息,请查看 VSCode 问题状态和文档。
如果没有任何内容显示,请按顺序完成以下检查:
- 确认
terminal.integrated.enableImages和terminal.integrated.gpuAcceleration均已启用,如流程部分所示,然后重启集成终端以使设置生效。 - 确认
sixel已安装在脚本运行所用的同一虚拟环境中(pip install sixel)。 - 编码前,请确保
plot是有效的np.ndarray,因为如果图像为空或不是有效数组,cv2.imencode就会报错。有关results[0].plot()接受的值,请参阅绘图方法参数。
如果问题仍然存在,请查看 VSCode 仓库,了解终端图像支持状态。
- 确认
目前尚未测试使用 sixel 在终端中显示视频推理结果或动画 GIF 帧,因此可能不受支持。建议先使用静态图像并验证兼容性。尝试显示视频结果需自行承担风险,同时请注意性能限制。有关绘制推理结果的更多信息,请访问预测模式页面。
sixel包是已停止维护的PySixel库的一个 fork,也是 Pillow (PIL) 的轻量级 Python 封装。如果import sixel失败或SixelWriter().draw()报错,请确认该包已安装在当前启用的虚拟环境中,确保 Pillow 可用,并查看 python-sixel GitHub 仓库中的平台相关说明。有关如何生成传递给draw()的图像,请参阅预测模式文档。