Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

チュートリアルではmodule_compile.shを変更せずに進めます。

コンパイルする

Dockerを用いてNumPyモジュールとOpenCVモジュールをコンパイルします。

${SDK_DIR}/external/build/sample/docker ディレクトリでDockerを実行してください。

$ docker run --rm -it --name aarch64-ubuntu -v `pwd`/docker_volume:
Code Block
Code Block
#!/bin/sh -x

HOME_PATH=/home/docker
compile/ubuntu-rel:0.1

external/build/sample/docker/docker_volume/install_pathにコンパイル済みモジュールが作成されます。

Info
  • OpenCVのコンパイルには時間がかかるため、しばらく待ちます。

  • SDK V1.70以前でコンパイルエラーが発生した場合は「はじめに」項で記載しているexternal/build/sample/docker/Dockerfileを修正していることを確認してください。修正できていない場合はDockerイメージの作成からやりなおしてください。

AdamAppに配置する

作成されたモジュールを、AdamAppで使用できるように配置します。

チュートリアルでは${SDK_DIR}/src/adamapp-py/jpeg_appを例とします。

Numpyを配置する

NumPyモジュールは以下のディレクトリにインストールされています。

...

NUMPY_ARCHIVES=numpy-1.19.4.tar.gz
NUMPY_DIR=numpy-1.19.4
LIB_INSTALL_DIR=${HOME_PATH}/install_path
NUMPY_SITE_PACKAGES=${LIB_INSTALL_DIR}/lib/python3.7/site-packages

...

ディレクトリ構成そのままで、AdamAppソースディレクトリにコピーしてください。

${SDK_DIR}/src/adamapp-py/jpeg_app/python/site-packages

Code Block
$ cp -R ${SDK_DIR}/external
OPENCV_ARCHIVES=opencv-3.4.7.zip
OPENCV_DIR=opencv-3.4.7
OPENCV_BUILD_DIR=opencv-3.4.7/build

## for NumPy
cd ${HOME_PATH}
mkdir -p ${NUMPY_SITE_PACKAGES}
tar zxf ${NUMPY_ARCHIVES}
cd ${NUMPY_DIR}
python setup.py build
PYTHONPATH=$PYTHONPATH:${NUMPY_SITE_PACKAGES}
export PYTHONPATH
python setup.py install --prefix=${LIB_INSTALL_DIR}

