OpenCV 4をRaspberry Piでビルドする
OpenCVという画像処理のライブラリを久しぶりに触っていました。Raspberry Piでは使わないだろうと思っていたのですが、動けば何かに使うかもしれないので動かしてみます。
レポジトリからインストールもできるようですが、最新版を使いたいので自分でビルドする練習をしてみます。すぐに忘れそうなのでシェルスクリプトにしておきました。
OpenCVをビルドする準備
今回はRaspbian Stretch with desktop Version:November 2018に
OpenCV4.0.1を
ビルドしインストールします。
pythonのバージョンは3.5.3です。
16GB以上のSDメモリーカードを使う
OpenCVのビルドは多くのファイルを使います。SDメモリーカードは16GB以上のものを使います。8GBでは容量が足りません。また、ランダムアクセス速度が速いSDカードを使いましょう。遅いSDカードではビルドがなかなか終わりません。
関連記事:SAMSUNGのmicroSD EVO PlusはRaspberry Pi用に丁度良いです
SAMSUNGのEVO Plusは価格も安く高速でお薦めです。
A1とかA2対応のものがより良さそうですが容量の大きなものしかありません。またAmazonが販売するものでないと安心して買えません。偽物が多いようですね。
OpenCV 4をビルドする
OpenCVをビルドする手順は次の通りです- 必要なライブラリをインストールする
- OpenCVソースファイルを取得する
- pythonの仮想環境を作る(python3)
- cmakeでビルドの準備をする
- swapサイズを2GBにする
- OpenCVのビルドをする
- OpenCVをインストールする
- swapサイズを元に戻す
- OpenCVのライブラリをpythonへリンクする
レポジトリの更新
レポジトリを更新します。sudo apt update sudo apt -y upgrade
ライブラリのインストール
ビルドに必要なライブラリをインストールします。sudo apt-get install -y libjpeg-dev libpng-dev libtiff-dev sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt-get install -y libxvidcore-dev libx264-dev sudo apt-get install -y libgtk-3-dev sudo apt-get install -y libcanberra-gtk* sudo apt-get install -y libatlas-base-dev gfortran
OpenCVソースの取得
OpenCVのソースファイルを取得します。ソースファイルは~/Downloadsファイルに置きます。
cd ~/Downloads/ git clone --depth 1 --branch 4.0.1 https://github.com/opencv/opencv.git git clone --depth 1 --branch 4.0.1 https://github.com/opencv/opencv_contrib.gitこの記事公開時の最新バージョンは4.0.1でした。
python仮想環境の作成
pythonはバージョン2とバージョン3で仕様が大きく異なります。この区別が曖昧だとトラブルの元になるためどちらかのバージョンだけが動く仮想環境を作ります。ここではバージョン3を使います。仮想環境を管理するツールを入れます。
sudo pip install virtualenv virtualenvwrapper sudo pip3 install virtualenv virtualenvwrapper~/.profileファイルを編集し次の文を追加します。
# virtualenv and virtualenvwrapper export WORKON_HOME=$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh仮想環境の名前をCVとして作ります。
source ~/.profile mkvirtualenv cv -p python3仮想環境CVへ入ります。
workon cv仮想環境へnumpyをインストールします。
pip install numpy
ビルドの準備
ビルド用ディレクトリを作ります。cd ~/Downloads/opencv mkdir build cd buildビルド条件を設定します。
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib/modules \ -D ENABLE_NEON=ON \ -D ENABLE_VFPV3=ON \ -D BUILD_TESTS=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D BUILD_EXAMPLES=OFF ..
swapファイルサイズの拡張
ビルドの最後で大量のメモリーを必要とします。swapファイルサイズを2GBへ拡張しておかないとビルドに失敗するでしょう。Raspberry Pi 3 Model Bの場合、使うswapファイルサイズは約1.5GBになります。関連記事:Raspbianで外付けドライブへswapファイルを移動する正攻法
sudo dphys-swapfile swapoff sudo dphys-swapfile uninstall sudo sed -i.bak 's/^#\?\(CONF_SWAPSIZE=\).*/\12048/' /etc/dphys-swapfile sudo dphys-swapfile setup sudo dphys-swapfile swapon
ビルド
ビルドします。Raspberry Pi 3 Model Bの場合で3時間強かかりました。make -j4表示が100%になった所でまだ半分くらい完了です。ここからswapファイルがどんどん大きくなります。個別にコンパイルされたオブジェクトファイルを集めて最後に組み立てるのに大量のメモリが必要なようです。swapファイルを置くドライブの性能でビルドの完了する時間が大きく変わるでしょう。
OpenCVのインストール
sudo make install sudo ldconfig
swapファイルサイズを元に戻す
swapファイルのサイズを100MBに戻します。sudo dphys-swapfile swapoff sudo dphys-swapfile uninstall sudo sed -i 's/^#\?\(CONF_SWAPSIZE=\).*/\1100/' /etc/dphys-swapfile sudo dphys-swapfile setup sudo dphys-swapfile swapon
OpenCV共有オブジェクトのリンク
OpenCVの共有オブジェクトをリンクします。cd ~/.virtualenvs/cv/lib/python3.5/site-packages/ ln -s /usr/local/lib/python3.5/site-packages/cv2/python-3.5/cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so cd ~
OpenCVサンプルを動かしてみる
OpenCVのサンプルを動かしてみます。再起動後やターミナルを開き直した時は毎回次の手順でpython仮想環境へ入ります。
source ~/.profile workon cvサンプルディレクトリへ移動します。
cd ~/Downloads/opencv/sample/pythondemo.pyを動かします。
python demo.pyこんなウインドウが表示されるでしょう。
demo.pyの画面 |
無事にデモが動けばOpenCVのビルドは成功です。
OpenCVビルドスクリプト
今回の手順のスクリプトを作りました。この記事公開時ではOpenCV 4.0.1とpython 3.5用になっています。バージョンが新しくなっている場合は適時スクリプトを修正してみてください。OpenCV-4-build-script-on-Raspbian-Stretch | GitHub
使い方
スクリプトを~/Downloadsディレクトリにダウンロードし実行します。cd ~/Downloads git clone https://github.com/SignalFlagZ/OpenCV-4-build-script-on-Raspbian-Stretch.git cd OpenCV-4-build-script-on-Raspbian-Stretch ./build-OpenCV.sh4時間ほどして終わったら前節のサンプルを動かす手順で動作確認してください。
ビルドの様子
OpenCVのビルドはとても時間がかかります。フリーズしたのか?と不安になるでしょう。そこでビルドの様子をビデオにしてみました。参考にどうぞ。まとめ
OpenCVのビルドは比較的簡単にできます。注意点は、SDメモリーカードは16GB以上、2GBほどへswapファイルの拡大が必要な事です。Raspberry Piでやるには少し重すぎますね。今回はRaspberry Pi 3 Model Bでビルドしました。メモリーが1GB搭載されているので比較的速くビルドできるでしょう。RPi 2やRPi Zeroでは何時間かかってしまうのか・・・。
swapファイルはランダムアクセスの高速な外付けドライブへ置くと良いかもしれません。
今回使ったRPi 3Bには小さいヒートシンクを付けています。冷却が間に合わずビルド中に高温警告が表示されてしまいました。ヒートシンクにわずかでも風を当てれば警告は消えました。RPiを小さいケースに入れたままビルドするのは避けましょう。
--
返信削除(´・ω・`)今月とんでもない事に気づきました
Google+ のアルバム アーカイブ内の写真と動画は、2019 年 4 月 2 日以降に削除されます。
(´・ω・`)bloogerからUPした画像、全部削除されちゃうって……
ご無沙汰です! これとても判りにくいですよね。
削除Google アルバム アーカイブの中にGoogle+のアルバムアーカイブやBloggerのアルバムアーカイブがあるようです。
つまり、Google+のアルバムは消えるけどBloggerのアルバムは消えないと私は解釈してますけど・・・
安全のためダウンロードしようかとも思いますが、bloggerのリンクを直すなんてやってられないですよね。
ここを開くとGoogle+の”投稿した写真”とBloggerの”Bloggerの写真”は別のフォルダとして表示されていますよね。
削除https://get.google.com/albumarchive/
(´;ω;`)今まで一度も、Google+を利用して漫画を投稿した事がなかったから、気づきませんでした……
削除別々になっている事……
( ´ ω ` )ありがとうございます