智能交通系統(tǒng) (ITS) 在現(xiàn)代城市環(huán)境中的應(yīng)用正變得越來越有價(jià)值和普遍。使用 ITS 應(yīng)用的優(yōu)點(diǎn)包括:
提高交通效率:通過分析實(shí)時(shí)交通數(shù)據(jù),ITS 可以優(yōu)化交通流、緩解擁堵并縮短行車時(shí)間。
提高安全性:ITS 可以檢測潛在危險(xiǎn)、監(jiān)視交通違法行為,并更有效地管理突發(fā)事件,從而使道路變得更加安全。
提高環(huán)境可持續(xù)性:高效的交通管理可減少燃油消耗與尾氣排放,促進(jìn)環(huán)境的可持續(xù)發(fā)展。
重要的是,這些系統(tǒng)需要在邊緣處理信息,以實(shí)現(xiàn)可靠的帶寬、保護(hù)隱私、進(jìn)行實(shí)時(shí)分析等更多功能。
本文將介紹如何使用 NVIDIA JetPack 6.0 中的全新 Jetson 平臺服務(wù),來構(gòu)建一個(gè)適用于邊緣的端到端交通分析解決方案。該系統(tǒng)集成了多個(gè)功能:使用視頻存儲工具包 (VST) 服務(wù)進(jìn)行視頻數(shù)據(jù)的接收與存儲;借助 YOLOv8 和 DeepStream AI 感知服務(wù)實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測和車輛追蹤;車輛移動的時(shí)空分析。在構(gòu)建好這一流程后,將利用 API 生成分析報(bào)告。
Jetson 平臺服務(wù)的優(yōu)勢
利用 Jetson 平臺服務(wù)與NVIDIA Jetpack 構(gòu)建和部署的 AI 應(yīng)用具有以下優(yōu)勢:
快速、高效:這一豐富且經(jīng)過優(yōu)化的 API 驅(qū)動的微服務(wù)集合,可以顯著縮短解決問題的時(shí)間。
可擴(kuò)展:該微服務(wù)架構(gòu)實(shí)現(xiàn)了各種組件的獨(dú)立擴(kuò)展,根據(jù)需求優(yōu)化資源利用率。
模塊化:將應(yīng)用拆分為更小、更易管理的服務(wù),簡化了更新、維護(hù)和故障排除的過程。
靈活性:這些服務(wù)能以多種方式進(jìn)行配置和部署,為智能交通系統(tǒng) (ITS) 提供定制化解決方案,針對交通監(jiān)控、交叉路口管理以及行人安全保障等方面。
要了解最新 JetPack SDK 的更多功能,請參閱支持邊緣云原生微服務(wù)的 NVIDIA JetPack 6.0 版本現(xiàn)已發(fā)布。
應(yīng)用概述
ITS 應(yīng)用主要采用了三項(xiàng)核心服務(wù):視頻存儲工具包 (VST)、AI 感知和 AI 分析。此外,它還運(yùn)用 Redis 消息總線、API 網(wǎng)關(guān)、IoT 網(wǎng)關(guān)等幾項(xiàng)基礎(chǔ)服務(wù)。
圖 1. ITS 應(yīng)用的服務(wù)和連接
VST 是視頻數(shù)據(jù)的入口。它能在基于 Jetson 的平臺上高效地管理攝像頭和視頻流,提供從多個(gè)視頻源進(jìn)行的硬件加速視頻解碼、流式傳輸和存儲。在該設(shè)置中,視頻輸入文件通過 RTSP 協(xié)議流式傳輸?shù)?VST。有關(guān)使用 VST 和添加 RTSP 流的更多信息,請參見 VST 文檔。
接下來,視頻數(shù)據(jù)流進(jìn)入利用 NVIDIA DeepStream SDK 的 AI 感知服務(wù),其先采用 YOLOv8 物體檢測模型實(shí)現(xiàn)高吞吐量,隨后使用 NvDCF 追蹤器進(jìn)行物體追蹤。該流程基于 NVIDIA Metropolis 架構(gòu)生成元數(shù)據(jù),捕獲場景中檢測到的各種物體的類別和坐標(biāo)信息。
緊接著生成的元數(shù)據(jù)和事件被發(fā)布到 Redis 消息總線,該總線是系統(tǒng)內(nèi)部消息傳遞的骨干。AI 分析服務(wù)訂閱了該總線,接收執(zhí)行詳細(xì)交通分析所需的信息。
這種基于服務(wù)的架構(gòu)確保從視頻輸入到分析的數(shù)據(jù)流暢且高效,充分利用了 NVIDIA Jetson 設(shè)備的處理能力。該方法提高了處理速度和響應(yīng)能力,非常適合需要實(shí)時(shí)數(shù)據(jù)解釋和即時(shí)行動的 ITS 應(yīng)用。
用于物體檢測的 YOLOv8
YOLOv8 作為最先進(jìn)的物體檢測模型脫穎而出,以其無與倫比的速度和準(zhǔn)確性著稱。其輕量級架構(gòu)特別適合部署在 NVIDIA Jetson 等邊緣設(shè)備上。在 ITS 應(yīng)用中,YOLOv8 能夠?qū)崟r(shí)檢測和分類車輛、行人、交通標(biāo)志等對象。這為管理和優(yōu)化交通流量、加強(qiáng)道路安全以及支持自動化交通系統(tǒng)提供關(guān)鍵數(shù)據(jù)。有關(guān)各種 YOLO 模型的更多信息,請參閱計(jì)算機(jī)視覺中的 YOLO 架構(gòu)綜述。
下載和準(zhǔn)備 YOLOv8
開始使用前,請先在 GitHub 的 ultralytics 資源庫下載 YOLOv8 模型。本文使用 YOLOv8 發(fā)布版本所訓(xùn)練的 COCO 數(shù)據(jù)集中轎車、公交車和卡車三類作為示例。請注意,用戶有責(zé)任驗(yàn)證每個(gè)數(shù)據(jù)集許可證是否符合預(yù)定用途。
接下來,需要將該模型轉(zhuǎn)換成 NVIDIA TensorRT 執(zhí)行引擎,以針對 NVIDIA Jetson 的硬件能力對其進(jìn)行優(yōu)化。DeepStream 微服務(wù)容器附帶的腳本可幫助簡化這一轉(zhuǎn)換過程。
要運(yùn)行 YOLOv8 安裝腳本,首先要確保您已按照 Jetson 平臺服務(wù)文檔中的“快速入門”部分所述的步驟安裝了微服務(wù)、參考應(yīng)用以及 NVStreamer。此時(shí),您還可以配置 NVStreamer 以通過 RTSP 傳輸以下文件,該文件將作為輸入使用。
要執(zhí)行腳本,請運(yùn)行針對您的硬件提供的以下命令。
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
設(shè)置腳本執(zhí)行的任務(wù)包括:
硬件特定配置:根據(jù) NVIDIA 硬件(AGX 或 NX16)調(diào)整諸如批量大小等參數(shù),以優(yōu)化性能。
依賴性管理:下載 YOLOv8 模型文件和 COCO 數(shù)據(jù)集,安裝所需庫,并準(zhǔn)備用于量化的校準(zhǔn)圖像。
INT8 校準(zhǔn):將浮點(diǎn)模型量化為 INT8,以獲得最佳推理性能。
模型轉(zhuǎn)換:將模型從 PyTorch 轉(zhuǎn)換成 ONNX 格式,并生成 TensorRT 引擎。
這個(gè)過程大約需要 15 到 30 分鐘,并生成部署 YOLO 所需的以下文件:
./yolov8s/calib.table
./yolov8s/model_b4_gpu0_int8.engine 或 (依據(jù)設(shè)備類型的不同)
./yolov8s/model_b8_gpu0_int8.engine
./yolov8s/yolov8s-dependencies/yolov8s.onnx
自定義 AI 感知服務(wù)
用于 AI 感知的 DeepStream 容器還集成了一個(gè)程序庫。該庫包含自定義函數(shù),用于從 YOLOv8 模型中創(chuàng)建優(yōu)化后的 NVIDIA TensorRT 引擎,并解析該模型輸出結(jié)果。這個(gè)轉(zhuǎn)換腳本和程序庫均來自 GitHub 上的 marcoslucianops/DeepStream-Yolo 資源庫(遵循 MIT 許可)。
這些自定義函數(shù)用于配置 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 …
運(yùn)行應(yīng)用程序
設(shè)置完成后,就可以運(yùn)行應(yīng)用了。AI-NVR 堆棧中包含了該應(yīng)用程序的 Docker Compose 配置。請使用下方提供的與您硬件配置相匹配的命令來運(yùn)行。
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 分析服務(wù)進(jìn)行車輛數(shù)據(jù)分析
利用 AI 分析服務(wù)的絆線(或越線)和軌跡功能進(jìn)行車流量分析。您可以通過 REST API 配置這些分析功能,包括:
在給定的時(shí)間范圍內(nèi)統(tǒng)計(jì)穿越預(yù)設(shè)線段的車輛總數(shù)(包括轎車、公交車和卡車)。
在給定時(shí)間范圍內(nèi)的車流量趨勢分析,可縮短時(shí)間窗口進(jìn)行深入研究。
在給定時(shí)間范圍內(nèi)的車流量熱力圖展示。
概念
絆線(或越線)是指在攝像頭平面上繪制的虛擬線條,用于統(tǒng)計(jì)雙向穿越該線條的物體數(shù)量。
軌跡指車輛實(shí)際行駛的路徑,由系統(tǒng)逐幀追蹤并記錄。AI 感知服務(wù)會為每輛車分配一個(gè)唯一 ID。系統(tǒng)中的“軌跡”概念代表車輛行駛的總路徑。
API 規(guī)范
有關(guān)以下部分中提到的 API 詳細(xì)信息,請參閱 AI 分析服務(wù)規(guī)范。
絆線配置
絆線分析可以針對給定的傳感器,通過以下 API 進(jìn)行配置。請注意,下面使用的
HTTP POST 請求端點(diǎn):
請注意,必須將 jetson-device-ip 替換為 Jetson 設(shè)備正確的 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" } } } ] }
生成絆線時(shí)間序列分析
可通過絆線計(jì)數(shù) API 檢索給定時(shí)間范圍內(nèi)不同車輛類型(由 YOLOv8 模型檢測)的總穿越次數(shù)。
一旦絆線創(chuàng)建完成,您可以使用以下示例查詢來檢索在 2024 年 5 月 15 日格林威治時(shí)間上午 11 點(diǎn)至中午 12 點(diǎn)期間,傳感器 ID ExpressWay 上配置的 ID 為 road-tw 的絆線處各類物體的總穿越次數(shù)。此外,該查詢還請求對轎車、公交車和卡車這三類對象的穿越次數(shù)進(jìn)行細(xì)分。
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 設(shè)備正確的IP地址。
響應(yīng):
{ "counts": [ { "sensorId": "ExpressWay", "total_count": 241, "count_by_type": { "bus": 3, "car": 238, "truck": 0 }, "attributes": [] } ] }
交通趨勢直方圖可視化
還可以使用絆線計(jì)數(shù)直方圖 API 將之前的總計(jì)數(shù)匯總到更小的時(shí)間窗口中。
使用以下示例查詢來檢索在格林威治標(biāo)準(zhǔn)時(shí)間 2024 年 5 月 15 日上午 11 點(diǎn)到中午12 點(diǎn)之間,傳感器 ID 為 ExpressWay上配置的 ID 為 road-tw的絆線處物體(所有類型)穿越次數(shù)的直方圖,并將其細(xì)分到 1 分鐘的時(shí)間窗口。
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
這將轉(zhuǎn)儲每個(gè) 1 分鐘間隔的 JSON 輸出與 1 分鐘窗口中的匯總計(jì)數(shù)。您可以將這些信息繪制成堆疊直方圖,以表示計(jì)數(shù)隨時(shí)間變化的趨勢(圖 2)。
圖 2. 以 1 分鐘為間隔的交通流量計(jì)數(shù)直方圖
車輛軌跡熱力圖可視化
本部分將介紹如何使用 AI 分析服務(wù)中的行為 API 生成熱力圖。熱力圖是通過累積運(yùn)動軌跡并將它們映射到區(qū)域空間中生成的,它提供了一種可視化方式幫助呈現(xiàn)交通流隨時(shí)間的變化趨勢。
熱力圖生成邏輯
根據(jù)給定時(shí)間范圍內(nèi)所有物體的軌跡行為坐標(biāo) [x, y],通過 numpy.histogram2d.計(jì)算出直方圖。然后應(yīng)用高斯濾波器對結(jié)果進(jìn)行平滑處理。請?jiān)L問 GitHub 上的 NVIDIA-AI-IOT/jetson-platform-services 資源庫,查看與此邏輯相關(guān)的函數(shù)筆記。使用 VST API 獲取傳感器圖像快照。在圖 3 中,平滑后的直方圖被可視化成熱力圖。
使用下面的示例,查詢檢索傳感器 ID ExpressWay 在給定時(shí)間內(nèi)對象類型為轎車、公交車和卡車的軌跡行為。
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
響應(yīng):
{ "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 } ] }
響應(yīng)了一個(gè)給定對象隨時(shí)間變化的軌跡項(xiàng)數(shù)組,其中每個(gè)項(xiàng)都是由兩個(gè)元素構(gòu)成的。第一個(gè)元素是以毫秒為單位的視頻幀時(shí)間戳(1708598580297,Unix 時(shí)間),第二個(gè)元素是位置坐標(biāo)數(shù)組 [x,y],例如 [291, 590],表示該圖像平面上 x=291,y=590。
交通分析文件
請?jiān)L問 GitHub 上的 NVIDIA-AI-IOT/jetson-platform-services 資源庫,并下載文件在您的本地系統(tǒng)上運(yùn)行。請按照步驟說明嘗試使用您自己的視頻文件或攝像頭進(jìn)行操作。
總結(jié)
本文介紹了如何使用 NVIDIA JetPack 6.0 中的 Jetson 平臺服務(wù)和 YOLOv8 物體檢測模型來構(gòu)建智能交通應(yīng)用。Jetson 平臺服務(wù)是一組功能豐富的微服務(wù),可用于邊緣構(gòu)建 AI 應(yīng)用。開發(fā)者可以使用這些 API 快速、高效地開發(fā)應(yīng)用,并生成車輛計(jì)數(shù)、交通熱力圖等洞察。這些微服務(wù)具有可替換性,并且可以擴(kuò)展到多種邊緣 AI 應(yīng)用中。
-
NVIDIA
+關(guān)注
關(guān)注
14文章
4986瀏覽量
103046 -
智能交通
+關(guān)注
關(guān)注
12文章
804瀏覽量
43467 -
AI
+關(guān)注
關(guān)注
87文章
30887瀏覽量
269063 -
微服務(wù)
+關(guān)注
關(guān)注
0文章
137瀏覽量
7348
原文標(biāo)題:利用 YOLOv8 和 NVIDIA JetPack 6.0 生成交通洞察
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達(dá)企業(yè)解決方案】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論