ODROID-X2
Odroid-X2にUbuntuをインストールする†
SDカードイメージの用意†
- 普通にSDカードをさして起動すれば、普通にORDOID-X2がUbuntuで起動する。
- Lubuntu という、軽量化されたUbuntuイメージ。バージョンは14.04
初期コンフィグなど†
- odroid の初期パスワードは odroid でパスワードも odroid 。
- 一応変える
passwd
- 無線LANは画面右下に無線LANのSSIDを入れるメニューがあった。
キー配列†
パーティションの変更†
- SDカードは8GBだったのだが、4GBがインストールイメージとして初期化され、3.5GBが既に使用済み
- upgrade しようにも、ディスク容量が足りない言われてしまった。
- sudo gparted でGUIでパーティションのサイズを変更
OpenCVの3.0を取得する†
git clone https://github.com/Itseez/opencv.git
git tag -l
git checkout 3.0.0-alpha
OpenCV3.0のビルド†
- gitから3.0.0-alphaのソースコードを取得してくる
$ cd
$ mkdir work
$ cd work
$ git clone https://github.com/Itseez/opencv.git opencv
$ cd opencv
$ git tag -l
$ git checkout 3.0.0-alpha
$ cmake .
$ time make all
- デフォルト設定だと、ippをarm上でダウンロードしようとするので、coreモジュールのリンク時にエラーが起きる
- ippをoffにして再挑戦
$ cmake -DWITH_IPP:BOOL=OFF .
$ time make all
- Arm Cortex-A9 ( 1.7Ghz ) で大体70minぐらいかかった
サンプルの実行(顔検出)†
- build with OpenCV examples
$ cmake -DBUILD_EXAMPLES:BOOL=ON -DWITH_IPP:BOOL=OFF .
$ make example_facedetect
$ cd bin
$ ./cpp-example-facedetect --cascade="../data/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="../data/haarcascades/haarcascade_eye.xml" --scale=1.3
<snip>
Processing 1 --cascade=../data/haarcascades/haarcascade_frontalface_alt.xml
from which we have cascadeName= ../data/haarcascades/haarcascade_frontalface_alt.xml
Processing 2 --nested-cascade=../data/haarcascades/haarcascade_eye.xml
Failed to load OpenCL runtime
Processing 3 --scale=1.3
from which we read scale = 1.3
In capture ...
OpenCV Error: Unspecified error (GStreamer: unable to start pipeline
) in icvStartPipeline, file /home/odroid/work/opencv/modules/videoio/src/cap_gstreamer.cpp, line 399
terminate called after throwing an instance of 'cv::Exception'
what(): /home/odroid/work/opencv/modules/videoio/src/cap_gstreamer.cpp:399: error: (-2) GStreamer: unable to start pipeline
in function icvStartPipeline
Aborted
- どうやら、付属しているカメラの起動にはひとくせありそう。
- とりあえずlenaの画像で代用する
$ ./cpp-example-facedetect --cascade="../data/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="../data/haarcascades/haarcascade_eye.xml" --scale=1.3 ../samples/cpp/lena.jpg
During execution:
Hit any key to quit.
Using OpenCV version 3.0.0-alpha
Processing 1 --cascade=../data/haarcascades/haarcascade_frontalface_alt.xml
from which we have cascadeName= ../data/haarcascades/haarcascade_frontalface_alt.xml
Processing 2 --nested-cascade=../data/haarcascades/haarcascade_eye.xml
Failed to load OpenCL runtime
Processing 3 --scale=1.3
from which we read scale = 1.3
Processing 4 ../samples/cpp/lena.jpg
In image read
detection time = 385.926 ms
- 開始スケールを1.3に設定すると(時間がかかる、小さい顔検出をスキップすると)、検出に400ms弱かかる
- ちなみに、デフォルト設定だと、700msぐらいかかる
$./cpp-example-facedetect --cascade="../data/haarcascades/haarcascade_frontalface_alt.xml" --nested-cascade="../data/haarcascades/haarcascade_eye.xml" ../samples/cpp/lena.jpg
During execution:
Hit any key to quit.
Using OpenCV version 3.0.0-alpha
Processing 1 --cascade=../data/haarcascades/haarcascade_frontalface_alt.xml
from which we have cascadeName= ../data/haarcascades/haarcascade_frontalface_alt.xml
Processing 2 --nested-cascade=../data/haarcascades/haarcascade_eye.xml
Failed to load OpenCL runtime
Processing 3 ../samples/cpp/lena.jpg
In image read
detection time = 703.28 ms
OpenCVビルド時のコンフィグなど†
cvconfig.h†
/* OpenCV compiled as static or dynamic libs */
#define BUILD_SHARED_LIBS
/* Compile for 'real' NVIDIA GPU architectures */
#define CUDA_ARCH_BIN ""
/* Create PTX or BIN for 1.0 compute capability */
/* #undef CUDA_ARCH_BIN_OR_PTX_10 */
/* NVIDIA GPU features are used */
#define CUDA_ARCH_FEATURES ""
/* Compile for 'virtual' NVIDIA PTX architectures */
#define CUDA_ARCH_PTX ""
/* AVFoundation video libraries */
/* #undef HAVE_AVFOUNDATION */
/* V4L capturing support */
/* #undef HAVE_CAMV4L */
/* V4L2 capturing support */
#define HAVE_CAMV4L2
/* Carbon windowing environment */
/* #undef HAVE_CARBON */
/* AMD's Basic Linear Algebra Subprograms Library*/
/* #undef HAVE_CLAMDBLAS */
/* AMD's OpenCL Fast Fourier Transform Library*/
/* #undef HAVE_CLAMDFFT */
/* Clp support */
/* #undef HAVE_CLP */
/* Cocoa API */
/* #undef HAVE_COCOA */
/* C= */
/* #undef HAVE_CSTRIPES */
/* NVidia Cuda Basic Linear Algebra Subprograms (BLAS) API*/
/* #undef HAVE_CUBLAS */
/* NVidia Cuda Runtime API*/
/* #undef HAVE_CUDA */
/* NVidia Cuda Fast Fourier Transform (FFT) API*/
/* #undef HAVE_CUFFT */
/* IEEE1394 capturing support */
/* #undef HAVE_DC1394 */
/* IEEE1394 capturing support - libdc1394 v2.x */
#define HAVE_DC1394_2
/* DirectX */
/* #undef HAVE_DIRECTX */
/* #undef HAVE_D3D11 */
/* #undef HAVE_D3D10 */
/* #undef HAVE_D3D9 */
/* DirectShow Video Capture library */
/* #undef HAVE_DSHOW */
/* Eigen Matrix & Linear Algebra Library */
/* #undef HAVE_EIGEN */
/* FFMpeg video library */
#define HAVE_FFMPEG
/* ffmpeg's libswscale */
#define HAVE_FFMPEG_SWSCALE
/* ffmpeg in Gentoo */
#define HAVE_GENTOO_FFMPEG
/* Geospatial Data Abstraction Library */
/* #undef HAVE_GDAL */
/* GStreamer multimedia framework */
#define HAVE_GSTREAMER
/* GTK+ 2.0 Thread support */
#define HAVE_GTHREAD
/* GTK+ 2.x toolkit */
#define HAVE_GTK
/* Define to 1 if you have the <inttypes.h> header file. */
/* #undef HAVE_INTTYPES_H */
/* Intel Perceptual Computing SDK library */
/* #undef HAVE_INTELPERC */
/* Intel Integrated Performance Primitives */
/* #undef HAVE_IPP */
/* #undef HAVE_IPP_ICV_ONLY */
/* Intel IPP Async */
/* #undef HAVE_IPP_A */
/* JPEG-2000 codec */
#define HAVE_JASPER
/* IJG JPEG codec */
#define HAVE_JPEG
/* libpng/png.h needs to be included */
#define HAVE_LIBPNG_PNG_H
/* V4L/V4L2 capturing support via libv4l */
#define HAVE_LIBV4L
/* Microsoft Media Foundation Capture library */
/* #undef HAVE_MSMF */
/* NVidia Video Decoding API*/
/* #undef HAVE_NVCUVID */
/* OpenCL Support */
#define HAVE_OPENCL
/* #undef HAVE_OPENCL_STATIC */
/* OpenEXR codec */
#define HAVE_OPENEXR
/* OpenGL support*/
/* #undef HAVE_OPENGL */
/* OpenNI library */
/* #undef HAVE_OPENNI */
/* OpenNI library */
/* #undef HAVE_OPENNI2 */
/* PNG codec */
#define HAVE_PNG
/* Qt support */
/* #undef HAVE_QT */
/* Qt OpenGL support */
/* #undef HAVE_QT_OPENGL */
/* QuickTime video libraries */
/* #undef HAVE_QUICKTIME */
/* QTKit video libraries */
/* #undef HAVE_QTKIT */
/* Intel Threading Building Blocks */
/* #undef HAVE_TBB */
/* TIFF codec */
#define HAVE_TIFF
/* Unicap video capture library */
/* #undef HAVE_UNICAP */
/* Video for Windows support */
/* #undef HAVE_VFW */
/* V4L2 capturing support in videoio.h */
/* #undef HAVE_VIDEOIO */
/* Win32 UI */
/* #undef HAVE_WIN32UI */
/* Windows Runtime support */
/* #undef HAVE_WINRT */
/* XIMEA camera support */
/* #undef HAVE_XIMEA */
/* Xine video library */
/* #undef HAVE_XINE */
/* Define if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */
/* #undef WORDS_BIGENDIAN */
version_string.inc†
General configuration for OpenCV 3.0.0-alpha =====================================
Version control: 2.4.9-4739-gfb9a143
Platform:
Host: Linux 3.8.13.23 armv7l
CMake: 2.8.12.2
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.8.2)
C++ flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG -DNDEBUG
C++ flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -g -O0 -DDEBUG -D_DEBUG
C Compiler: /usr/bin/cc
C flags (Release): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fvisibility=hidden -O3 -DNDEBUG -DNDEBUG
C flags (Debug): -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wno-narrowing -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-sections -fvisibility=hidden -g -O0 -DDEBUG -D_DEBUG
Linker flags (Release):
Linker flags (Debug):
Precompiled headers: YES
OpenCV modules:
To be built: core flann imgproc imgcodecs videoio highgui features2d calib3d ml objdetect photo video shape stitching superres ts videostab
Disabled: world
Disabled by dependency: -
Unavailable: androidcamera cuda cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaoptflow cudastereo cudawarping cudev java python2 python3 viz
GUI:
QT: NO
GTK+ 3.x: YES (ver 3.10.8)
GThread : YES (ver 2.40.0)
GtkGlExt: NO
OpenGL support: NO
VTK support: NO
Media I/O:
ZLib: /usr/lib/arm-linux-gnueabihf/libz.so (ver 1.2.8)
JPEG: /usr/lib/arm-linux-gnueabihf/libjpeg.so (ver )
WEBP: /usr/lib/arm-linux-gnueabihf/libwebp.so (ver encoder: 0x0202)
PNG: /usr/lib/arm-linux-gnueabihf/libpng.so (ver 1.2.50)
TIFF: /usr/lib/arm-linux-gnueabihf/libtiff.so (ver 42 - 4.0.3)
JPEG 2000: /usr/lib/arm-linux-gnueabihf/libjasper.so (ver 1.900.1)
OpenEXR: /usr/lib/arm-linux-gnueabihf/libImath.so /usr/lib/arm-linux-gnueabihf/libIlmImf.so /usr/lib/arm-linux-gnueabihf/libIex.so /usr/lib/arm-linux-gnueabihf/libHalf.so /usr/lib/arm-linux-gnueabihf/libIlmThread.so (ver 1.6.1)
GDAL: NO
Video I/O:
DC1394 1.x: NO
DC1394 2.x: YES (ver 2.2.1)
FFMPEG: YES
codec: YES (ver 54.35.0)
format: YES (ver 54.20.4)
util: YES (ver 52.3.0)
swscale: YES (ver 2.1.1)
gentoo-style: YES
GStreamer:
base: YES (ver 1.3.1.1)
video: YES (ver 1.3.1.1)
app: YES (ver 1.3.1.1)
riff: YES (ver 1.3.1.1)
pbutils: YES (ver 1.3.1.1)
OpenNI: NO
OpenNI PrimeSensor Modules: NO
OpenNI2: NO
PvAPI: NO
GigEVisionSDK: NO
UniCap: NO
UniCap ucil: NO
V4L/V4L2: Using libv4l (ver 1.0.1)
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: YES
OpenCL:
Version: dynamic
Include path: /home/odroid/work/opencv/3rdparty/include/opencl/1.2
Use AMDFFT: NO
Use AMDBLAS: NO
Python 2:
Interpreter: /usr/bin/python2.7 (ver 2.7.6)
Python 3:
Interpreter: /usr/bin/python3.4 (ver 3.4)
Python (for build): NO
Java:
ant: NO
JNI: NO
Java tests: NO
Matlab:
mex: NO
Documentation:
Build Documentation: NO
Sphinx: NO
PdfLaTeX compiler: /usr/bin/pdflatex
PlantUML: NO
Tests and samples:
Tests: YES
Performance tests: YES
C/C++ Examples: YES
Install path: /usr/local
cvconfig.h is in: /home/odroid/work/opencv
-----------------------------------------------------------------
サンプルの最適化(Neon最適化に挑戦)†
その他参考ページ†
- 転置操作やベクタ演算の命令一覧¬e{arm-compiler-reference-4.1:ARM コンパイラチェーン コンパイラリファレンス, バージョン4.1, 2014-09-25閲覧};
- NEONサポートの使用¬e{how-to-use-neon:ARM コンパイラツールチェーン コンパイラリファレンス, バージョン5.03, 2014-09-25閲覧};
- 定義済みマクロ¬e{pre-defined-macros-4.1:ARM コンパイラツールチェーン コンパイラリファレンス, バージョン4.1, 2014-09-25閲覧};
- Lubuntu公式サイト¬e{lubuntu-official:lubuntu | lightweight, fast, easier, lubuntu 14.04.1, 2014-09-23更新, 2014-09-25閲覧};
- Lubuntu 14.04 LTS を Windows XP の代わりに インストールしてみた | レンタルサーバー・自宅サーバー設定・構築のヒント¬e{lubuntu-instead-of-windows-xp:Lubuntu 14.04 LTS を Windows XP の代わりに インストールしてみた | レンタルサーバー・自宅サーバー設定・構築のヒント, 2014-06-16公開, 2014-08-29更新, 2014-09-25閲覧};
- ARMクロスコンパイラをx86上のUbuntuにインストールする¬e{install-cross-compiler-of-arm-on-x86-ubuntu:Ubuntu/クロスコンパイル/ARM - PukiWiki, 2014-03-06更新, 2014-09-25閲覧};
- ARM NEON Optimization. An Example - hilbert-space¬e{an-exmaple-of-neon-optimization-with-assembler:ARM NEON Optimization. An Example - hilbert-space, 2009-12-18公開, 2014-09-25閲覧};
- C 言語またはアセンブリ言語からの C++ 言語の呼び出し¬e{how-to-call-a-cpp-function-from-c-or-assembler:ARM コンパイラツールチェーン ARM プロセッサをターゲットとしたソフトウェア開発, バージョン5.03, 2014-09-25閲覧};
- Odroid-Xの解説Wiki¬e{odroid-x-on-onakasuita-wiki:onakasuita, ODROID-X - おなかすいたWiki!, 2014-03-06更新, 2014-09-25閲覧};
- SD-Card-setup-for-ODROID-X¬e{sd-card-setup-for-odroid-x:SD Card setup for ODROID-X, 2012-08-01更新, 2014-09-25閲覧};
- 64bit ARM (aarch64)のコンパイル¬e{aarch-64-compile-on-ubuntu-14-04:embedded, Ubuntu 14.04でarm 64bit(aarch64)のコードをコンパイルして動かしてみる - 組み込みの人。, 2014-04-22公開, 2014-09-25閲覧};
- 命令のコンパイラ組み込み関数¬e{intrinsic-instruction-on-compiler:RealView Compilation Tools コンパイラユーザガイド, バージョン4.0, 2014-09-25閲覧};
- Cortex-A9プロセッサ¬e{arm-cortex-a9-official:Cortex-A9プロセッサ, 2014-09-25閲覧};
:OpenCV
:OpenCV 3.0