了解如何使用Ultralytics Python 软件包将计算机视觉应用中的数据转化为易于理解的图表,从而获得更好的见解。
从机场航站楼、火车站到购物中心,每时每刻都在产生大量数据。随着人工智能的广泛应用,现在很多数据都得到了分析和细分。但有时,这些人工智能模型的结果会让人难以一眼发现模式或理解趋势。这时,数据可视化就能帮上忙--它能将复杂的结果转化为清晰易懂的见解。
在计算机视觉应用方面尤其如此。计算机视觉是人工智能(AI)的一个分支,它可以帮助机器解释和理解来自周围世界的视觉信息,如图像和视频。视觉人工智能模型,如 Ultralytics YOLO11等视觉人工智能模型可以帮助分析这些视觉数据以获取信息,而数据可视化则有助于将这些信息转化为易于理解的格式。
简而言之,数据可视化通过使用有意义的分析图表,在原始数据和实际理解之间架起了一座桥梁。在当今数据驱动的世界里,这一点至关重要,因为机器仅仅执行任务是不够的,我们需要它们讲述一个故事。
对讲故事的需求正是数据可视化兴起的原因,到 2030 年,市场规模将达到 183.6 亿美元。之前,我们探讨了计算机视觉如何提供有价值的商业洞察力。今天,我们将进一步探讨如何使用Ultralytics 软件包为计算机视觉应用生成清晰、有洞察力的分析图表。让我们开始吧!
计算机视觉应用中的数据可视化包括将物体检测和跟踪等计算机视觉任务的结果转化为易于理解的图表或仪表盘。这些视觉效果有助于识别模式和趋势,尤其是在处理大量视频片段时。
例如,无需手动查看数小时的监控视频,只需通过简单的折线图显示出一段时间内检测到的汽车或人员数量,就能快速突出高峰时段或异常安静时段。
以下是数据可视化之所以有用的一些重要原因:
不同类型的分析图表可以将计算机视觉结果转化为清晰易懂的视觉效果。比方说,您正在开发一款计算机视觉应用程序,用于检测监控录像中的人员和车辆。在这种情况下,线形图非常适合显示检测次数随时间的变化,比如跟踪全天的人流高峰。
同样,当您想比较检测到的不同物体类型的数量时,条形图也很有帮助,比如查看视频中出现的更多是汽车、自行车还是行人。饼状图则显示了每种物体类型在总检测数中所占的百分比。每种图表都有自己的用途,有助于让复杂的计算机视觉数据更容易解读和共享。
既然我们已经探讨了什么是数据可视化,以及为什么不同类型的分析图表都很重要,下面就让我们来详细了解一下如何使用Ultralytics 分析解决方案来可视化计算机视觉模型的预测结果。在一步步介绍之前,我们先来看看训练和使用Ultralytics 软件包以及YOLO11 等模型的工具和设置选项。
通过Ultralytics Python 软件包,可以轻松训练模型、检测对象、运行预测和可视化结果。要开始使用它,你需要一个编码环境。这里有三种简单的选择:
这些工具非常适合快速上手,但用户也可以将Ultralytics 集成到 Visual Studio Code(VS Code)等集成开发环境(IDE)或生产管道中。欲了解更多选项,请查阅Ultralytics 官方文档。
选择了自己喜欢的环境后,下一步就是为运行预测和可视化结果进行设置。您可以使用上述任何一种环境,具体取决于您最擅长的环境。
如果您在Google Colab 中工作,请记住它默认使用CPU ,这可能会降低性能。要想加快速度,可以切换到GPU ,方法是进入 "运行时 "菜单,选择 "更改运行时类型",然后将硬件加速器设置为GPU (最好是 T4)。
要准备好环境,你需要使用下面提到的命令安装Ultralytics Python 软件包。在 Colab 或 Jupyter 等基于笔记本的工具中,请确保在命令前添加感叹号(!)。
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 软件包,你就可以轻松地将视频片段转化为清晰、有洞察力的图表,揭示正在发生的事情,例如跟踪随着时间推移出现了多少人或物体。无需手动查看数小时的视频,您就可以生成可视化摘要,突出关键模式和趋势,从而更容易快速采取行动。无论是在医院、零售店还是制造工厂,这些图表都能将复杂的人工智能输出转化为任何人都能理解和使用的洞察力。
想了解有关人工智能的更多信息?探索我们的GitHub 存储库,与我们的社区建立联系,了解我们的许可选项,启动您的计算机视觉项目。请访问我们的解决方案页面,了解更多有关制造业中的人工智能 和物流业中的计算机视觉等创新的信息。