## for OpenCV
cd ${HOME_PATH}
unzip ${OPENCV_ARCHIVES}
mkdir -p ${OPENCV_BUILD_DIR}
cd ${OPENCV_BUILD_DIR}
cmake \
        -G "Unix Makefiles" \
	-D CMAKE_INSTALL_PREFIX=${LIB_INSTALL_DIR} \
        -D BUILD_CUDA_STUBS=OFF \
        -D BUILD_DOCS=OFF \
        -D BUILD_EXAMPLES=OFF \
        -D BUILD_JASPER=OFF \
        -D BUILD_JPEG=OFF \
        -D BUILD_OPENEXR=OFF \
        -D BUILD_PACKAGE=ON \
        -D BUILD_PERF_TESTS=OFF \
        -D BUILD_PNG=OFF \
        -D BUILD_SHARED_LIBS=ON \
        -D BUILD_TBB=OFF \
        -D BUILD_TESTS=OFF \
        -D BUILD_TIFF=OFF \
        -D BUILD_WITH_DEBUG_INFO=ON \
        -D BUILD_ZLIB=OFF \
        -D BUILD_WEBP=OFF \
        -D BUILD_opencv_apps=OFF \
        -D BUILD_opencv_calib3d=ON \
        -D BUILD_opencv_core=ON \
        -D BUILD_opencv_cudaarithm=OFF \
        -D BUILD_opencv_cudabgsegm=OFF \
        -D BUILD_opencv_cudacodec=OFF \
        -D BUILD_opencv_cudafeatures2d=OFF \
        -D BUILD_opencv_cudafilters=OFF \
        -D BUILD_opencv_cudaimgproc=OFF \
        -D BUILD_opencv_cudalegacy=OFF \
        -D BUILD_opencv_cudaobjdetect=OFF \
        -D BUILD_opencv_cudaoptflow=OFF \
        -D BUILD_opencv_cudastereo=OFF \
	-D BUILD_opencv_cudawarping=OFF \
        -D BUILD_opencv_cudev=OFF \
        -D BUILD_opencv_features2d=ON \
        -D BUILD_opencv_flann=ON \
        -D BUILD_opencv_hal=ON \
        -D BUILD_opencv_highgui=ON \
        -D BUILD_opencv_imgcodecs=ON \
        -D BUILD_opencv_imgproc=ON \
        -D BUILD_opencv_java=OFF \
        -D BUILD_opencv_ml=ON \
        -D BUILD_opencv_objdetect=ON \
        -D BUILD_opencv_photo=ON \
        -D BUILD_opencv_python2=OFF \
        -D BUILD_opencv_python3=ON \
        -D PYTHON3_DEFAULT_EXECUTABLE=/usr/bin/python3.7 \
        -D PYTHON3_EXECUTABLE=/usr/bin/python3.7 \
        -D PYTHON3_LIBRARY=/usr/lib/python3.7 \
        -D PYTHON3_INCLUDE_DIR=/usr/include/python3.7 \
        -D PYTHON3_NUMPY_INCLUDE_DIRS=${NUMPY_SITE_PACKAGES}/numpy-1.19.4-py3.7-linux-aarch64.egg/numpy/core/include \
        -D BUILD_opencv_shape=OFF \
        -D BUILD_opencv_stitching=OFF \
        -D BUILD_opencv_superres=OFF \
        -D BUILD_opencv_ts=OFF \
        -D BUILD_opencv_video=ON \
        -D BUILD_opencv_videoio=ON \
        -D BUILD_opencv_videostab=OFF \
        -D BUILD_opencv_viz=OFF \
        -D BUILD_opencv_world=ON \
        -D CMAKE_BUILD_TYPE=RELEASE \
        -D ENABLE_NEON=ON \
        -D WITH_1394=OFF \
        -D WITH_CUBLAS=OFF \
        -D WITH_CUDA=OFF \
        -D WITH_CUFFT=OFF \
        -D WITH_EIGEN=OFF \
        -D WITH_FFMPEG=OFF \
        -D WITH_GDAL=OFF \
        -D WITH_GPHOTO2=OFF \
        -D WITH_GIGEAPI=OFF \
        -D WITH_GSTREAMER=OFF \
        -D WITH_GTK=OFF \
        -D WITH_INTELPERC=OFF \
        -D WITH_IPP=OFF \
        -D WITH_IPP_A=OFF \
        -D WITH_JASPER=OFF \
        -D WITH_JPEG=ON \
        -D WITH_LIBV4L=OFF \
        -D WITH_OPENCL=OFF \
        -D WITH_OPENCLAMDBLAS=OFF \
        -D WITH_OPENCLAMDFFT=OFF \
        -D WITH_OPENCL_SVM=OFF \
        -D WITH_OPENEXR=OFF \
        -D WITH_OPENGL=OFF \
        -D WITH_OPENMP=OFF \
        -D WITH_OPENNI=OFF \
        -D WITH_PNG=OFF \
        -D WITH_PTHREADS_PF=OFF \
        -D WITH_PVAPI=OFF \
        -D WITH_QT=OFF \
        -D WITH_TBB=OFF \
        -D WITH_TIFF=OFF \
        -D WITH_UNICAP=OFF \
        -D WITH_V4L=OFF \
        -D WITH_VTK=OFF \
        -D WITH_WEBP=OFF \
        -D WITH_XIMEA=OFF \
        -D WITH_XINE=OFF \
	../../${OPENCV_DIR}
make
make install

コンパイルする

Dockerを用いてNumPyモジュールとOpenCVモジュールをコンパイルします。

