iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
Software Development

深入認識DeepStream,不只是停在執行範例系列 第 12

[Day 12] 多路串流的Layout專家nvmultistreamtiler

  • 分享至 

  • xImage
  •  

我們在Day 06的時候又示範過執行一路串流,而只要你的硬體扛的住,DeepStream就能一次執行多路串流,但各路畫面是獨立的,所以就得靠nvmultistreamtiler這個元件來完成畫面的佈局。

來個範例

準備模型和設定檔

之前範例的設定檔是batch-size=1,模型也只能支援batch-size=1的推論,所以我們需要先建立一個新的模型及一份新的設定檔

參考Day 09的方式建立模型,這邊為了閱讀方便就再寫一次指令

export ONNX_FILE="/opt/nvidia/deepstream/deepstream/samples/models/Primary_Detector/resnet18_trafficcamnet_pruned.onnx"
export ENGINE_FILE="/opt/nvidia/deepstream/deepstream/samples/models/Primary_Detector/resnet18_trafficcamnet_pruned.onnx_b4_gpu0_fp16.engine"

trtexec \
    --onnx=${ONNX_FILE} \
    --saveEngine=${ENGINE_FILE} \
    --minShapes=input_1:0:1x3x544x960 \
    --optShapes=input_1:0:4x3x544x960 \
    --maxShapes=input_1:0:4x3x544x960 \
    --fp16

複製設定檔/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1/dstest1_pgie_config.txt並修改屬性

cd /opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1
cp dstest1_pgie_config.txt dstest1_pgie_config_b4.txt

選擇你心儀的文字編輯工具去修改batch-sizemodel-engine-file

[...]
model-engine-file=../../../../samples/models/Primary_Detector/resnet18_trafficcamnet_pruned.onnx_b4_gpu0_fp16.engine
[...]
batch-size=4

執行4路串流

我們修改一下先前的指令,修改一下batch-size,以及加入nvmultistreamtiler,記得nvmultistreamtiler要放在nvdsosd前面。

cd /ironman

export SOURCE="nvurisrcbin uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_720p.mp4"

gst-launch-1.0 \
${SOURCE} ! mux.sink_0 \
${SOURCE} ! mux.sink_1 \
${SOURCE} ! mux.sink_2 \
${SOURCE} ! mux.sink_3 \
nvstreammux name=mux batch-size=4 width=1280 height=720 ! \
nvinfer config-file-path=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1/dstest1_pgie_config_b4.txt ! \
nvmultistreamtiler rows=2 columns=2 ! \
nvdsosd ! \
nvv4l2h264enc ! \
h264parse ! \
mp4mux ! \
filesink location=/ironman/demo_infer_b4.mp4

完成之後就可以看到你的串流畫面變成4個啦

demo_b4

設定屬性

輸出畫面大小

元件有widthheight兩個屬性讓你調整拼接完畫面的大小,預設是1920x1080,可以根據你的應用需求去設定

畫面佈局(Layout)

剛才我們設定了rows=2columns=2,如果你沒有設定這兩個屬性,元件會依據內部寫好的算法去分配畫面的佈局。

目前元件只支援等比例佈局,但有預留一個屬性是custom-tile-config,但很不幸的目前官方文件寫著

Reserved for future use. Default: null.

所以大家可以再期待一下,有朝一日!

單畫面特寫

應用情境也會有需要單獨看某一個畫面的時候,畢竟示範的畫面都長這樣了,變成監控系統也是合情合理的對吧。元件有個屬性show-source讓我們指定要特寫哪一個畫面,預設是-1代表全畫面布局。例如我要特寫左下角那個畫面就設定show-source=2(ID從0開始算)

nvmultistreamtiler rows=2 columns=2 show-source=2

這個屬性是可以在runtime修改的,並且是執行緒安全,但是要做到這樣就得寫一個程式,我覺得有點超出我們介紹的進度,如果你會寫C的話可以嘗試從DeepStream提供的範例原始碼去修改

結語

今天的元件比較簡單,重點就是調整畫面佈局跟特寫畫面,也建議大家可以練習寫一下C程式去定時切換show-source,相信現在有AI工具的輔助是很容易的。


上一篇
[Day 11] Triton Inference Server
下一篇
[Day 13] 不懂渲染沒關係,凡事交給OSD
系列文
深入認識DeepStream,不只是停在執行範例14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言