2013/03/18

Raspberry Pi にOpenCV をインストール

 OpenCVを使うと,難しい画像処理も簡単なコードで実現できるみたいです。というわけで,Raspberry Piにインストールしてみました。やり方がなかなかわからず,あーでもないこーでもないとしているうちになんとかできたので,手順をメモしておきます。



 RaspbianとOpenCVのバージョンは下記のとおりです。

  • 2013-02-09-wheezy-raspbian
  • OpenCV 2.4.4 および 2.3.1

 インストールには,『①ソースコードをRaspberry Pi上でビルドする方法』と,『②apt-getコマンドを使う方法』とがあります。「Raspberry Pi OpenCV」などで検索すると①の方法がヒットするため,最初はこの方法で頑張っていたのですが,Raspberry Pi上でのビルドには4~10時間かかるので注意です(10時間待ったあとでビルドの失敗に気づいたときとか…もう…ね…)。ただ,最新のOpenCVをインストールできるというメリットがあります。現在はOpenCV 2.4.4が最新です。
 ②の方法は,①の方法で成功した後で知りました。この方法なら,インストールに30分もかかりません(orz)。ただし,OpenCVは少し古いバージョンになります。現在は,OpenCV 2.3.1がインストールされます。


①ソースコードをRaspberry Pi上でビルドする方法

 下記サイトを参考に作業を進めました。


 作業の前に,インストール済みのパッケージを最新にしておくことをオススメします。

 ~ $ sudo apt-get update
 ~ $ sudo apt-get upgrade

 ビルドに必要なパッケージをインストールします。パッケージ多すぎ…(python2.6とか必要なのでしょうか?実行には最初からインストールされているpython2.7が使用されます…)。とりあえず指示されているものをすべてインストール。
 追記:python2.6関連のパッケージは無くてもOKのようなので除外しました。除外したパッケージ:libpython2.6 python2.6-dev

 ~ $ sudo apt-get -y install build-essential cmake cmake-qt-gui pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 libpnglite-dev zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev libtiff4 libtiffxx0c2 libtiff-tools
 ~ $ sudo apt-get -y install libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev libavcodec53 libavformat53 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils swig libv4l-0 libv4l-dev python-numpy python-dev libgtk2.0-dev pkg-config

 私の場合,一度でインストールできないことがありました。apt-get updateしてといわれるので,updateしてからinstallすればOKです。
 ソースのダウンロード&解凍。私はホームディレクトリにダウンロードしました。

 ~ $ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.4/OpenCV-2.4.4.tar.bz2
 ~ $ tar -xvjpf OpenCV-2.4.4.tar.bz2

 ビルド用フォルダを作って移動。

 ~ $ cd OpenCV-2.4.4
 ~ $ mkdir build
 ~ $ cd build

 cmakeします。mitchTECHのサイトとはちょっと違うようで,下記サイトのようにビルドオプションをBUILD_NEW_PYTHON_SUPPORTにします。最後のピリオド2つ(..)も必要なので注意です。


 ~ $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..

 cmakeを実行すると,ビルドに不足しているパッケージなどが表示されます(version_string.tmpにも同じ内容が記録されます)。色々ずらーっと表示されますが,この時点では,『FFMPEG: NO』となっているはずです。FFMPEGは動画や音声の変換ソフトで,カメラや画像処理に必須かわかりませんが,上記のD's Lab Logのサイトでは『FFMPEG: YES』となっているので念のためlibswscale-devパッケージを追加しました。(NOのままビルドできるかは,試していないので不明です…)

 ~ $ sudo apt-get install libswscale-dev

 改めてcmakeすると,『FFMPEG: YES』になります。私の環境でcmakeした結果は下記のようになりました。

