iT邦幫忙

2026 iThome 鐵人賽

DAY 13
0
Software Development

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

[Day 13] 不懂渲染沒關係,凡事交給OSD

  • 分享至 

  • xImage
  •  

今天要介紹DeepStream的視覺化元件nvdsosd。它的工作就是接收DeepStream設計好的Metadata渲染到畫面上,並且渲染工作是用GPU完成的,讓速度再進一步的提升,畢竟這是GPU的老本行。

核心程式庫

nvdsosd是基於NvOSD這個程式庫封裝為GStreamer元件,而NvOSD已經將DeepStream會用到的渲染任務都抽象化了,讓開發者可以不必理會渲染命令的調度,只需要輕鬆地將Bounding Box、文字、多邊形等資訊組合後傳給NvOSD,漂亮的畫面就渲染完畢了。有興趣深入研究的話,連結在這裡NvOSD API

deepstream-app

因為nvdsosd提供的屬性比較少,很多參數必須寫程式去修改,介紹起來挺繁瑣的,好在DeepStream提供了一個可以應付大多情境的程式,讓我們可以透過修改設定檔就完成那些繁瑣的工作。

我們建立一個設定檔當基底,詳細的設定檔說明請參考這篇deepstream-app

建立檔案/ironman/configs/osd_demo.txt

mkdir -p /ironman/configs
cat <<EOF > /ironman/configs/osd_demo.txt
[source0]
enable=1
# MultiURI
type=3
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
num-sources=1

[streammux]
batch-size=1
width=1920
height=1080

[primary-gie]
enable=1
gie-unique-id=1
config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1/dstest1_pgie_config.txt

# border color format: bbox-border-color<class-id>=<R>;<G>;<B>;<A>
# car
bbox-border-color0=0;1;0;1
# bicycle
bbox-border-color1=0;0.5;0.5;1
# person
bbox-border-color2=0.5;0;0.5;1
# road_sign: don't plot, remain empty

# nvinfer
plugin-type=0

[osd]
enable=1
border-width=3
# default color for all objects
text-size=12
text-color=1;1;1;1
display-text=1
display-bbox=1
font=Serif

[tiled-display]
# reserved for multi-sources demo
enable=0
rows=2
columns=2
width=1920
height=1080

[sink0]
enable=1
# Encode + File Save
type=3
# MP4
container=1
# H.264
codec=1
output-file=/ironman/osd_demo.mp4
EOF

渲染示範

有設定檔之後,透過指令運行程式

deepstream-app -c /ironman/configs/osd_demo.txt

修改Bounding Box顏色

因為Bounding Box是由primary-gie產生的,所以顏色也在這邊指定。那deepstream-app這邊的設定方式是依照class-id來指定顏色,文件描述是每個class-id都要設定顏色,沒寫的就不會畫出來。

來看一下修改顏色的結果吧

bbox_color

修改邊界寬度(Border Width)

修改設定檔[osd]群組的border-width

border-width=6

border_width

不畫文字

修改設定檔[osd]群組的display-text

display-text=0

no_display_text

多路渲染

這也是元件厲害的地方,多路渲染照樣是輕輕鬆鬆。我們修改以下幾個地方

[source0]
num-source=4

[nvstreammux]
batch-size=4

[primary-gie]
config-file=/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1/dstest1_pgie_config_b4.txt

[tiled-display]
enable=1

然後啟動指令加上-t,不加的話不會畫文字

-t, --tiledtext Display Bounding box labels in tiled mode

deepstream-app -c /ironman/configs/osd_demo.txt -t

multi_sources

結語

這個元件的介紹就到這邊啦,屬性其實也不多,大家可以嘗試玩看看哦。如果想在更有挑戰性一點,可以去研究要怎麼透過寫程式的方式修改OSD的屬性。


上一篇
[Day 12] 多路串流的Layout專家nvmultistreamtiler
系列文
深入認識DeepStream,不只是停在執行範例13
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言