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コマンドをインストールして、ソース用のリポジトリを有効にしました。
- apt-srcコマンドをインストールします。
sudo apt install apt-src
- /etc/apt/sources.listを変更します。
sudo vi /etc/apt/sources.list
- updateでリポジトリのリストを更新します。
sudo apt-src update
以上でapt-srcのインストールと準備が完了しました。
swapの作成
ソースコードをビルドする前に、swapを作成しておきます。
メモリーの搭載量の大小/空き容量の有無に関わらず、ソースコードからバイナリをビルドする場合、swapを作成しておいたほうが、トラブルは少ないかと思います。
- 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
- swapが有効かどうか確認します。
swapon -s top
OpenCVのカスタマイズとビルド
OpenCVのソースコードをダウンロード、設定をカスタマイズ後、コンパイル/リンクする流れになります。
- ビルド用のディレクトリを作成します。
mkdir build cd build
- ソースコードをダウンロードします。
apt-src install liopencv-dev
- debian/rulesファイルを編集して、設定をカスタマイズします。
vi opencv-3.2.0+dfsg/debian/rules
- ビルドを開始します。
apt-src build opencv
ビルド中に外出したのですが、1時間程度では終わらなかった感じです。のんびり待ちましょうね。
既存OpenCVのアンイストール/ビルドしたdebパッケージのインストール
ビルドが完了すると、debパッケージがたくさん出来ているかと思います。
ls -al *.deb
こちらをインストールするのですが、その前に既存のインストール済みのOpenCVをアンインストール(remove=設定は残す、またはpurge=設定も削除)しておく必要があります。
インストールをシミュレートして、重複するパッケージを探すことも可能ですが。
sudo dpkg -i --simulate *.deb
1つ1つ調べる方法では効率が悪いため、opencvに関するインストール済みのパッケージをすべてアンイストールしてしまいました。
- インストール済みのOpenCVパッケージを表示します。
export LANG=C apt list |grep installed |grep opencv
- これらの表示が無くなるまで、パッケージをアンインストールします。
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関連のパッケージをすべてアンインストールしてみました。
- ビルドしたOpenCVパッケージをdpkgコマンドでインストールします。
sudo dpkg -i *.deb
- libjs-mathjaxが無いエラーが表示され、エラー停止したためapt –fix-broken installコマンドで不足したパッケージをインストールしました。
sudo apt install libjs-mathjax sudo apt --fix-broken install
- 再度、dpkg -iコマンドを実行してパッケージをすべてインストールしました。
sudo dpkg -i *.deb
- 最後にldconfigで入れ替えたライブラリを有効にします。
sudo ldconfig
以上で、GStreamerが有効なOpenCVをインストールすることができました。
もしもOpenCVを戻したい場合は、dpkgでインストールしたdebパッケージをすべてアンインストールしてから、aptコマンドでOpenCVを入れ直せば良いかと思います。
OpenCVでGStreamerが有効かどうか実際に試した記事はこちらになります。
このような感じで、Raspberry PiカメラモジュールV2にOpenCV-GStreamer経由でアクセスして、オブジェクトのリアルタイム認識を行う事ができました。
Jetson Nanoを初期化して試したところ、OpenCVのリビルドを行わなくても、YOLOでGStreamerプラグインを使用することができました。あれれ?