了解如何使用 Ultralytics Python 包将计算机视觉应用程序中的数据转换为易于理解的图形,从而获得更好的见解。
了解如何使用 Ultralytics Python 包将计算机视觉应用程序中的数据转换为易于理解的图形,从而获得更好的见解。
每时每刻,从机场航站楼、火车站到购物中心,都在产生海量数据。随着人工智能的广泛应用,这些数据被大量分析和分解。但有时,这些AI模型的结果难以让人快速发现规律或理解趋势。而数据可视化正可以解决这个问题——它将复杂的输出转化为清晰、易于理解的洞察。
在计算机视觉应用中尤其如此。计算机视觉是人工智能 (AI)的一个分支,它帮助机器解释和理解来自周围世界的视觉信息,例如图像和视频。虽然像 Ultralytics YOLO11 这样的视觉 AI 模型可以帮助分析这些视觉数据以获取信息,但数据可视化有助于将这些信息转化为易于理解的格式。
简而言之,数据可视化通过使用有意义的分析图表来弥合原始数据和真实理解之间的差距。在当今数据驱动的世界中,这至关重要,因为仅仅让机器执行任务是不够的——我们需要它们讲述一个故事。
正是由于这种对叙事的需求,数据可视化正在兴起,到 2030 年,市场预计将达到 183.6 亿美元。 之前,我们探讨了计算机视觉如何提供有价值的 商业见解。 今天,我们将更进一步,通过演练如何使用 Ultralytics 软件包为计算机视觉应用生成清晰、有见地的分析图表。 让我们开始吧!

计算机视觉应用中的数据可视化涉及将计算机视觉任务(如目标检测和跟踪)的结果转换为易于理解的图表或仪表板。这些可视化有助于识别模式和趋势,尤其是在处理大量视频素材时。
例如,与其手动审查数小时的监控录像,不如使用一个简单的折线图来展示随时间检测到的汽车或人数,这样可以快速突出显示高峰时段或异常安静的时段。
以下是数据可视化有用的一些主要原因:
不同类型的分析图可以将计算机视觉结果转化为清晰、易于理解的视觉效果。假设您正在开发一个计算机视觉应用程序,该应用程序可以检测监控录像中的人和车辆。在这种情况下,折线图非常适合显示检测数量随时间的变化,例如跟踪一天中人流量的峰值。
同样,当您想要比较检测到的不同目标类型的数量时,条形图非常有用,例如查看视频中出现的汽车、自行车或行人是否更多。另一方面,饼图显示了每种目标类型在总检测中所占的百分比。每种图表都有其用途,有助于使复杂的计算机视觉数据更易于解释和共享。

既然我们已经探讨了什么是数据可视化以及为什么不同类型的分析图很重要,接下来让我们仔细看看如何使用 Ultralytics Analytics 解决方案来可视化您的计算机视觉模型预测结果。在我们逐步介绍该过程之前,让我们先看看用于训练和使用 Ultralytics 包和 YOLO11 等模型的工具和设置选项。
Ultralytics Python 包可以轻松训练模型、检测对象、运行预测和可视化结果。要开始使用它,您需要一个编码环境。以下是三个简单的选项:
这些工具非常适合快速入门,但用户也可以将 Ultralytics 集成到集成开发环境 (IDE)(如 Visual Studio Code (VS Code))或生产管道中。有关更多选项,请浏览官方 Ultralytics 文档。
选择好你喜欢的环境后,下一步是设置它以运行预测并可视化结果。你可以使用上面提到的任何环境,具体取决于你最熟悉哪个。
如果您在 Google Colab 中工作,请记住它默认使用 CPU,这会降低性能。为了加快速度,请转到“运行时”菜单,选择“更改运行时类型”,并将硬件加速器设置为 GPU(最好是 T4)。
要准备好您的环境,您需要使用下面提到的命令安装 Ultralytics Python 包。在 Colab 或 Jupyter 等基于 notebook 的工具中,请务必在命令前添加感叹号 (!)。
pip install ultralytics接下来,我们需要一个可以使用的视频。您可以从 Pexels 等免费素材网站轻松下载一个。请务必选择包含 YOLO11 可以检测到的对象的视频。由于该模型是在 COCO 数据集 上预训练的,因此它可以识别常见的对象,例如人、汽车和自行车。
在本教程中,我们将使用繁忙机场航站楼的行李处理视频。您可以使用相同的视频,也可以选择适合您项目的其他视频。

