Ultralytics YOLO27:
Get Started

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

图片来自 libsixel 网站。

动机#

通过 SSH 连接到远程机器时,通常无法直接可视化图像结果,或者需要将数据传到带图形界面的本地设备上。VSCode 集成终端可以直接渲染图像,因此你无需将文件复制回笔记本电脑,就能在运行推理的位置查看预测结果。本指南将介绍如何启用设置、配置代码,并解答常见问题。

仅适用于 Linux 和 macOS

仅兼容 Linux 和 macOS。请查看 VSCode 仓库、问题状态或文档,了解 Windows 支持终端图像显示的最新进展;使用 sixel 查看终端图像。

VSCode 集成终端支持通过 sixel 和 iTerm 协议查看图像。本指南将演示如何使用 sixel 协议。

流程#

  1. 首先,你必须在 VSCode 中启用设置 terminal.integrated.enableImages 和 terminal.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 库的一个 fork,而原库已停止维护。

    pip install sixel
  3. 加载模型并执行推理,然后绘制结果并将其存储在变量中。有关推理参数和结果处理的更多信息,请参阅预测模式页面。

    from ultralytics import YOLO
    
    # 加载模型
    model = YOLO("yolo26n.pt")
    
    # 对图像进行推理
    results = model.predict(source="https://ultralytics.com/images/bus.jpg")
    
    # 绘制推理结果
    plot = results[0].plot()  # (1)!
    1. 请参阅绘图方法参数,了解可用参数。
  4. 现在,使用 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. 也可以使用其他图像扩展名。
    2. 只需要返回的索引为 1 的对象。
  5. 创建一个 SixelWriter 实例,然后使用 .draw() 方法在终端中绘制图像。

    from sixel import SixelWriter
    
    # 创建 sixel 写入器对象
    w = SixelWriter()
    
    # 在终端中绘制 sixel 图像
    w.draw(mem_file)

推理结果示例#

YOLO inference results displayed in terminal

视频和 GIF 未经测试

尚未测试将此示例用于视频或动画 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. 也可以使用其他图像扩展名。
  2. 只需要返回的索引为 1 的对象。
  3. 请参阅绘图方法参数,了解可用参数。
清除图像

你可能需要使用 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="https://ultralytics.com/images/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)

    更多详情请访问预测模式页面。

  • 目前,sixel 协议仅支持 Linux 和 macOS,因为这两个平台具备与 sixel 图形兼容的原生终端功能。Windows 对使用 sixel 显示终端图形的支持仍在开发中。有关 Windows 兼容性的最新信息,请查看 VSCode 问题状态和文档。

  • 如果没有任何内容显示,请按顺序完成以下检查:

    1. 确认 terminal.integrated.enableImages 和 terminal.integrated.gpuAcceleration 均已启用,如流程部分所示,然后重启集成终端以使设置生效。
    2. 确认 sixel 已安装在脚本运行所用的同一虚拟环境中(pip install sixel)。
    3. 编码前,请确保 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() 的图像,请参阅预测模式文档。

评论