${SDK_DIR}/external/build/sample/docker ディレクトリでDockerを実行してください。

Code Block
$ docker run --rm -it --name aarch64-ubuntu -v `pwd`/docker_volume:/home/docker compile/ubuntu-rel:0.1

external/build/sample/docker/docker_volume/install_pathにコンパイル済みモジュールが作成されます。

Info
  • OpenCVのコンパイルには時間がかかるため、しばらく待ちます。

  • SDK V1.70以前でコンパイルエラーが発生した場合は「はじめに」項で記載しているexternal/build/sample/docker/Dockerfileを修正していることを確認してください。修正できていない場合はDockerイメージの作成からやりなおしてください。

AdamAppに配置する

作成されたモジュールを、AdamAppで使用できるように配置します。

チュートリアルでは${SDK_DIR}/src/adamapp-py/jpeg_appを例とします。

Numpyを配置する

NumPyモジュールは以下のディレクトリにインストールされています。

${SDK_DIR}/external/build/sample/docker/docker_volume/install_path/lib/python3.7/site-packages/numpy-1.19.4-py3.7-linux-aarch64.egg/numpy

ディレクトリ構成そのままで、AdamAppソースディレクトリにコピーしてください。

${SDK_DIR}/src/adamapp-py/jpeg_app/python/site-packages

Code Block
$ cp -R ${SDK_DIR}/external/build/sample/docker/docker_volume/install_path/lib/python3.7/site-packages/numpy-1.19.4-py3.7-linux-aarch64.egg/numpy ${SDK_DIR}/src/adamapp-py/jpeg_app/python/site-packages

...

AdamAppでは、Pythonキャッシュファイル(__pycache__)は使用しません。

容量削減のため削除することをお勧めします。

Info

不要なファイルを削除するだけで数十MBの容量削減になります。アプリのファイルサイズが大きくなるとROM容量制限によりアプリ異常終了の原因となりますのでご注意ください。

Code Block
languagebash
$ cd ${SDK_DIR}/src/adamapp-py/jpeg_app/python/site-packages/
$ find . -name *pycache* -print | xargs rm -rf

...

Code Block
#!/bin/sh -x

HOME_PATH=/home/docker

LIB_INSTALL_DIR=${HOME_PATH}/install_path

SQLITE_ARCHIVES=sqlite-autoconf-3400000.tar.gz
SQLITE_DIR=sqlite-autoconf-3400000
SQLITE_BUILD_DIR=sqlite-autoconf-3400000/build

PYTHONPATH=$PYTHONPATH:${NUMPY_SITE_PACKAGES}
export PYTHONPATH

PYTHON_ARCHIVES=Python-3.7.9.tgz
PYTHON_DIR=Python-3.7.9

## for sqlite
cd ${HOME_PATH}
tar zxf ${SQLITE_ARCHIVES}
mkdir -p ${SQLITE_BUILD_DIR}
cd ${SQLITE_DIR}
./configure --prefix=${LIB_INSTALL_DIR}
make
make install

## for python
cd ${HOME_PATH}
tar zxf ${PYTHON_ARCHIVES}
cd ${PYTHON_DIR}
./configure --prefix=${LIB_INSTALL_DIR}
make
make install

コンパイルする

Dockerを用いてsqliteモジュールとPythonモジュールをコンパイルします。

${SDK_DIR}/external/build/sample/docker ディレクトリでDockerを実行してください。

Code Block
$ docker run --rm -it --name aarch64-ubuntu -v `pwd`/docker_volume:/home/docker compile/ubuntu-rel:0.1

${SDK_DIR}/external/build/sample/docker/docker_volume/install_pathにコンパイル済みモジュールが作成されます。

AdamAppに配置する

作成されたモジュールを、AdamAppで使用できるように配置します。

チュートリアルではsrc/adamapp-py/sqlite_appを例とします。

Note

sqlite_app の動作にはSDカードが必要です。SDカードを挿入できるカメラのみ確認可能です。
また、カメラのファームウェアによってはext4でフォーマットしたSDカードでないと動作しない可能性があります。

