相关文章推荐
没读研的油条  ·  李易峰转型受阻,还能接到悬疑电影《操场》,三 ...·  1 年前    · 
没有腹肌的碗  ·  永恒族和灭霸之间有什么关系? - 知乎·  2 年前    · 
斯文的皮带  ·  极品家丁漫画全 - 抖音·  2 年前    · 
强健的熊猫  ·  漫画全集在线观看 - 哔哩哔哩漫画·  2 年前    · 
想表白的仙人掌  ·  深圳市人民政府关于印发深圳市航空航天产业发展 ...·  2 年前    · 
Code  ›  实时交通监控:YOLOv8与NVIDIA JetPack 6.0的集成应用开发者社区
软件 英伟达 tripwire
https://cloud.tencent.com/developer/article/2431370
开朗的海豚
1 年前
GPUS Lady

实时交通监控:YOLOv8与NVIDIA JetPack 6.0的集成应用

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
GPUS Lady
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 实时交通监控:YOLOv8与NVIDIA JetPack 6.0的集成应用

实时交通监控:YOLOv8与NVIDIA JetPack 6.0的集成应用

作者头像
GPUS Lady
发布 于 2024-06-24 21:31:59
188 0
发布 于 2024-06-24 21:31:59
举报
文章被收录于专栏: GPUS开发者

本文翻译自NVIDIA Blog:

智能交通系统(ITS)应用在现代城市环境中变得越来越有价值和普遍。使用ITS应用程序的好处包括:

  • 提高交通效率 :通过分析实时交通数据,ITS可以优化交通流量,减少拥堵并缩短旅行时间。
  • 提高安全性 :ITS可以检测潜在危险,监控交通违规行为,并更有效地管理事故,从而实现更安全的道路。
  • 提高环境可持续性 :高效的交通管理可减少燃料消耗和排放,为环境可持续性做出贡献。

重要的是,这些系统需要在边缘处理信息,以实现可靠的带宽、隐私、实时分析等。

这篇文章介绍了如何使用 NVIDIA JetPack 6.0 中的新 Jetson 平台服务 为边缘实施端到端流量分析解决方案。该系统包括使用视频存储工具包 (VST) 服务进行视频摄取和存储、使用 YOLOv8 和 DeepStream AI 感知服务进行实时对象检测和车辆跟踪,以及对车辆运动的时空分析。创建管道后,将使用 API 生成分析。

Jetson 平台服务的优势

使用 Jetson 平台服务和 NVIDIA Jetpack 构建和部署 AI 应用程序具有以下优势:

  • 快速、高效的解决方案 :丰富的优化 API 驱动型微服务集合有助于缩短解决方案时间。
  • 可扩展 性:微服务架构支持各组件独立扩展,根据需求优化资源利用率。
  • 模块化 :将应用程序分解为更小、可管理的服务可简化更新、维护和故障排除。
  • 灵活性 :服务可以通过多种方式进行配置和部署,为特定的ITS需求提供量身定制的解决方案,无论是监控交通、管理十字路口还是确保行人安全。

要了解有关最新 JetPack SDK 功能的更多信息,请参阅 使用 NVIDIA JetPack 6.0 在边缘提供 Power Cloud-Native 微服务,现已正式发布 。

应用概述

此 ITS 应用程序使用三个主要服务:视频存储工具包 (VST) 服务、AI 感知服务和 AI 分析服务。它还使用多种基础服务,例如 Redis 消息总线、API 网关和 IoT 网关。

VST 是视频数据的入口点。它在基于 Jetson 的平台上高效管理摄像机和视频流,提供来自多个视频源的硬件加速视频解码、流式传输和存储。在此设置中,视频输入文件使用 RTSP 流式传输到 VST。有关使用 VST 和添加 RTSP 流的详细信息,请参阅 VST 文档 。

