基於實時AI的視頻和圖像分析(一)

關於視頻分析:
格靈深瞳
千視通
NVIDIA Deepstream 目前5.0已經發布。

做什麼?

應用場景
在這裏插入圖片描述
在這裏插入圖片描述
多視頻分析

可以在邊緣和雲端靈活部署。

  • 邊緣設備
  • 雲端處理

獲取模型

集成了Nvidia的遷移學習工具包(TLT),您可以使用TLT爲您的應用程序訓練預訓練模型並在deepStream上部署。

AI 媒體服務器

視頻分析流程:
在這裏插入圖片描述
媒體服務器模塊:

在這裏插入圖片描述
設計一個視頻分析服務通常要涉及4個模塊

  • 視頻獲取
  • 視頻處理 & AI(DeepStream)
  • 視頻編碼
  • 其他功能:記錄、截圖等

Gstreamer

如果將上述過程用gstreamer設計並表達出來,可以參考下面代碼

v4l2src device=/dev/video1 ! video/x-raw,width=640,height=480 ! videoconvert ! video/x-raw,format=I420,width=640,height=480 ! queue ! tee name=camera0 \
nvarguscamerasrc ! nvvidconv ! video/x-raw,format=I420,width=640,height=480 ! queue ! tee name=camera1 \
camera0. ! video/x-raw,format=I420,width=640,height=480 ! nvvideoconvert ! video/x-raw(memory:NVMM),format=NV12,width=640,height=480 ! nvstreammux0.sink_0 \
camera0. ! video/x-raw,format=I420,width=640,height=480 ! nvvideoconvert ! video/x-raw(memory:NVMM),format=NV12,width=640,height=480 ! nvstreammux0.sink_1 \
camera1. ! video/x-raw,format=I420,width=640,height=480 ! nvvideoconvert ! video/x-raw(memory:NVMM),format=NV12,width=640,height=480 ! nvstreammux0.sink_2 \
camera1. ! video/x-raw,format=I420,width=640,height=480 ! nvvideoconvert ! video/x-raw(memory:NVMM),format=NV12,width=640,height=480 ! nvstreammux0.sink_3 \
nvstreammux name=nvstreammux0 batch-size=4 batched-push-timeout=40000 width=640 height=480 ! queue ! nvinfer batch-size=4 config-file-path=deepstream-models/config_infer_primary_4_cameras.txt ! queue ! nvtracker ll-lib-file=deepstream-models/libnvds_mot_klt.so enable-batch-process=true ! queue ! nvmultistreamtiler width=640 height=480 rows=2 columns=2 ! nvvideoconvert ! nvdsosd ! queue ! tee name=deep \
deep. ! nvvideoconvert ! nvv4l2h264enc insert-sps-pps=true iframeinterval=10 ! tee name=h264 \
deep. ! nvvideoconvert ! nvv4l2h265enc insert-sps-pps=true iframeinterval=10 ! tee name=h265 \
deep. ! nvvideoconvert ! nvv4l2vp9enc ! tee name=vp9 \ 
deep. ! nvvideoconvert ! video/x-raw,width=640,height=480 ! nvjpegenc ! tee name=jpeg \
h264. ! h264parse ! matroskamux ! filesink name=file location=test-h264-0.mkv \
h265. ! h265parse ! matroskamux ! filesink name=file location=test-h265-0.mkv \
vp9. ! matroskamux ! filesink name=file location=test-vp9-0.mkv \
jpeg. ! filesink name=file location=test-snapshot0.jpg

可以看出,這種方式難於理解,不易控制、更改。有很多弊端。解決視頻流的分析有兩個重點

  • 模塊內部連接
  • 模塊控制

模塊內部連接

上述內容可以用下圖表示模塊的內部連接情況。

  • camera stream : 視頻源
  • interpipesink : pipeline內部接口(可能存在視頻複用,streammux )
  • interpipesrc :源接口 (tea)
  • 應用分支:本地視頻播放、截圖、信息發送雲端…
    在這裏插入圖片描述

模塊控制

媒體服務器的一個理想特性是能夠在一定程度上控制不同視頻流的狀態和屬性。

下圖顯示了使用GstD(RidgeRun的開源項目,處理GStreamer框架的多線程Linux守護進程)實現的媒體服務器如何通過進程間通信(IPC),進而被其他進程輕鬆控制。
在這裏插入圖片描述

Deepstream

Deepstream是基於GStreamer設計的,將很多功能抽象出插件,使得插件的插拔更快捷方便,體現出即插即用理念。

Deepstream是一個流分析工具包,由各種硬件加速插件組成,可爲任何計算機視覺和I VA應用程序提供最高吞吐量。配置方面,開發者可以利用NVIDIA容器runtime來配置自己的Deepatream應用。NVIDIA docter runtime可以啓用GPU。整個應用都可以在一個Docker Contrainer裏面打包。另外NVIDIA還提供了reference application和 orchestration recipes可以幫助你啓動任何創意項目。最後就是跟雲相連,DeepStream支持使用Azure lOT運行時與Microsoft Azure lOT雲通信。這允許與雲的無縫連接來運行分析和管理設備。

這是應用級別的整個deepsteam軟件堆棧。

  • 頂部是應用程序
  • 在應用程序層下面是SDK
  • 堆棧的下一級是CUDA X,它列出了Deepstream插件使用的各種NVIDIA軟件技術。
  • 在最底部列出了完整硬件堆棧。未來的應用程序可以在NVIDIA Jetson平臺或數據中心上運行
    在這裏插入圖片描述

NVIDIA開源了幾個主要的插件源代碼。這爲開發人員提供了更大的靈活性和控制性。 目前正在開源的是推理、解碼和消息插件。

基於開源Gstreamer平臺的即插即用架構。這使得開發人員不僅可以靈活地使用NVIDIA自帶的插件,還可以使用其他開源插件或創建自己的插件並在管道中使用它。

在這裏插入圖片描述
下圖是deepstream SDK中包含的插件列表。

  • 第一個是NVIDIA4linux2,視頻和圖像解碼和編碼插件。

  • 第二個是nvinfer,這是一個推理插件,在各種推理加速器上使用tensorRT,這樣就可以對目標檢測圖像進行分類和分割.

  • 第三個是nvtracker,部署幾個參考跟蹤器,比如KLT、IOU和NvDCF

  • 第四是nvmsgbroker,這允許使用各種協議向雲發送消息。

有關如何使用此插件的更多信息,請參考文檔中的Plugins菜單。
在這裏插入圖片描述

Jetson開發板

Deepstream的開發可以基於GPU,也可以基於Jetson。Jetson可以理解爲微型主機,它佔用空間小,就一塊板子大小,如圖。
在這裏插入圖片描述
使用Jetson,可以做很多嵌入式應用。例如將視頻分析集成到安全帽內。使得視頻分析不再必須跑在大型服務器或主機上,大大地擴大應用範圍。

示例展示

且聽下回分說~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章