Jetson NanoでGStreamerが有効なOpenCVをインストールするには apt-src版

Jetson NanoにはGPUが搭載されており、ハードウェアによる音声や映像の高速エンコード(圧縮)/デコード(復元)が可能のようです。

エンコード・デコード機能付きの音声/映像入出力デバイスにアクセスする方法の1つとして、ACCELERATED GSTREAMER(Linuxドライバパッケージ)が提供されています。

OpenCVからGStreamerを使用できるように、OpenCVをリビルドする手順を記録しておこうと思います。


apt-srcによるOpenCVビルド手順

既存のGStreamerが無効のOpenCVをアンイストールして、GStreamerが有効のものをビルド・インストールしたいと思うのですが。

そのような入れ替え(アンインストール)と、あとで戻す事態も考慮して、パッケージのビルドとインストールはapt-src/dpkgコマンドを使用しました。

またapt-srcコマンドを使用する場合、apt-getでインストールするパッケージと同じビルドオプションがdebian/rulesファイルに既に記載されており、カスタマイズが容易(差分だけ指定すれば良い)という利点もあります。

apt-srcのインストール

最初にapt-srcコマンドをインストールして、ソース用のリポジトリを有効にしました。

  1. apt-srcコマンドをインストールします。

  2. /etc/apt/sources.listを変更します。

    deb-src行のコメントを外して有効にします。
  3. updateでリポジトリのリストを更新します。

以上でapt-srcのインストールと準備が完了しました。


swapの作成

ソースコードをビルドする前に、swapを作成しておきます。

メモリーの搭載量の大小/空き容量の有無に関わらず、ソースコードからバイナリをビルドする場合、swapを作成しておいたほうが、トラブルは少ないかと思います。

  1. 8GBのswapファイルを作成してみました。/var/swapfileになります。

  2. swapが有効かどうか確認します。

OpenCVのカスタマイズとビルド

OpenCVのソースコードをダウンロード、設定をカスタマイズ後、コンパイル/リンクする流れになります。

  1. ビルド用のディレクトリを作成します。
  2. ソースコードをダウンロードします。

  3. debian/rulesファイルを編集して、設定をカスタマイズします。

    45行目の-DWITH_GSTREAMER=OFFをONに変更しました。
  4. ビルドを開始します。

ビルド中に外出したのですが、1時間程度では終わらなかった感じです。のんびり待ちましょうね。


既存OpenCVのアンイストール/ビルドしたdebパッケージのインストール

ビルドが完了すると、debパッケージがたくさん出来ているかと思います。

こちらをインストールするのですが、その前に既存のインストール済みのOpenCVをアンインストール(remove=設定は残す、またはpurge=設定も削除)しておく必要があります。

インストールをシミュレートして、重複するパッケージを探すことも可能ですが。

1つ1つ調べる方法では効率が悪いため、opencvに関するインストール済みのパッケージをすべてアンイストールしてしまいました。

  1. インストール済みのOpenCVパッケージを表示します。

  2. これらの表示が無くなるまで、パッケージをアンインストールします。

    このような感じで、10番のコマンドで何も表示されなくなるまで、opencv関連のパッケージをすべてアンインストールしてみました。
  3. ビルドしたOpenCVパッケージをdpkgコマンドでインストールします。

  4. libjs-mathjaxが無いエラーが表示され、エラー停止したためapt –fix-broken installコマンドで不足したパッケージをインストールしました。

  5. 再度、dpkg -iコマンドを実行してパッケージをすべてインストールしました。

  6. 最後にldconfigで入れ替えたライブラリを有効にします。

以上で、GStreamerが有効なOpenCVをインストールすることができました。

もしもOpenCVを戻したい場合は、dpkgでインストールしたdebパッケージをすべてアンインストールしてから、aptコマンドでOpenCVを入れ直せば良いかと思います。

OpenCVでGStreamerが有効かどうか実際に試した記事はこちらになります。

このような感じで、Raspberry PiカメラモジュールV2にOpenCV-GStreamer経由でアクセスして、オブジェクトのリアルタイム認識を行う事ができました。

Jetson Nanoを初期化して試したところ、OpenCVのリビルドを行わなくても、YOLOでGStreamerプラグインを使用することができました。あれれ?

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク