Edited at

Open CV 3.1 + Ubuntu クロスコンパイル用 OPENCVライブラリビルド備忘録

More than 1 year has passed since last update.

かんたんに構築できると思ったら少しハマってしまったこと。

リモートデバッグ環境構築はこちら

OpenCVのBuildはここをご参考にさせていただきました。

リモートデバッグするために必要な項目を載せています。

環境

- Host : macOS Sierra

- VM : Ubuntu Gnome 16.04 LTS 32bit

- Target : Raspberry Pi


1. 依存ライブラリのインストール


1.1 リポジトリアップデート


Terminal

sudo apt-get update



1.2 Build 用


Terminal

sudo apt-get install build-essential cmake pkg-config



1.3 OpenGL 用


Terminal

sudo apt-get install mesa-utils



1.4 画像関連


Terminal

sudo apt-get install libjpeg-dev \

libtiff5-dev \
libpng12-dev \
libjasper-dev \
libavcodec-dev \
libavformat-dev \
libswscale-dev \
libv4l-dev \
libxvidcore-dev \
libx264-dev
libgtk2.0-dev \


1.5 高速化処理


Terminal

sudo apt-get install libatlas-base-dev gfortran libeigen3-dev


高速化する手段はまだまだあるらしく、現在調査中。。


1.6 ドライバ


Terminal

sudo apt-get install libv4l-dev


ちなみに V4L1はCMAKEの結果をみると動作しない模様 (未確認ですが)

V4L2で動作するWebカメラを選びましょう。

現在はLogicool C270を使っています


2. OpenCVのダウンロード

OpenCVと拡張モジュールをダウンロードします


Terminal

mkdir opencv

cd opencv

wget -O opencv-3.1.0.zip https://github.com/opencv/opencv/archive/3.1.0.zip
wget -O opencv_contrib-3.1.0.zip https://github.com/opencv/opencv_contrib/archive/3.1.0.zip

unzip opencv-3.1.o.zip
unzip opencv_contrib-3.1.0.zip


opencv_contrib は必要でない人もいると思うので、各自判断して下さい。

CMAKEをするときにcontribオプションの説明を載せておきます。


3. Build環境の構築

CMAKEをしたいところですが、makeをするコンパイラを設定する必要があります。

aptにビルドするためのARMコンパイラがあります。

c言語とc++言語用です。


Terminal

sudo apt-get install g++-arm-linux-gnueabihf

sudo apt-get install gcc-arm-linux-gnueabihf

次にtoolchain.cmakeファイルの修正を行います。

今回はARM用のビルドを実施しますので以下のToolchainの修正をして下さい。


Terminal

sudo vi  /opencv-3.1.0/platforms/linux/arm-gnueabi.toolchain.cmake

find_program(CMAKE_C_COMPILER NAMES arm-linux-gnueabihf-gcc)
find_program(CMAKE_CXX_COMPILER NAMES arm-linux-gnueabihf-g++)


次にBuildするフォルダの作成を行います。


Terminal

mkdir build

cd build


4. cmakeからinstallまで

cmake を実行します。

今回の設定は

高速化 NEON TBB の有効化

QTはOFF

toolchainをARM用に指定

contribを有効

zlibのエラー対策でARのバイナリを指定します

//2017/05/14 修正 toolchainの指定間違え修正


Terminal

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_TOOLCHAIN_FILE=~/opencv/opencv-3.1.0/platforms/linux/arm-gnueabi.toolchain.cmake -D CMAKE_AR=/usr/arm-linux-gnueabihf/bin/ar -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib-3.1.0/modules -D ENABLE_NEON:BOOL=ON -D WITH_TBB=ON -D BUILD_TBB=ON -D WITH_QT=OFF -D WITH_OPENGL=OFF -D SOFTFP=ON  ..


実行結果は


Terminal

-- General configuration for OpenCV 3.1.0 =====================================

