今天要介紹DeepStream的視覺化元件nvdsosd。它的工作就是接收DeepStream設計好的Metadata渲染到畫面上,並且渲染工作是用GPU完成的,讓速度再進一步的提升,畢竟這是GPU的老本行。
nvdsosd是基於NvOSD這個程式庫封裝為GStreamer元件,而NvOSD已經將DeepStream會用到的渲染任務都抽象化了,讓開發者可以不必理會渲染命令的調度,只需要輕鬆地將Bounding Box、文字、多邊形等資訊組合後傳給NvOSD,漂亮的畫面就渲染完畢了。有興趣深入研究的話,連結在這裡NvOSD API。
因為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是由primary-gie產生的,所以顏色也在這邊指定。那deepstream-app這邊的設定方式是依照class-id來指定顏色,文件描述是每個class-id都要設定顏色,沒寫的就不會畫出來。
來看一下修改顏色的結果吧

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

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

這也是元件厲害的地方,多路渲染照樣是輕輕鬆鬆。我們修改以下幾個地方
[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

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