接下来,视频数据流入 AI 感知服务,该服务利用 NVIDIA DeepStream SDK 使用 YOLOv8 对象检测模型实现高吞吐量,然后使用 NvDCF 跟踪器 进行对象跟踪。该管道根据 NVIDIA Metropolis 架构生成元数据,捕获场景中检测到的各种对象的类和定位信息。

然后,生成的元数据和事件将发布到 Redis 消息总线,该总线充当系统内消息传递的骨干。AI Analytics 服务订阅此总线,接收执行详细流量分析所需的信息。

这种基于服务的架构利用 NVIDIA Jetson 设备的处理能力,提供从视频输入到分析的流畅高效的数据流。这种方法提高了处理速度和响应能力,使其成为需要实时数据解释和立即行动的ITS应用的理想选择。

用于对象检测的 YOLOv8

YOLOv8 作为最先进的目标检测模型脱颖而出,以其无与伦比的速度和准确性而闻名。其轻量级架构使其特别适合部署在 NVIDIA Jetson 等边缘设备上。在ITS应用中,YOLOv8可以实时检测和分类车辆、行人、交通标志等物体。这可以为管理和优化交通流量、增强道路安全和支持自动化交通系统提供基本数据。有关各种 YOLO 模型的详细信息,请参阅 计算机视觉中 YOLO 架构的综合回顾 。

下载并准备 YOLOv8

首先,从 ultralytics GitHub 存储库 下载 YOLOv8 模型。这篇文章使用了 COCO 数据集中的汽车、公共汽车和卡车类,YOLOv8 的发布版本就是在该数据集上训练的。请注意,用户负责验证每个数据集许可证是否适合预期用途。

然后,需要将模型转换为 NVIDIA TensorRT 执行引擎,该引擎针对 NVIDIA Jetson 的硬件功能对其进行了优化。DeepStream 微服务容器附带一个脚本,可帮助简化此过程。

要运行 YOLOv8 安装脚本,首先确保您已按照 Jetson 平台服务文档的 快速入门 部分中概述的步骤安装微服务、参考应用程序和 NVStreamer。此时,您还可以将 NVStreamer 配置为通过 RTSP 流式传输以下文件。这将用作输入。

opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4

若要执行脚本,请运行下面提供的硬件命令。

Jetson AGX Orin:

代码语言: javascript
复制
sudo docker run -v ./yolov8s:/yolov8s -v
./config/deepstream:/ds-config-files –rm --runtime nvidia 
nvcr.io/nvidia/jps/deepstream:7.0-jps-v1.1.1 
/yolov8s-files/yolov8s_setup.sh --agx

Jetson Orin NX16:

代码语言: javascript
复制
sudo docker run -v ./yolov8s:/yolov8s -v
./config/deepstream:/ds-config-files –rm --runtime nvidia 
nvcr.io/nvidia/jps/deepstream:7.0-jps-v1.1.1 
/yolov8s-files/yolov8s_setup.sh --nx16

安装脚本执行的任务包括:

  1. 特定于硬件的配置 :根据 NVIDIA 硬件(AGX 或 NX16)调整批量大小等参数以优化性能。
  2. 依赖管理 :下载 YOLOv8 模型文件和 COCO 数据集,安装所需库,并准备用于量化的校准图像。
  3. INT8 校准 :将浮点模型量化为 INT8,以获得最佳推理性能。
  4. 模型转换 :将模型从 PyTorch 转换为 ONNX 格式,并生成 TensorRT 引擎。

此过程大约需要 15 到 30 分钟,并生成 YOLO 部署所需的以下文件:

  • ./yolov8s/calib.table
  • ./yolov8s/model_b4_gpu0_int8.engine 或(取决于设备类型) ./yolov8s/model_b8_gpu0_int8.engine
  • ./yolov8s/yolov8s-dependencies/yolov8s.onnx

自定义 AI 感知服务

