Versions Compared

Key

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

...

アプリ画面を開いて、「body」のように文字列が表示されていれば成功です。

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

Pythonの高速化に使われるNumbaのビルド手順について記載します。

ソースコードをダウンロードする

Numbaを実行するために、複数のモジュールが必要です。
それぞれのソースコードは以下のURLからダウンロードしてください。
また各モジュールのバージョンは、Python 3.7.9 に対応しているものを選択してください。

Numba 0.56.4:
https://github.com/numba/numba/archive/refs/tags/0.56.4.zip

Numpy 1.19.4:
https://github.com/numpy/numpy/archive/v1.19.4.tar.gz

LLVM 11.1.0:
https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-11.1.0.tar.gz

llvmlite 0.39.1:
https://github.com/numba/llvmlite/archive/refs/tags/v0.39.1.tar.gz

importlib_metadata 6.7.0:
https://github.com/python/importlib_metadata/archive/refs/tags/v6.7.0.zip

typing_extensions 4.7.1:
https://github.com/python/typing_extensions/archive/refs/tags/4.7.1.zip

zipp 3.15.0:
https://github.com/jaraco/zipp/archive/refs/tags/v3.15.0.zip

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

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

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

下記の内容をコピーしてください。

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=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}

コンパイルする

Dockerを用いて各モジュールをコンパイルします。
${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/lib/python3.7/site-packages

Info

LLVMのコンパイルに時間がかかるため、しばらく待ちます。
コンパイル済みモジュールのファイルサイズは、合計で約60MByteになります。

AdamAppに配置する

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

モジュールを配置する

コンパイル済みのモジュールを、ディレクトリ構成そのままで、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/

pymain.py を更新する

numbaに対応したソースコードに変更します。下記のファイルと添付ファイル「pymain.py」を差し替えます。
\src\adamapp-py\yuv_yolov5_app\python\pymain.py

View file
namepymain_numba.zip

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

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

ビルド方法は各SDKバージョンに応じて実施ください。

アプリ画面を開いて、画面に映っている物体(人など)に枠が付いていれば成功です。

サンプルアプリの動作説明も参照ください。

失敗した場合はアプリ画面にアプリ起動失敗を示すメッセージが表示されます。

...