Skip to content

在终端中查看推理结果

终端中的Sixel图像示例

图片来自libsixel网站。

动机

当连接到远程机器时,通常无法可视化图像结果,或者需要将数据移动到具有GUI的本地设备。VSCode集成终端允许直接渲染图像。这是一个简短的演示,说明如何结合ultralytics使用预测结果

Warning

仅兼容Linux和MacOS。检查VSCode仓库,查看问题状态,或文档以获取有关Windows支持在终端中使用sixel查看图像的更新。

VSCode兼容的用于在集成终端中查看图像的协议是sixeliTerm。本指南将演示使用sixel协议。

过程

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

    "terminal.integrated.gpuAcceleration": "auto" # "auto"是默认值,也可以使用"on"
    "terminal.integrated.enableImages": false
    

    VSCode启用终端图像设置

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

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

    from ultralytics import YOLO
    
    # 加载模型
    model = YOLO("yolo11n.pt")
    
    # 对图像进行推理
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # 绘制推理结果
    plot = results[0].plot()  # (1)!
    
    1. 参见绘制方法参数以查看可用的参数。
  4. 现在,使用OpenCVnumpy.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)
    

示例推理结果

在终端中查看图像

Danger

使用此示例处理视频或动画GIF帧经过测试。请自行承担风险尝试。

完整代码示例

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# 加载模型
model = YOLO("yolo11n.pt")

# 对图像进行推理
results = model.predict(source="ultralytics/assets/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. 参见绘制方法参数以查看可用的参数。

Tip

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

常见问题

如何在macOS或Linux上的VSCode终端中查看YOLO推理结果?

要在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("yolo11n.pt")
    results = model.predict(source="path_to_image")
    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 协议目前仅在 Linux 和 macOS 上受支持,因为这些平台具有与 sixel 图形兼容的原生终端功能。Windows 对使用 sixel 的终端图形的支持仍在开发中。有关 Windows 兼容性的更新,请查看 VSCode 问题状态文档

如果我在 VSCode 终端中显示图像时遇到问题怎么办?

如果您在使用 sixel 在 VSCode 终端中显示图像时遇到问题:

  1. 确保在 VSCode 中启用了必要的设置:

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

    pip install sixel
    
  3. 检查您的图像数据转换和绘图代码是否有错误。例如:

    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)
    

如果问题仍然存在,请咨询 VSCode 仓库,并访问 绘图方法参数 部分以获取更多指导。

YOLO 能否使用 sixel 在终端中显示视频推理结果?

目前,使用 sixel 在终端中显示视频推理结果或动画 GIF 帧尚未经过测试,可能不受支持。我们建议从静态图像开始,并验证兼容性。尝试视频结果需自行承担风险,并注意性能限制。有关绘制推理结果的更多信息,请访问 预测模式 页面。

如何解决 python-sixel 库的问题?

要解决 python-sixel 库的问题:

  1. 确保该库已正确安装在您的虚拟环境中:

    pip install sixel
    
  2. 验证您是否具有必要的 Python 和系统依赖项。

  3. 参考 python-sixel GitHub 仓库 以获取更多文档和社区支持。

  4. 仔细检查您的代码,特别是 SixelWriter 的使用和图像数据转换步骤。

有关使用 YOLO 模型和 sixel 集成的进一步帮助,请参阅 导出预测模式 文档页面。


📅 Created 7 months ago ✏️ Updated 13 days ago

Comments