智能交通系統 (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 版本現已發布。
應用概述
ITS 應用主要采用了三項核心服務:視頻存儲工具包 (VST)、AI 感知和 AI 分析。此外,它還運用 Redis 消息總線、API 網關、IoT 網關等幾項基礎服務。
圖 1. ITS 應用的服務和連接
VST 是視頻數據的入口。它能在基于 Jetson 的平臺上高效地管理攝像頭和視頻流,提供從多個視頻源進行的硬件加速視頻解碼、流式傳輸和存儲。在該設置中,視頻輸入文件通過 RTSP 協議流式傳輸到 VST。有關使用 VST 和添加 RTSP 流的更多信息,請參見 VST 文檔。
接下來,視頻數據流進入利用 NVIDIA DeepStream SDK 的 AI 感知服務,其先采用 YOLOv8 物體檢測模型實現高吞吐量,隨后使用 NvDCF 追蹤器進行物體追蹤。該流程基于 NVIDIA Metropolis 架構生成元數據,捕獲場景中檢測到的各種物體的類別和坐標信息。
緊接著生成的元數據和事件被發布到 Redis 消息總線,該總線是系統內部消息傳遞的骨干。AI 分析服務訂閱了該總線,接收執行詳細交通分析所需的信息。
這種基于服務的架構確保從視頻輸入到分析的數據流暢且高效,充分利用了 NVIDIA Jetson 設備的處理能力。該方法提高了處理速度和響應能力,非常適合需要實時數據解釋和即時行動的 ITS 應用。
用于物體檢測的 YOLOv8
YOLOv8 作為最先進的物體檢測模型脫穎而出,以其無與倫比的速度和準確性著稱。其輕量級架構特別適合部署在 NVIDIA Jetson 等邊緣設備上。在 ITS 應用中,YOLOv8 能夠實時檢測和分類車輛、行人、交通標志等對象。這為管理和優化交通流量、加強道路安全以及支持自動化交通系統提供關鍵數據。有關各種 YOLO 模型的更多信息,請參閱計算機視覺中的 YOLO 架構綜述。
下載和準備 YOLOv8
開始使用前,請先在 GitHub 的 ultralytics 資源庫下載 YOLOv8 模型。本文使用 YOLOv8 發布版本所訓練的 COCO 數據集中轎車、公交車和卡車三類作為示例。請注意,用戶有責任驗證每個數據集許可證是否符合預定用途。
接下來,需要將該模型轉換成 NVIDIA TensorRT 執行引擎,以針對 NVIDIA Jetson 的硬件能力對其進行優化。DeepStream 微服務容器附帶的腳本可幫助簡化這一轉換過程。
要運行 YOLOv8 安裝腳本,首先要確保您已按照 Jetson 平臺服務文檔中的“快速入門”部分所述的步驟安裝了微服務、參考應用以及 NVStreamer。此時,您還可以配置 NVStreamer 以通過 RTSP 傳輸以下文件,該文件將作為輸入使用。
要執行腳本,請運行針對您的硬件提供的以下命令。
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 --agxJetson 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
設置腳本執行的任務包括:
硬件特定配置:根據 NVIDIA 硬件(AGX 或 NX16)調整諸如批量大小等參數,以優化性能。
依賴性管理:下載 YOLOv8 模型文件和 COCO 數據集,安裝所需庫,并準備用于量化的校準圖像。
INT8 校準:將浮點模型量化為 INT8,以獲得最佳推理性能。
模型轉換:將模型從 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 引擎,并解析該模型輸出結果。這個轉換腳本和程序庫均來自 GitHub 上的 marcoslucianops/DeepStream-Yolo 資源庫(遵循 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 分析服務進行車輛數據分析
利用 AI 分析服務的絆線(或越線)和軌跡功能進行車流量分析。您可以通過 REST API 配置這些分析功能,包括:
在給定的時間范圍內統計穿越預設線段的車輛總數(包括轎車、公交車和卡車)。
在給定時間范圍內的車流量趨勢分析,可縮短時間窗口進行深入研究。
在給定時間范圍內的車流量熱力圖展示。
概念
絆線(或越線)是指在攝像頭平面上繪制的虛擬線條,用于統計雙向穿越該線條的物體數量。
軌跡指車輛實際行駛的路徑,由系統逐幀追蹤并記錄。AI 感知服務會為每輛車分配一個唯一 ID。系統中的“軌跡”概念代表車輛行駛的總路徑。
API 規范
有關以下部分中提到的 API 詳細信息,請參閱 AI 分析服務規范。
絆線配置
絆線分析可以針對給定的傳感器,通過以下 API 進行配置。請注意,下面使用的
HTTP POST 請求端點:
請注意,必須將 jetson-device-ip 替換為 Jetson 設備正確的 IP 地址。
請求:
{ "sensorId": "", "tripwires": [ { "id": " ", "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" } } } ] }
生成絆線時間序列分析
可通過絆線計數 API 檢索給定時間范圍內不同車輛類型(由 YOLOv8 模型檢測)的總穿越次數。
一旦絆線創建完成,您可以使用以下示例查詢來檢索在 2024 年 5 月 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": [] } ] }
交通趨勢直方圖可視化
還可以使用絆線計數直方圖 API 將之前的總計數匯總到更小的時間窗口中。
使用以下示例查詢來檢索在格林威治標準時間 2024 年 5 月 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 分鐘間隔的 JSON 輸出與 1 分鐘窗口中的匯總計數。您可以將這些信息繪制成堆疊直方圖,以表示計數隨時間變化的趨勢(圖 2)。
圖 2. 以 1 分鐘為間隔的交通流量計數直方圖
車輛軌跡熱力圖可視化
本部分將介紹如何使用 AI 分析服務中的行為 API 生成熱力圖。熱力圖是通過累積運動軌跡并將它們映射到區域空間中生成的,它提供了一種可視化方式幫助呈現交通流隨時間的變化趨勢。
熱力圖生成邏輯
根據給定時間范圍內所有物體的軌跡行為坐標 [x, y],通過 numpy.histogram2d.計算出直方圖。然后應用高斯濾波器對結果進行平滑處理。請訪問 GitHub 上的 NVIDIA-AI-IOT/jetson-platform-services 資源庫,查看與此邏輯相關的函數筆記。使用 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-22T1000.297Z", "end": "2024-02-22T1001.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 平臺服務是一組功能豐富的微服務,可用于邊緣構建 AI 應用。開發者可以使用這些 API 快速、高效地開發應用,并生成車輛計數、交通熱力圖等洞察。這些微服務具有可替換性,并且可以擴展到多種邊緣 AI 應用中。
-
NVIDIA
+關注
關注
14文章
4986瀏覽量
103046 -
智能交通
+關注
關注
12文章
804瀏覽量
43467 -
AI
+關注
關注
87文章
30887瀏覽量
269065 -
微服務
+關注
關注
0文章
137瀏覽量
7348
原文標題:利用 YOLOv8 和 NVIDIA JetPack 6.0 生成交通洞察
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論