用于 AI 感知的 DeepStream 容器还包括一个包含自定义函数的库,用于从 YOLOv8 模型创建优化的 NVIDIA TensorRT 引擎并解析模型的输出。转换脚本和库均来自 marcoslucianops/DeepStream-Yolo GitHub 存储库 (MIT 许可证)。

自定义函数用于配置 DeepStream 推理插件:

代码语言: javascript
复制
# Example: nv_ai/config/deepstream/yolov8s/config_infer_primary_yoloV8_nx16.txt
parse-bbox-func-name=NvDsInferParseYolo
custom-lib-path=/yolov8s-files/libnvdsinfer_custom_impl_Yolo.so
engine-create-func-name=NvDsInferYoloCudaEngineGet
…

运行应用程序

完成设置后,即可运行应用程序。应用程序的 Docker Compose 配置包含在 AI-NVR 堆栈中。对硬件配置使用适当的命令,如下所示。

Jetson AGX Orin:

代码语言: javascript
复制
sudo docker compose -f compose_agx_yolov8s.yaml up -d --force-recreate

Jetson Orin NX16:

代码语言: javascript
复制
sudo docker compose -f compose_nx16_yolov8s.yaml up -d --force-recreate

使用 AI Analytics 服务进行车辆分析

可以使用 AI 分析服务的 Tripwire(或越线)和 Trajectory 功能执行车辆交通分析。您可以使用 REST API 配置这些分析。分析包括:

  1. 在给定时间范围内穿过配置线段的车辆总数(汽车、公共汽车和卡车)。
  2. 给定时间范围内的车辆交通趋势,具有较小的时间窗口向下钻取。
  3. 给定时间范围内车辆交通流量的热图。

概念

绊线 或越线是指在相机平面上绘制的虚拟线,用于计算在任一方向上越过线的物体。

轨迹 是指车辆所走的实际路径,由系统逐帧跟踪并记录下来。AI Perception 服务为每辆车分配一个唯一的 ID。车辆的总路径由系统中的轨迹概念表示。

API 规范

有关以下部分中引用的 API 的详细信息,请参阅 AI Analytics Service API 规范。

绊线配置

可以使用以下 API 为给定传感器配置绊线分析。请注意,下面使用的值应与使用 sensor/add API 将流添加到 VST 时设置的值相同。可以使用 cURL 或 Postman 等工具发出 HTTP post 请求。 <SensorID>name

HTTP POST 请求端点:

http://{jetson-device-ip}:30080/api/emdx/api/config/tripwire?sensorId=<SensorID>

请注意, jetson-device-ip 必须替换为 Jetson 设备的正确 IP 地址。

请求:

代码语言: javascript
复制
{
    "sensorId": "<SensorID>",
    "tripwires": [
            "id": "<TripwireID>",
            "name": "<Name>",
            "wire": [
                    "x": 591,
                    "y": 575
                    "x": 677,
                    "y": 618
                    "x": 1107,
                    "y": 575
                    "x": 1105,
                    "y": 541
            "direction": {
                "p1": {
                    "x": 873,
                    "y": 553
                "p2": {
                    "x": 1010,
                    "y": 689
                "entry": {
                    "name": "entry"
                "exit": {
                    "name": "exit"
}

生成 Tripwire 时间序列分析

通过 Tripwire 计数 API 检索给定时间范围内不同车辆类型(由 YOLOv8 模型检测到)的总交叉点。

创建绊线后,使用下面的示例查询,在 2024-05-15 格林威治标准时间上午 11 点至格林威治标准时间中午 12 点之间,在传感器 ID ExpressWay 上配置了 ID road-tw 的绊线上检索穿越绊线的总对象交叉点。此外,该查询还请求对汽车、公共汽车和卡车对象类型的计数进行细分。

HTTP GET 查询:

代码语言: javascript
复制
http://{jetson-device-ip}:30080/emdx/api/metrics/tripwire/count?
     sensorId=ExpressWay&
     tripwireId=road-tw&
     fromTimestamp=2024-05-15T11:00:00.000Z&
     toTimestamp=2024-05-15T12:00:00.000Z&
     objectTypes=car,bus,truckc

请注意,和以前一样, jetson-device-ip 必须替换为 Jetson 设备的正确 IP 地址。

响应:

代码语言: javascript
复制
{
    "counts": [
            "sensorId": "ExpressWay",
            "total_count": 241,
            "count_by_type": {
                "bus": 3,
                "car": 238,
                "truck": 0
            "attributes": []
}

流量趋势直方图可视化

还可以使用 Tripwire 计数直方图 API 将之前的总计数聚合到较小的时间窗口中。

使用下面的示例查询检索 2024-05-15 格林威治标准时间上午 11 点至格林威治标准时间中午 12 点之间在传感器 ID ExpressWay 上配置了 ID road-tw 的绊线的对象(所有类型)交叉计数直方图,细分为 1 分钟窗口。

HTTP GET 查询:

代码语言: javascript
复制
http://{jetson-device-ip}:30080/emdx/api/metrics/tripwire/histogram?
     sensorId=ExpressWay&
     tripwireId=road-tw
     fromTimestamp=2024-05-15T11:00:00.000Z&
     toTimestamp=2024-05-15T12:00:00.000Z&
     fixedInterval=60000&
     objectTypes=car,bus,truck

这将转储每个 1 分钟间隔的 JSON 输出和 1 分钟窗口中的总聚合计数。您可以将此信息绘制在堆叠直方图中,该直方图表示计数随时间的变化趋势(图 2)。

车辆轨迹热图可视化

本部分介绍如何使用 AI Analytics 服务中的行为 API 生成热图。热图提供了一个可视化效果,用于了解一段时间内的交通流量。它是通过积累单个运动轨迹并在空间上将它们映射到整个区域而生成的。

热图生成逻辑

使用给定时间范围内所有对象的轨迹行为坐标 [x,y],使用 计算直方图。应用高斯滤波器来平滑结果。访问 GitHub 上的 NVIDIA-AI-IOT/jetson-platform-services ,查看与此逻辑相关的函数的笔记本。传感器图像快照是使用 VST API 获取的。在图 3 中,将平滑的直方图可视化以生成热图。 numpy.histogram2d

使用下面的示例查询检索对象类型 car、bus 和 truck 在给定持续时间内传感器 ID ExpressWay 的轨迹行为。

HTTP GET 查询:

代码语言: javascript
复制
http://{jetson-device-ip}:30080/emdx/api/behavior?
     sensorId=ExpressWay&
     fromTimestamp=2024-05-15T11:00:00.000Z&
     toTimestamp=2024-05-15T11:00:05.000&
     objectTypes=car,bus,truck

响应:

代码语言: javascript
复制
{
    "behavior": [
            "sensor": {
                "id": "Expressway"
            "object": {
                "id": "134",
                "type": "car"   
            "locations": {
                "coordinates": [
                        1708598580297,
                        [291,590]
                        1708598580364,
                        [285,594]
                        1708598580474,
                        [385,694]
                        1708598580372,
                        [281,595]
                    ]               ],
                "type": "linestring"
            "length": 4,
            "start": "2024-02-22T10:43:00.297Z",
 
推荐文章
没读研的油条  ·  李易峰转型受阻,还能接到悬疑电影《操场》,三个原因很重要_百科TA说
1 年前
没有腹肌的碗  ·  永恒族和灭霸之间有什么关系? - 知乎
2 年前
斯文的皮带  ·  极品家丁漫画全 - 抖音
2 年前
强健的熊猫  ·  漫画全集在线观看 - 哔哩哔哩漫画
2 年前
想表白的仙人掌  ·  深圳市人民政府关于印发深圳市航空航天产业发展规划(2013-2020年)的通知-科技规划-深圳市科技创新委员会网站
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号