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

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

既然我们已经探讨了什么是数据可视化,以及为什么不同类型的分析图表都很重要,下面就让我们来详细了解一下如何使用Ultralytics 分析解决方案来可视化计算机视觉模型的预测结果。在一步步介绍之前,我们先来看看训练和使用Ultralytics 软件包以及YOLO11 等模型的工具和设置选项。
通过Ultralytics Python 软件包,可以轻松训练模型、detect 对象、运行预测和可视化结果。要开始使用它,你需要一个编码环境。这里有三种简单的选择:
这些工具非常适合快速上手,但用户也可以将Ultralytics 集成到 Visual Studio Code(VS Code)等集成开发环境(IDE)或生产管道中。欲了解更多选项,请查阅Ultralytics 官方文档。
选择好你喜欢的环境后,下一步是设置它以运行预测并可视化结果。你可以使用上面提到的任何环境,具体取决于你最熟悉哪个。
如果您在Google Colab 中工作,请记住它默认使用CPU ,这可能会降低性能。要想加快速度,请进入 "运行时 "菜单,选择 "更改运行时类型",然后将硬件加速器设置为GPU (最好是 T4),这样就可以切换到GPU 。
要准备好环境,你需要使用下面提到的命令安装Ultralytics Python 软件包。在 Colab 或 Jupyter 等基于笔记本的工具中,请确保在命令前添加感叹号(!)。
pip install ultralytics接下来,我们需要一段视频。您可以轻松地从 Pexels 等免费素材网站下载视频。确保选择的视频包含YOLO11 可以detect的物体。由于模型是在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 软件包,你就可以轻松地将视频片段转化为清晰、有洞察力的图表,揭示正在发生的事情,例如跟踪随着时间推移出现了多少人或物体。无需手动查看数小时的视频,您就可以生成可视化摘要,突出关键模式和趋势,从而更容易快速采取行动。无论是在医院、零售店还是制造工厂,这些图表都能将复杂的人工智能输出转化为任何人都能理解和使用的洞察力。
想了解更多关于人工智能的信息吗?请浏览我们的GitHub 仓库,与我们的社区互动,并查看我们的许可选项,以快速启动您的计算机视觉项目。在我们的解决方案页面上,了解更多关于制造业中的人工智能和物流行业中的计算机视觉等创新应用。