-- Version control: unknown
--
-- Platform:
-- Host: Linux 4.8.0-46-generic i686
-- Target: Linux 1 arm
-- CMake: 3.5.1
-- CMake generator: Unix Makefiles
-- CMake build tool: /usr/bin/make
-- Configuration: RELEASE
--
-- C/C++:
-- Built as dynamic libs?: YES
-- C++ Compiler: /usr/bin/arm-linux-gnueabihf-g++ (ver 5.4.0)
-- C++ flags (Release): 省略

-- C Compiler: /usr/bin/arm-linux-gnueabihf-gcc
-- C flags (Release): 省略
-- C flags (Debug): 省略
-- Linker flags (Release): -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now
-- Linker flags (Debug): -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now
-- Precompiled headers: YES
-- Extra dependencies: dl m pthread rt
-- 3rdparty dependencies: zlib libjpeg libwebp libpng libtiff libjasper IlmImf libprotobuf tbb
--
-- OpenCV modules:
-- To be built: core flann imgproc ml photo reg surface_matching video dnn fuzzy imgcodecs shape videoio highgui objdetect plot superres ts xobjdetect xphoto bgsegm bioinspired dpm face features2d line_descriptor saliency text calib3d ccalib datasets rgbd stereo structured_light tracking videostab xfeatures2d ximgproc aruco optflow stitching
-- Disabled: world contrib_world
-- Disabled by dependency: -
-- Unavailable: cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python2 python3 viz cvv hdf matlab sfm
--
-- GUI:
-- QT: NO
-- GTK+: NO
-- GThread : NO
-- GtkGlExt: NO
-- OpenGL support: NO
-- VTK support: NO
--
-- Media I/O:
-- ZLib: zlib (ver 1.2.8)
-- JPEG: libjpeg (ver 90)
-- WEBP: build (ver 0.3.1)
-- PNG: build (ver 1.6.19)
-- TIFF: build (ver 42 - 4.0.2)
-- JPEG 2000: build (ver 1.900.1)
-- OpenEXR: build (ver 1.7.1)
-- GDAL: NO
--
-- Video I/O:
-- DC1394 1.x: NO
-- DC1394 2.x: NO
-- FFMPEG: NO
-- codec: NO
-- format: NO
-- util: NO
-- swscale: NO
-- resample: NO
-- gentoo-style: NO
-- GStreamer: NO
-- OpenNI: NO
-- OpenNI PrimeSensor Modules: NO
-- OpenNI2: NO
-- PvAPI: NO
-- GigEVisionSDK: NO
-- UniCap: NO
-- UniCap ucil: NO
-- V4L/V4L2: NO/YES
-- XIMEA: NO
-- Xine: NO
-- gPhoto2: NO
--
-- Parallel framework: TBB (ver 4.3 interface 8002)
--
-- Other third-party libraries:
-- Use IPP: NO
-- Use VA: NO
-- Use Intel VA-API/OpenCL: NO
-- Use Eigen: YES (ver 3.2.92)
-- Use Cuda: NO
-- Use OpenCL: YES
-- Use custom HAL: NO
--
-- OpenCL:
-- Version: dynamic
-- Include path: ~/opencv-3.1.0/3rdparty/include/opencl/1.2
-- Use AMDFFT: NO
-- Use AMDBLAS: NO
--
-- Python 2:
-- Interpreter: /usr/bin/python2.7 (ver 2.7.12)
--
-- Python 3:
-- Interpreter: /usr/bin/python3 (ver 3.5.2)
--
-- Python (for build): /usr/bin/python2.7
--
-- Java:
-- ant: NO
-- JNI: NO
-- Java wrappers: NO
-- Java tests: NO
--
-- Matlab: Matlab not found or implicitly disabled
--
-- Documentation:
-- Doxygen: NO
-- PlantUML: NO
--
-- Tests and samples:
-- Tests: YES
-- Performance tests: YES
-- C/C++ Examples: YES
--
-- Install path: /usr/local
--
-- cvconfig.h is in: ~/opencv-3.1.0/build
-- -----------------------------------------------------------------


こんな感じです。

あとは、


Terminal

sudo make -j2


CPUコアの指定を-j2で実施しています。

2コアでmakeします。

Makeが完了したら


Terminal

sudo make install


でおわり。