接下来,我们可以导入必要的库并加载输入视频。
我们将首先导入 OpenCV (cv2),这是一个广泛使用的计算机视觉图像和视频处理库。我们还将导入 Ultralytics 库,该库可帮助我们运行目标检测并从视频中生成分析结果。
然后,我们将尝试通过指定其路径来打开视频文件。请确保将“path/to/video.mp4”替换为您下载的视频文件的实际位置。
此外,下面的代码片段包含一个简单的检查,以确保视频正确加载。如果路径错误或文件已损坏,程序将停止并显示错误消息:“读取视频文件时出错。”
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"然后,我们将设置一个视频写入器来保存输出。当我们运行分析时,代码的这一部分将创建一个新的视频文件,该文件记录从原始视频的每一帧生成的更新图表。
在下面的代码片段中,我们首先从输入视频中提取关键属性——它的宽度、高度和每秒帧数 (fps)。这些值直接从视频中获取并转换为整数,以确保它们采用正确的格式来写入输出。
接下来,我们使用 cv2.VideoWriter 函数创建一个新的视频文件,命名为“analytics_output.avi”(您可以根据需要重命名它)。该视频使用 MJPG 格式保存,这是一种常见的视频压缩方法。输出分辨率设置为 1280×720 像素,无论原始视频的大小如何。
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
out = cv2.VideoWriter(
"analytics_output.avi",
cv2.VideoWriter_fourcc(*"MJPG"),
fps,
(1280, 720),
)现在,我们将设置 Ultralytics Analytics 解决方案,以从视频生成图表。您可以选择数据的显示方式,例如折线图、饼图、面积图或条形图,以及使用哪个 YOLO 模型。在此示例中,我们将使用轻量级的“yolo11n.pt”模型,并将结果显示为面积图。
analytics = solutions.Analytics(
show=True,
analytics_type="area",
model="yolo11n.pt",
)代码的最后一部分运行一个循环,逐帧处理视频。每一帧都被传递到分析工具,该工具实时更新图表。然后,更新后的图表被写入输出视频。如果无法读取帧,则循环停止。处理完所有帧后,视频将被保存,并且所有打开的窗口都将被关闭。
frame_count = 0
while cap.isOpened():
success, im0 = cap.read()
if success:
frame_count += 1
results = analytics(im0, frame_count)
out.write(results.plot_im)
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()最后,让我们把所有内容整合起来。只需几行额外的代码,我们就可以生成两个输出视频:一个显示带有边界框和标签的 YOLO11 目标检测 结果,另一个显示实时分析图表。
为此,我们将设置两个VideoWriter实例 - 一个用于保存预测视频,另一个用于分析。此版本的代码包括目标跟踪和图形生成,因此您可以同时看到检测结果和可视化见解。
以下是包含预测和分析输出示例的完整代码。
import cv2
from ultralytics import YOLO, solutions
# Load model and video
model = YOLO('yolo11n.pt')
cap = cv2.VideoCapture('path/to/video.mp4')
assert cap.isOpened(), "Error opening video"
# Get properties
w, h = int(cap.get(3)), int(cap.get(4))
fps = cap.get(5)
analytics_res = (1280, 720)
# Writers for prediction and analytics videos
out_pred = cv2.VideoWriter('output_predictions.avi', cv2.VideoWriter_fourcc(*'MJPG'), fps, (w, h))
out_ana = cv2.VideoWriter('output_analytics.avi', cv2.VideoWriter_fourcc(*'MJPG'), fps, analytics_res)
# Analytics setup
analytics = solutions.Analytics(show=True, analytics_type="area", model='yolo11n.pt')
# Process frames
frame_count = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame_count += 1
pred_frame = model.track(frame, persist=True)[0].plot()
out_pred.write(pred_frame)
resized = cv2.resize(pred_frame, analytics_res)
out_ana.write(analytics(resized, frame_count).plot_im)
cap.release(), out_pred.release(), out_ana.release(), cv2.destroyAllWindows()当上面的代码成功运行时,它将生成两个输出视频。文件“output_predictions.avi”将显示带有边界框和标签的对象检测结果,而“output_analytics.avi”将显示基于检测的实时分析图。

这是一个基于预测的分析输出帧。使用面积图,我们可以获得一些见解,例如随着时间的推移,手提箱数量的波动情况,例如在第 268 帧左右出现峰值,表明视频中该部分的手提箱移动或活动。

以下是一些真实世界的计算机视觉应用,在这些应用中,数据可视化具有重要的意义:
使用 Ultralytics 包,你可以轻松地将视频素材转换为清晰、有见地的图表,从而揭示正在发生的事情,例如跟踪随着时间的推移出现的人或物体的数量。无需手动查看数小时的视频,你可以生成突出显示关键模式和趋势的可视化摘要,从而更容易快速采取行动。无论是在医院、零售店还是制造工厂,这些图表都将复杂的 AI 输出转化为任何人都可以理解和使用的见解。
想了解更多关于人工智能的信息吗?请浏览我们的GitHub 仓库,与我们的社区互动,并查看我们的许可选项,以快速启动您的计算机视觉项目。在我们的解决方案页面上,了解更多关于制造业中的人工智能和物流行业中的计算机视觉等创新应用。