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コマンドをインストールします。
    sudo apt install apt-src

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

    deb-src行のコメントを外して有効にします。

  3. updateでリポジトリのリストを更新します。
    sudo apt-src update

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


swapの作成

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

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

  1. 8GBのswapファイルを作成してみました。/var/swapfileになります。
    sudo dd if=/dev/zero of=/var/swapfile bs=1024 count=8M
    sudo chmod 0600 /var/swapfile
    sudo mkswap /var/swapfile
    sudo swapon /var/swapfile

  2. swapが有効かどうか確認します。
    swapon -s
    top

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

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

  1. ビルド用のディレクトリを作成します。
    mkdir build
    cd build
  2. ソースコードをダウンロードします。
    apt-src install liopencv-dev

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

    45行目の-DWITH_GSTREAMER=OFFをONに変更しました。

  4. ビルドを開始します。
    apt-src build opencv

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


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

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

ls -al *.deb

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

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

sudo dpkg -i --simulate *.deb

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

  1. インストール済みのOpenCVパッケージを表示します。
    export LANG=C
    apt list |grep installed |grep opencv

  2. これらの表示が無くなるまで、パッケージをアンインストールします。
    sudo apt-get purge libopencv libopencv-apps-dev python3-opencv
    sudo apt-get purge libopencv-apps0d
    sudo apt-get purge libopencv-calib3d3.2
    sudo apt autoremove

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

  3. ビルドしたOpenCVパッケージをdpkgコマンドでインストールします。
    sudo dpkg -i *.deb

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

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

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

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

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

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

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

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

スポンサーリンク

フォローする

スポンサーリンク