• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 計算機視覺/視頻分析

    使用 YOLOv8 和 NVIDIA JetPack 6.0 生成交通洞察

    智能交通系統(ITS)的應用在現代城市環境中變得越來越有價值和普遍。使用 ITS 應用程序的好處包括:

    • 提高交通效率:通過實時交通數據分析,ITS 可以優化交通流量,減少擁堵,縮短出行時間。
    • 提高安全性:ITS 可以檢測潛在的危險、監測交通違法行為,并更有效地管理事故,從而使道路更加安全。
    • 提高環境可持續性:高效的交通管理通過減少燃料消耗和排放,有助于環境可持續性。

    重要的是,這些系統需要在邊緣處理信息,以獲得可靠的帶寬、隱私、實時分析等。

    這篇文章解釋了如何使用 NVIDIA JetPack 6.0 的新Jetson 平臺服務來實現邊緣的端到端流量分析解決方案,該系統包括使用NVIDIA JetPack 6.0的視頻存儲工具包(VST)服務的視頻攝取和存儲、使用 YOLOv8 和 DeepStream AI Perception 服務的實時物體檢測和車輛跟蹤,以及車輛運動的時空分析,一旦創建了管道,就使用 API 來生成分析。

    Jetson 平臺服務的優勢

    使用 Jetson 平臺服務和 NVIDIA Jetpack 構建和部署人工智能應用程序可提供以下好處:

    • 快速、高效的解決方案: 優化 API 驅動微服務的豐富集合有助于縮短解決時間。
    • 可擴展性:微服務架構使各種組件能夠獨立擴展,從而根據需求優化資源利用率。
    • 模塊化:將應用程序分解為更小、可管理的服務,以簡化更新、維護和故障排除。
    • 靈活性:服務可以通過多種方式配置和部署,為特定的 ITS 需求提供量身定制的解決方案,無論是監控交通、管理交叉口還是確保行人安全。

    要了解最新 JetPack SDK 的更多功能信息,請參閱Power Cloud-Native Microservices at the Edge with NVIDIA JetPack 6.0, Now GA

    應用程序概述?

    該 ITS 應用程序使用三個主要服務:視頻存儲工具包(VST)服務、AI 感知服務和 AI 分析服務,還使用了一些基礎服務,如 Redis 消息總線、API 網關和 IoT 網關。

    Flow chart showing the microservices and connections of the ITS application.
    圖 1。ITS 應用程序的服務和連接

    VST 是視頻數據的入口點。它在基于 Jetson 的平臺上高效管理攝像機和視頻流,提供來自多個視頻源的硬件加速視頻解碼、流媒體和存儲。在這個設置中,視頻輸入文件使用 RTSP 流式傳輸到 VST。有關使用 VST 和添加 RTSP 流的更多信息,請參閱VST 文檔

    接下來,視頻數據流入 AI Perception 服務,該服務利用NVIDIA DeepStream SDKNvDCF 跟蹤器進行對象跟蹤,該管道基于NVIDIA Metropolis模式生成元數據,捕獲場景中檢測到的各種對象的類和定位信息。

    生成的元數據和事件隨后被發布到 Redis 消息總線,該總線充當系統內消息傳遞的骨干。人工智能分析服務訂閱了該總線,接收執行詳細流量分析所需的信息。

    這種基于服務的架構提供了從視頻輸入到分析的流暢高效的數據流,利用 NVIDIA Jetson 設備的處理能力。這種方法提高了處理速度和響應能力,非常適合需要實時數據解釋和即時行動的 ITS 應用。

    YOLOv8 對象檢測算法

    YOLOv8是一款最先進的物體檢測模型,以其無與倫比的速度和準確性而聞名。其輕量級架構使其特別適合部署在 NVIDIA Jetson 等邊緣設備上。在 ITS 應用中,YOLOv8 可以實時檢測和分類車輛、行人和交通標志等物體,為管理和優化交通流、提高道路安全和支持自動化交通系統提供重要數據。有關各種 YOLO 模型的更多信息,請參閱計算機視覺中 YOLO 體系結構的全面回顧

    下載并準備 YOLOv8

    要開始,請從ultralytics GitHub repo下載 YOLOv8 模型。這篇文章使用了 COCO 數據集中的汽車、公共汽車和卡車類,這些類是 YOLOv8 發布版本所訓練的。請注意,用戶負責驗證每個數據集許可證是否符合預期目的。

    然后,該模型需要被轉換為一個 NVIDIA TensorRT 執行引擎,以便針對 NVIDIA Jetson 的硬件功能進行優化。DeepStream 微服務容器附帶了一個腳本,旨在幫助簡化這個過程。

    要運行 YOLOv8 設置腳本,首先確保您已按照 Jetson 平臺服務文檔的快速啟動部分中概述的步驟安裝微服務、參考應用程序和 NVStreamer。此時,您也可以將 NVStreamer 配置為通過 RTSP 流式傳輸下面的文件,這將被用作輸入。

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

    要執行腳本,請運行下面提供的硬件命令。

    Jetson AGX Orin:

    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:

    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 感知服務

    用于人工智能感知的 DeepStream 容器還包括一個庫,該庫包含自定義函數,用于從 YOLOv8 模型創建優化的 NVIDIA TensorRT 引擎并解析模型的輸出,這些轉換腳本和庫都來源于marcoslucianops/DeepStream-Yolo GitHub repo(MIT 許可證)。

    自定義函數用于配置 DeepStream 推理插件:

    # 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

    運行應用程序

    安裝完成后,您就可以運行應用程序了。AI-NVR 堆棧中包含了應用程序的 Docker Compose 配置。請使用下面提供的適用于您的硬件配置的命令。

    Jetson AGX Orin:

    sudo docker compose -f compose_agx_yolov8s.yaml up -d --force-recreate

    Jetson Orin NX16:

    sudo docker compose -f compose_nx16_yolov8s.yaml up -d --force-recreate

    人工智能分析服務下的車輛分析

    車輛交通分析可以使用 AI Analytics 服務的 Tripwire(或線路交叉)和 Trajectory 功能進行。您可以使用 REST APIs 配置這些分析。這些分析包括:

    1. 給定時間范圍內通過配置線段的車輛總數(小汽車、公共汽車和卡車)。
    2. 給定時間范圍內車輛交通量的趨勢,時間窗口越小。
    3. 給定時間范圍內的車輛交通流熱圖。

    概念

    Tripwire,或稱線交叉,是指在相機平面上繪制的虛擬線,用于計算對象在任意方向上跨越該線的次數。

    軌跡是指車輛行駛的實際路徑,由系統逐幀跟蹤并記錄,每輛車都被 AI Perception 服務分配了一個唯一的 ID。車輛的總路徑由系統中的軌跡概念表示。

    API 規范

    有關以下部分引用的 API 的詳細信息,請參閱AI Analytics Service API規范。

    配置 Tripwire

    可以使用以下 API 為給定的傳感器配置 Tripwire 分析,請注意,在使用 sensor/add API 將流添加到 VST 時,下面使用的<SensorID>值應與設置的name 值相同,HTTP POST 請求可以使用 cURL 或Postman等工具發出。

    HTTP POST 請求終結點:

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

    請注意jetson-device-ip 必須替換為 Jetson 設備的正確 IP 地址。

    請求

    {
    ????"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 查詢:

    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 地址。

    返回結果

    {
    ????"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 查詢:

    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 分鐘窗口中轉儲每個 1 分鐘間隔的 JSON 輸出和總聚合計數,您可以將這些信息繪制在表示計數隨時間變化趨勢的堆疊直方圖中(Figure 2)。

    This plot shows a histogram of traffic count divided between car, bus, and truck at 1-minute intervals.
    圖 2:以 1 分鐘為間隔的流量計數直方圖

    車輛軌跡熱圖可視化

    本節展示了如何使用 AI Analytics 服務中的行為 API 來生成熱圖,以了解隨時間推移的交通流量。熱圖提供了一個可視化,它是通過累積單個運動軌跡并在區域上進行空間映射而生成的。

    A heat map of the moving traffic generated on the camera view.
    圖 3。移動交通熱圖

    熱圖生成邏輯

    使用給定時間范圍內所有對象的軌跡行為坐標[x,y],使用numpy.histogram2d計算直方圖,然后應用高斯濾波器來平滑結果。訪問GitHub 上的 NVIDIA-AI-IOT/jetson 平臺服務,查看筆記本中與此邏輯相關的函數。使用VST API獲取傳感器圖像快照。在圖 3 中,平滑的直方圖被可視化以生成熱圖。

    使用下面的示例查詢來檢索傳感器 ID 的軌跡行為ExpressWay在給定的持續時間內,對象類型為汽車、公共汽車和卡車。

    HTTP GET 查詢:

    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

    回答

    {
    ????"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",
    ????????????"end": "2024-02-22T10:43:01.255Z",
    ????????????"distance": 204.81118737109063,
    ????????????"timeInterval": 0.958?
    ????????}
    ????]
    }

    響應是給定對象隨時間變化的軌跡項目數組,其中每個項目是兩個元素的數組。第一個元素是視頻幀的時間戳(1708598580297,Unix 時間),以毫秒為單位。第二個元素是位置坐標[x,y]或[291,590]的數組,其中圖像平面中的 x=291 和 y=590。

    流量分析筆記本

    訪問 GitHub 上的NVIDIA-AI-IOT/jetson-platform-services,下載筆記本并在您的系統上本地運行按照步驟說明,使用自己的視頻文件或相機進行嘗試。

    摘要?

    本文介紹了如何使用 NVIDIA JetPack 6.0 的 Jetson 平臺服務和 YOLOv8 對象檢測模型構建智能交通應用程序。Jetson 平臺服務是一組功能豐富的微服務,用于在邊緣構建人工智能應用程序,開發人員可以使用 API 快速高效地構建應用程序,并生成車輛計數、交通熱圖等見解,這些微服務是可替代的,可以擴展到許多邊緣人工智能應用程序。

    下載 JetPack 6.0并開始使用Jetson 平臺服務。在NVIDIA 開發者論壇上提問并加入對話。

    ?

    0

    標簽

    人人超碰97caoporen国产