NVIDIA DeepStream SDKは、DeepLearningを用いた動画認識用のSDKで、物体認識や動画像処理などを高速に行うことができます。Jetson向けにも配布をしており、下記リンクからダウンロードすることができます。

ダウンロードしたファイルには、サンプルコードがいくつか入っていますが、自分でカスタマイズをする際に、概要を理解しておく必要があるかと思い、まとめてみました。

まずは、DeepStream SDKを扱うにあたり、欠かせないのがGStreamerです。DeepStream SDKはGStreamerにプラグインを提供しており、c言語で書かれたサンプルコードもGStreamerを前提に組まれているためです。

GStreamerとは?

GStreamerとは、オープンソースのマルチメディア処理ソフトウェアです。音声・動画などのマルチメディアを入力し、変換・切り抜きなどの処理をした後、ファイルやストリーミング等で出力することができます。

ffmpegとの違い

マルチメディア処理のソフトウェアというとffmpegをまず最初に思い浮かべる方も多いかと思います。

概ね「ffmpegに似たようなもの」という理解で良いとは思いますが、ffmpegと比べた時の利点としては、「GStreamerの方がプラグインが多く、カスタマイズ性が高い」という点かと思います。

ffmpegは単体でデコード/エンコード/フィルタリングなど、様々な機能を含んでいるのに対し、GStreamerが提供するのはフレームワークのみで、基本的にプラグインを入れないと何もできません。逆に、GStreamerの方がカスタマイズ性が高いとも言えそうです。

ffmpegはコマンドが簡易なので、パッと処理をしたい時には便利ですが、色々な機能を組み合わせて自前のマルチメディア処理ソフトウェアを構築する際はGStreamerの方が良いと考えられます。(現にDeepStream SDKもGStreamerにしかプラグイン提供していないので)

GStreamerの基本構造

GStreamerの基本構造は下記URLに記載されています。

oggプレイヤーの例

マルチメディアの処理はpipelineという一連の処理として表され、それぞれの要素をelementと呼んでいます。また、それぞれのelementの接続部分をpadと呼んでいて、src padから出力されたデータをsink padで受け取るようになっています。

上記のoggプレイヤーの例では、oggのファイルをsource elementが読み込み、ogg-demuxerが音声と動画に分解し、それぞれのdecoder elementがでコードを行い、スピーカーとディスプレイに出力されるというpipelineを示しています。

communication

また、src padとsink padでやりとりされているオブジェクトのことをbufferと呼んでいます。各elementからは処理の状態の情報などがアプリケーション側に送られますが、これをmessageと呼んでいます。

現在の再生時間やファイルの長さなどの情報を取得する際はqueryをアプリケーション側から投げると同期的にレスポンスが返却されます。

GstElementについて

GStreamerでは、各要素のことをGstElementと呼んでおり、pipeline、source、sinkなど全てGstElementによって表されます。

pipeline

全体の流れを作るGstElementです。このpipelineをまず作成した上で、各処理をこのpipelineに追加していき、pipelineを開始することでストリーム処理が開始されます。

source element

source element

マルチメディアのインプットになります。データの受け入れは行わず、生成のみを行います。例えば、Webカメラからのデータ読み込み・動画ファイルの読み込み等を行うことが可能です。

filter

filter

filterはその名の通り、入れたデータを変換した上で次に渡すGstElementになります。例えば、動画形式の変換・画角の変換・カラーコード変換等の処理を行うことが可能です。

demuxer

demuxer

demuxerは1つのインプットに複数のマルチメディア要素が含まれている場合に分けてくれるGstElementです。例えば、動画ファイルを読み込んだ際、音声データと動画データに分けることが可能です。

sink

sink

sinkは処理後のマルチメディアをどのようにアウトプットするかを定義するGstElementです。例えば、ファイル保存・ウィンドウで再生・RTSPによるストリーミング配信などのアウトプットをすることが可能です。

DeepstreamGstreamerJetson nano

Related Posts

DCモータコントローラの比較!モータに合ったコントローラを選ぼう
DCモータコントローラの比較!モータに合ったコントローラを選ぼう
DCモータを自分で制御しようとするとHブリッジ回路から自作しなければならず、大きな手間がかかってしまいます。特に走行するロボットを製作するような、複数のDCモータを制御しなければならない場合には、あまりDCモータの制御を1から構築した...
Read More
DM542を使ってステッピングモータをArduinoで動作させる
DM542を使ってステッピングモータをArduinoで動作させる
動画による解説はこちら ステッピングモータコントローラ DM542を使ってステッピングモータを動作させる方法について解説をしていきます。   分解能(ステップ角)について 分解能とは1回のパルス波で何度回転するか、といった指標になり...
Read More
DIYや電子工作の際に役立つ便利なモジュール集
DIYや電子工作の際に役立つ便利なモジュール集
電子工作の際、基礎的な機能から自分で一から組み立てるとそれなりに時間と労力がかかってしまうので、一連の機能を持った便利モジュールを導入してしまいましょう。 本ページでは電子工作の際に役立つモジュールを紹介します。随時更新予定です...
Read More

サイトについて

RoboStationは誰でも手軽にロボットを製作できるようにすることを目的としたEC・ハウツーサイトです。