如何在 VSCode 终端中查看 YOLO 推理结果#
来自 libsixel 网站的图片。
动机#
当通过 SSH 连接到远程机器时,通常无法正常可视化图片结果,或者需要将数据移动到具有 GUI 的本地设备。VSCode 集成终端可以直接渲染图片,因此你可以在运行推理的地方直接检查预测结果,而无需将文件复制回你的笔记本电脑。本指南将逐步介绍启用设置、连接代码以及解答常见问题。
仅兼容 Linux 和 macOS。查看 VSCode repository、检查 Issue status 或 documentation 以获取关于 Windows 支持的更新,从而在终端中使用 sixel 查看图片。
使用集成终端查看图片的 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库的一个分支。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 method parameters 以了解可使用的参数。
-
现在,使用 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 method parameters 以了解可使用的参数。
你可能需要使用 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="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 页面。
-
sixel 协议目前仅在 Linux 和 macOS 上受支持,因为这些平台具有与 sixel 图形兼容的原生终端功能。Windows 对使用 sixel 的终端图形的支持仍在开发中。有关 Windows 兼容性的更新,请检查 VSCode Issue status 和 documentation。
如果没有内容渲染,请按顺序完成这些检查:
- 确认
terminal.integrated.enableImages和terminal.integrated.gpuAcceleration都已启用(如Process 部分所示),然后重新启动集成终端以使设置生效。 - 验证
sixel是否已安装在运行脚本的同一虚拟环境中 (pip install sixel)。 - 在编码之前,确保
plot是一个有效的np.ndarray,因为如果图像为空或不是有效的数组,cv2.imencode会引发错误。有关results[0].plot()接受的值,请参见绘图方法参数。
如果问题仍然存在,请查阅 VSCode repository 了解终端图片支持状态。
- 确认
目前尚未测试在终端中使用 sixel 显示视频推理结果或动画 GIF 帧,可能不受支持。我们建议从静态图片开始并验证兼容性。尝试视频结果需自行承担风险,请注意性能限制。有关绘制推理结果的更多信息,请访问predict mode 页面。
sixel包是不再维护的PySixel库的一个分支,并且是对 Pillow (PIL) 的一个轻量级 Python 包装器。如果import sixel失败或SixelWriter().draw()引发错误,请确认该包已安装到你当前活动的虚拟环境中,确保 Pillow 可用,并查看python-sixel GitHub 仓库了解平台特定说明。有关生成传递给draw()的图像的更多信息,请参见预测模式文档。