DeepStreamとは何なのか
最近なぜかまたDeepStream関連のお話をすることが多いのですが、DeepStreamがそもそも何なのかというのを勘違いされてるかたがとても多い気がしています。
「GStreamerをNVIDIAが拡張したもの」と一言で言われることが多く、これが誤解を招いている気がします。
というのも、deepstream-appというのがアプリケーション本体で、そこにconfigパラメータを渡して実行するものと思っているかたがそれなりにいらっしゃいます。
DeepStreamは独自のアプリケーションではありません。
GStreamer上でGPUを使って動かすことができる、推論やトラッキング等を行うためのNVIDIA独自のプラグイン群なのです。
deepstream-appはNVIDIA製のリファレンスアプリとしてconfigに記載された内容を読み込んでパイプラインを構成するアプリケーションであるというだけで、これを使わなくても従来のGStreamerを使うのと同じようにCで記述をすれば良いだけです。(5.0以降はPythonもサポートされました)
それを意識しながら、deepstream-test1-appあたりのソースを眺めてみてください。
deepstream-appのソースはconfigの記述でかなり柔軟にいろいろできるよう書かれているので、test系のソースの方がシンプルで分かりやすいと思います。
例えば以下はPython版のdeepstream-test1-appのソースの抜粋ですが、
import gi gi.require_version('Gst', '1.0') from gi.repository import GObject, Gst
でGStreamerを使用できるようにGstモジュールをインポートし、def mainの中で
# L137 パイプライン作成 pipeline = Gst.Pipeline() # L168他 エレメントの定義(nvinferがDeepStreamの推論プラグイン) pgie = Gst.ElementFactory.make("nvinfer", "primary-inference") # L198 エレメントへのプロパティのセット(nvinferにconfigで書かれた情報を渡す) pgie.set_property('config-file-path', "dstest1_pgie_config.txt") # L205他 パイプラインへの追加 pipeline.add(pgie) #L226,227他 エレメントのリンク streammux.link(pgie) pgie.link(nvvidconv)
というようにGStreamerのパイプライン実行の中でDeepStreamのプラグインであるNVinferを使うことができます。
読みやすいようにPythonのソースを持ってきましたが、Cでも同様です。
拙い説明ですが、deepstream-appを使ってどう実装したら…と考えていた方は、もっと簡単に独自実装できるのだということがお分かりいただけましたでしょうか。
もちろん、独自のDeepStreamプラグイン(GPUを使用したGStreamerプラグイン)を作ることも可能です。
このあたりはまた別途機会があればご紹介します。