SQLiteを配置する

...

 python
cd ${HOME_PATH}
tar zxf ${PYTHON_ARCHIVES}
cd ${PYTHON_DIR}
./configure --prefix=${LIB_INSTALL_DIR}
make
make install

コンパイルする

Dockerを用いてsqliteモジュールとPythonモジュールをコンパイルします。

${SDK_DIR}/external/build/sample/docker

...

libsqlite3.so
libsqlite3.so.0
libsqlite3.so.0.8.6
libsqlite3.la
libsqlite3.a

上記5ファイルを、AdamAppソースディレクトリにコピーしてください。

${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu

...

ディレクトリでDockerを実行してください。

Code Block
$ docker run --rm -it --name aarch64-ubuntu -v `pwd`/docker_volume:/home/docker compile/ubuntu-rel:0.1

${SDK_DIR}/external/build/sample/docker/docker_volume/install_

...

pathにコンパイル済みモジュールが作成されます。

AdamAppに配置する

作成されたモジュールを、AdamAppで使用できるように配置します。

チュートリアルではsrc/adamapp-py/

...

sqlite_appを例とします。

Note

sqlite_app の動作にはSDカードが必要です。SDカードを挿入できるカメラのみ確認可能です。
また、カメラのファームウェアによってはext4でフォーマットしたSDカードでないと動作しない可能性があります。

SQLiteを配置する

sqliteライブラリは以下のディレクトリにインストールされています。

${SDK_DIR}/external/build/sample/docker/docker_volume/install_path/lib

...

libsqlite3.so
libsqlite3.so.0
libsqlite3.so.0

...

.8.6

上記5ファイルを、AdamAppソースディレクトリにコピーしてください。

${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu

...

Code Block
$ cp -R ${SDK_DIR}/external/build/sample/docker/docker_volume/install_path/lib/libsqlite3.so.0.8.6 ${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu
$ cp -R ${SDK_DIR}/external/build/sample/docker/docker_volume/install_path/lib/libsqlite3.so.la0 ${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu
$ cp -R ${SDK_DIR}/external/build/sample/docker/docker_volume/install_path/lib/libsqlite3.aso.0.8.6 ${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu

...

${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.so
${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.so.0
${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.la
${SDK_DIR}/src/adamapp-py/sqlite_app/external/lib/aarch64-linux-gnu/libsqlite3.a

Python用sqliteを配置する

Python用sqliteモジュールは以下のディレクトリにインストールされています。

...

pycurl 7.45.2

https://files.pythonhosted.org/packages/a8/af/24d3acfa76b867dbd8f1166853c18eefc890fc5da03a48672b38ea77ddae/pycurl-7.45.2.tar.gz

OpenSSL 1.1.1

https://github.com/openssl/openssl/archive/OpenSSL_1_1_1i.tar.gz

...

1i.tar.gz

OpenSSL 3.0.12

https://github.com/openssl/openssl/releases/download/openssl-3.0.12/openssl-3.0.12.tar.gz

ダウンロードしたファイルは、${SDK_DIR}/external/build/sample/docker/docker_volumeディレクトリに配置してください。

Info

SoCがambaCV2XおよびambaCV5X(カメラファームv3.10以前)の場合はカメラ内のOpenSSLとバージョンを合わせるためにOpenSSL 1.1.1を利用してください。ambaCV5X(v3.20以降)の場合はOpenSSL 3.0.12にアップデートされているためOpenSSL 3.0.12を利用してください。

SoCについては下記を参照してください。

i-PROカメラへのソフトウェアインストール条件 - FAQ - Development Partner Portal

コンパイル手順ファイルを更新する

${SDK_DIR}/external/build/sample/docker/docker_volume/module_compile.shファイルに、コンパイル手順を記載します。

...

Code Block
#!/bin/sh -x

HOME_PATH=/home/docker

OPENSSL_ARCHIVES=openssl-OpenSSL_1_1_1i.tar.gz
OPENSSL_DIR=openssl-OpenSSL_1_1_1i

PYCURL_ARCHIVES=pycurl-7.45.2.tar.gz
PYCURL_DIR=pycurl-7.45.2

apt update
apt install libcurl4-openssl-dev libssl-dev

cd ${HOME_PATH}
tar zxf ${OPENSSL_ARCHIVES}
cd ${OPENSSL_DIR}
./Configure linux-aarch64
make

export PYCURL_SSL_LIBRARY=openssl
export CPPFLAGS=-I${HOME_PATH}/${OPENSSL_DIR}/include/openssl
export LDFLAGS=-L${HOME_PATH}/${OPENSSL_DIR}

## for pycurl
cd ${HOME_PATH}
tar zxf ${PYCURL_ARCHIVES}
cd ${PYCURL_DIR}
python3.7 setup.py --with-openssl --openssl-dir=${HOME_PATH}/${OPENSSL_DIR} build-openssl --openssl-dir=${HOME_PATH}/${OPENSSL_DIR} build
Info

OpenSSL 3.0.12を利用する場合は下記のとおり書き換えてください。

修正前)

OPENSSL_ARCHIVES=openssl-OpenSSL_1_1_1i.tar.gz
OPENSSL_DIR=openssl-OpenSSL_1_1_1i

修正後)

OPENSSL_ARCHIVES=openssl-3.0.12.tar.gz
OPENSSL_DIR=openssl-3.0.12

コンパイルする

Dockerを用いてpycurlモジュールとOpenSSLモジュールをコンパイルします。

...

作成されたモジュールを、AdamAppで使用できるように配置します。

チュートリアルではsrc/adamapp-py/additional_info_samplehogehoge_appを例とします。

PyCurlを配置する

PyCurlライブラリは以下のディレクトリにインストールされています。

...

${SDK_DIR}/src/adamapp-py/additionalhogehoge_info_sample_app/python/site-packages

Code Block
$ cp -R ${SDK_DIR}/external/build/sample/docker/docker_volume/pycurl-7.45.2/build/lib.linux-aarch64-3.7/pycurl.cpython-37m-aarch64-linux-gnu.so ${SDK_DIR}/src/adamapp-py/additionalhogehoge_info_sample_app/python/site-packages

コピー後のディレクトリ構成は以下のようになります。

${SDK_DIR}/src/adamapp-py/additional_info_samplehogehoge_app/python/site-packages/pycurl.cpython-37m-aarch64-linux-gnu.so

...

${SDK_DIR}/src/adamapp-py/additional_info_samplehogehoge_app/python/pymain.py を開き、下記の通り追記します。

import os;

の1つ下の行に下記を追記する。

import pycurl;

...

サンプルアプリをビルドする

サンプルアプリ「additionalサンプルアプリ「hogehoge_info_sample_app」をビルドして、カメラにインストールします。

ビルド方法は各SDKバージョンに応じて実施ください。アプリ画面を開いて、「body」のように文字列が表示されていれば成功です。

Pythonモジュールをコンパイルする(Numba)

...

Code Block
#!/bin/sh -x

#----------
HOME_PATH=/home/docker
LIB_INSTALL_DIR=${HOME_PATH}/install_path
SITE_PACKAGES=${LIB_INSTALL_DIR}/lib/python3.7/site-packages

NUMPY_ARCHIVES=numpy-1.19.4.tar.gz
NUMPY_DIR=numpy-1.19.4

LLVM_ARCHIVES=llvm-project-llvmorg-11.1.0.tar.gz
LLVM_DIR=llvm-project-llvmorg-11.1.0
LLVM_INSTALL_DIR=${LIB_INSTALL_DIR}/llvm
LLVM_PATCH_SRC=${LLVMLITE_DIR}/conda-recipes
LLVM_PATCH_DST=${LLVM_DIR}/llvm

LLVMLITE_ARCHIVES=llvmlite-0.39.1.tar.gz
LLVMLITE_DIR=llvmlite-0.39.1

NUMBA_ARCHIVES=numba-0.56.4.zip
NUMBA_DIR=numba-0.56.4

#----------

# NumPy
cd ${HOME_PATH}
mkdir -p ${SITE_PACKAGES}
tar xf ${NUMPY_ARCHIVES}
cd ${NUMPY_DIR}
python setup.py build
PYTHONPATH=$PYTHONPATH:${SITE_PACKAGES}
export PYTHONPATH
python setup.py install --prefix=${LIB_INSTALL_DIR}


# LLVM / llvmlite
cd ${HOME_PATH}
tar xf ${LLVM_ARCHIVES}
tar xf ${LLVMLITE_ARCHIVES}

cd ${LLVM_PATCH_DST}
for patchFile in $(find ../../${LLVM_PATCH_SRC} -name "*.patch" -type f); do
	patch --dry-run -f -p1 -i ${patchFile}
	if [ $? -eq 0 ]; then
		patch -p1 -i ${patchFile}
	fi
done

LLVM_BUILD_SH="../../${LLVMLITE_DIR}/conda-recipes/llvmdev/build.sh"
mkdir -p ${LLVM_INSTALL_DIR}
export PREFIX=${LLVM_INSTALL_DIR} CPU_COUNT=2
sed -i -e "s/\(^LLVM_TARGETS_TO_BUILD=\).*/\1\$\{LLVM_TARGETS_TO_BUILD:-\"AArch64\"\}/" ${LLVM_BUILD_SH}
sed -i -e "/LLVM_ENABLE_ASSERTIONS/d" ${LLVM_BUILD_SH}
sed -i -e "/LLVM_EXPERIMENTAL_TARGETS_TO_BUILD/d" ${LLVM_BUILD_SH}
chmod +x ${LLVM_BUILD_SH}
${LLVM_BUILD_SH}
cd ../../

cd ${LLVMLITE_DIR}
export LLVM_CONFIG=${LLVM_INSTALL_DIR}/bin/llvm-config
python setup.py build
python setup.py install --prefix=${LIB_INSTALL_DIR}
cd ../


# numba
unzip ${NUMBA_ARCHIVES}
cd ${NUMBA_DIR}
export NUMBA_DISABLE_TBB=1
python setup.py build
python setup.py install --prefix=${LIB_INSTALL_DIR}
cd ../


# replace some libraries compatible with python3.7
cd ${HOME_PATH}
unzip importlib_metadata-6.7.0.zip
mv importlib_metadata-6.7.0/importlib_metadata ${SITE_PACKAGES}
unzip typing_extensions-4.7.1.zip
mv typing_extensions-4.7.1/src/typing_extensions.py ${SITE_PACKAGES}
unzip zipp-3.15.0.zip
mv zipp-3.15.0/zipp ${SITE_PACKAGES}


# cleanup
cd ${SITE_PACKAGES}
rm -f easy-install.pth setuptools.pth site.py
find . -maxdepth 2 -name numpy -type d -exec mv {} . \;
find . -maxdepth 2 -name numba -type d -exec mv {} . \;
rm -rf *.egg*
find . -name *pycache* -type d -print | xargs rm -rf
find . -name tests -type d -print | xargs rm -rf
find . -name *.so | xargs aarch64-linux-gnu-strip --strip-debug
cd ${HOME_PATH}

...

作成されたモジュールを、AdamAppで使用できるように配置します。
チュートリアルでは${SDK_DIR}/src/adamapp-py/yuv_yolov5_appを例とします。

モジュールを配置する

コンパイル済みのモジュールを、ディレクトリ構成そのままで、AdamAppソースディレクトリにコピーしてください。コンパイル済みのモジュールをディレクトリ構成そのままで、AdamAppソースディレクトリにコピーしてください。

$ cp -R ${SDK_DIR}/external/build/sample/docker/docker_volume/install_path/lib/python3.7/site-packages ${SDK_DIR}/src/adamapp-py/yuv_yolov5_app/python/

...