YOLO Vision 2026:

如何在 VSCode 终端中查看 YOLO 推理结果#

Sixel example of image in Terminal

来自 libsixel 网站的图片。

动机#

当通过 SSH 连接到远程机器时,通常无法正常可视化图片结果,或者需要将数据移动到具有 GUI 的本地设备。VSCode 集成终端可以直接渲染图片,因此你可以在运行推理的地方直接检查预测结果,而无需将文件复制回你的笔记本电脑。本指南将逐步介绍启用设置、连接代码以及解答常见问题

仅限 Linux 和 macOS

仅兼容 Linux 和 macOS。查看 VSCode repository、检查 Issue statusdocumentation 以获取关于 Windows 支持的更新,从而在终端中使用 sixel 查看图片。

使用集成终端查看图片的 VSCode 兼容协议为 sixeliTerm。本指南将演示 sixel 协议的使用。

流程#

  1. 首先,你必须在 VSCode 中启用设置 terminal.integrated.enableImagesterminal.integrated.gpuAcceleration

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": true

    VSCode enable terminal images setting

  2. 在你的虚拟环境中安装 python-sixel 库。这是已不再维护的 PySixel 库的一个分支

    pip install sixel
  3. 加载模型并执行推理,然后绘制结果并将其存储在变量中。有关推理参数和处理结果的更多信息,请参阅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)!
    1. 查看plot method parameters 以了解可使用的参数。
  4. 现在,使用 OpenCVnp.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. 也可以使用其他图像扩展名。
    2. 只需要返回的索引为 1 的对象。
  5. 创建一个 SixelWriter 实例,然后使用 .draw() 方法在终端中绘制图片。

    from sixel import SixelWriter
    
    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)

推理结果示例#

YOLO inference results displayed in terminal

视频和 GIF 未经测试

使用此示例处理视频或动画 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. 也可以使用其他图像扩展名。
  2. 只需要返回的索引为 1 的对象。
  3. 查看plot method parameters 以了解可使用的参数。

清除图像

你可能需要使用 clear 来“擦除”终端中的图片视图。

常见问题解答#

  • 要在 macOS 或 Linux 的 VSCode 终端中查看 YOLO 推理结果,请按照以下步骤操作:

    1. 启用必要的 VSCode 设置:

      "terminal.integrated.enableImages": true
      "terminal.integrated.gpuAcceleration": "auto"
    2. 安装 sixel 库:

      pip install sixel
    3. 加载你的 YOLO 模型并运行推理:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      results = model.predict(source="ultralytics/assets/bus.jpg")
      plot = results[0].plot()
    4. 将推理结果图像转换为字节并在终端中显示:

      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 statusdocumentation

  • 如果没有内容渲染,请按顺序完成这些检查:

    1. 确认 terminal.integrated.enableImagesterminal.integrated.gpuAcceleration 都已启用(如Process 部分所示),然后重新启动集成终端以使设置生效。
    2. 验证 sixel 是否已安装在运行脚本的同一虚拟环境中 (pip install sixel)。
    3. 在编码之前,确保 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() 的图像的更多信息,请参见预测模式文档。

评论