在VSCode终端中渲染图像

通常情况下,远程机器上无法直接可视化图像结果,或者需要将数据移动到具有图形用户界面的本地设备。VSCode集成终端允许直接渲染图像。本文将展示如何结合ultralytics和预测结果使用这一功能。

警告

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

过程

首先,必须在VSCode中启用以下设置:terminal.integrated.enableImages和terminal.integrated.gpuAcceleration。

{ "terminal.integrated.gpuAcceleration": "auto", "terminal.integrated.enableImages": false }

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

pip install sixel

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

from ultralytics import YOLO # 加载模型 model = YOLO("yolo11n.pt") # 在图像上运行推理 results = model.predict(source="ultralytics/assets/bus.jpg") # 绘制推理结果 plot = results[0].plot()

现在,使用OpenCV将numpy.ndarray转换为字节数据。然后使用io.BytesIO创建一个“文件类”对象。

import io import cv2 # 结果图像作为字节 im_bytes = cv2.imencode(".png", plot)[1].tobytes() # 图像字节作为文件类对象 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("yolo11n.pt") # 在图像上运行推理 results = model.predict(source="ultralytics/assets/bus.jpg") # 绘制推理结果 plot = results[0].plot() # 结果图像作为字节 im_bytes = cv2.imencode(".png", plot)[1].tobytes() mem_file = io.BytesIO(im_bytes) w = SixelWriter() w.draw(mem_file)

也可以使用其他图像扩展名。

只需要返回的对象索引1。

有关如何使用参数,请参见绘制方法参数,以查看可以使用的参数。

常见问题解答

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

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

启用必要的VSCode设置:

{ "terminal.integrated.enableImages": true, "terminal.integrated.gpuAcceleration": "auto" }

安装sixel库:

pip install sixel

加载YOLO模型并运行推理:

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

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

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

确保VSCode中的必要设置已启用:

{ "terminal.integrated.enableImages": true, "terminal.integrated.gpuAcceleration": "auto" }

验证sixel库的安装:

pip install sixel

检查图像数据转换和绘图代码是否有错误。例如:

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库的问题:

确保库已正确安装在虚拟环境中:

pip install sixel

验证具有必要的Python和系统依赖项。

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

仔细检查代码,特别是SixelWriter的使用和图像数据转换步骤,以查找潜在错误。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485