General configuration for OpenCV 2.4.4 =====================================
  Version control:               unknown

  Platform:
    Host:                        Linux 3.6.11+ armv6l
    CMake:                       2.8.9
    CMake generator:             Unix Makefiles
    CMake build tool:            /usr/bin/make
    Configuration:               RELEASE

  C/C++:
    Built as dynamic libs?:      YES
    C++ Compiler:                /usr/bin/c++  (ver 4.6.3)
    C++ flags (Release):         -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -O3 -DNDEBUG  -DNDEBUG
    C++ flags (Debug):           -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -g  -O0 -DDEBUG -D_DEBUG -ggdb3
    C Compiler:                  /usr/bin/gcc
    C flags (Release):           -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -O3 -DNDEBUG  -DNDEBUG
    C flags (Debug):             -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -g  -O0 -DDEBUG -D_DEBUG -ggdb3
    Linker flags (Release):      
    Linker flags (Debug):        
    Precompiled headers:         YES

  OpenCV modules:
    To be built:                 core imgproc flann highgui features2d calib3d ml video objdetect contrib nonfree photo legacy gpu python stitching ts videostab
    Disabled:                    world
    Disabled by dependency:      -
    Unavailable:                 androidcamera java ocl

  GUI: 
    QT 4.x:                      NO
    GTK+ 2.x:                    YES (ver 2.24.10)
    GThread :                    YES (ver 2.32.4)
    GtkGlExt:                    NO
    OpenGL support:              NO

  Media I/O: 
    ZLib:                        /usr/lib/arm-linux-gnueabihf/libz.so (ver 1.2.7)
    JPEG:                        /usr/lib/arm-linux-gnueabihf/libjpeg.so (ver 80)
    PNG:                         /usr/lib/arm-linux-gnueabihf/libpng.so (ver 1.2.49)
    TIFF:                        /usr/lib/arm-linux-gnueabihf/libtiff.so (ver 42 - 3.9.6)
    JPEG 2000:                   build (ver 1.900.1)
    OpenEXR:                     build (ver 1.7.1)

  Video I/O:
    DC1394 1.x:                  NO
    DC1394 2.x:                  YES (ver 2.2.0)
    FFMPEG:                      YES
      codec:                     YES (ver 53.35.0)
      format:                    YES (ver 53.21.1)
      util:                      YES (ver 51.22.1)
      swscale:                   YES (ver 2.1.0)
      gentoo-style:              YES
    GStreamer:                   NO
    OpenNI:                      NO
    OpenNI PrimeSensor Modules:  NO
    PvAPI:                       NO
    GigEVisionSDK:               NO
    UniCap:                      NO
    UniCap ucil:                 NO
    V4L/V4L2:                    Using libv4l (ver 0.8.8)
    XIMEA:                       NO
    Xine:                        NO

  Other third-party libraries:
    Use IPP:                     NO
    Use Eigen:                   NO
    Use TBB:                     NO
    Use OpenMP:                  NO
    Use GCD                      NO
    Use Concurrency              NO
    Use C=:                      NO
    Use Cuda:                    NO
    Use OpenCL:                  NO

  Python:
    Interpreter:                 /usr/bin/python (ver 2.7.3)
    Libraries:                   /usr/lib/libpython2.7.so (ver 2.7.3)
    numpy:                       /usr/lib/pymodules/python2.7/numpy/core/include (ver 1.6.2)
    packages path:               lib/python2.7/dist-packages

  Java:
    ant:                         NO
    JNI:                         NO
    Java tests:                  YES

  Documentation:
    Build Documentation:         NO
    Sphinx:                      NO
    PdfLaTeX compiler:           NO

  Tests and samples:
    Tests:                       YES
    Performance tests:           YES
    C/C++ Examples:              YES

  Install path:                  /usr/local

  cvconfig.h is in:              /home/pi/OpenCV-2.4.4/build
-----------------------------------------------------------------

 いよいよビルドです。cmake-guiコマンドを使うと,ビルドのオプション(サンプルプログラムをビルドするか,など)を簡単に指定できるようですが,私の環境ではcmake-guiがうまく動かず,どのパッケージを除外してもよいか不明だったため,デフォルトのまますべてビルドしてしまいました^^;結果,10時間も待つはめに…。
 ちなみに,SDカードはClass4でもClass10でも,ビルドにかかる時間はほぼ一緒でした。純粋にCPUのスペックが低いからこんなにかかるんですね…。

 ~ $ make
 ~ $ sudo make install

 以上で終了です。インストール手順を紹介したサイトによっては,この後にbash.bashrcへのパス追加が必要とありますが,バージョンの違いのためか,やらなくてもサンプルプログラムは動きました。
 この方法では,約1.8GByteのディスク容量を消費しました。


②apt-getコマンドを使う方法

 apt-getを使うとコマンド一発で終わってしまいます。とっても便利。

 ~ $ sudo apt-get install libopencv-dev

 インストールされたOpenCVのバージョンは,/usr/include/opencv2/core/version.hpp内に記述されています。

#define CV_MAJOR_VERSION    2
#define CV_MINOR_VERSION    3
#define CV_SUBMINOR_VERSION 1

 この場合,バージョンは2.3.1です。
 pythonからOpenCVを使うには,追加でパッケージが必要です。

 ~ $ sudo apt-get install python-opencv

 以上で終了です。約200MByteのディスク容量を消費しました。


 ①と②では,②のほうが圧倒的にお手軽なので,とにかく試してみたい方におすすめです。マイナーバージョンの違いがどれだけ影響があるかは不明ですが…。
 OpenCV2.3と2.4の違いは公式ページに載っています。


 せっかく10時間も待ったので,2.4.4のほうを使っていこうと思います。

0 件のコメント:

コメントを投稿