Versions Compared

Key

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

SDK同梱ドキュメント:PythonModuleInstallManual

目次

...

Table of Contents
minLevel1
maxLevel4

概要

...

Python版のAdamAppで外部ライブラリを使用する場合は、Pythonモジュールのコンパイルが必要です。

...

サンプルモジュール
  • NumPy 1.14.9

  • OpenCV 3.4.7

目次

Table of Contents
minLevel1
maxLevel4

Dockerのインストール

Docker環境を構築する

...

Docker環境は、AdamAppSDKがインストールされたUbuntu上に構築します。

従って、あらかじめAdamAppSDK開発環境の構築が必要となります。あらかじめAdamAppSDK開発環境を構築してください。(本チュートリアルでは省略します)

また、Docker環境構築時に、Ubuntuのパッケージ管理システムであるapt (apt-getコマンドなど)を用いて、ソフトのインストールを行います。

aptまた、apt-getコマンドなどを使ってソフトのインストールを行いますので、apt-getが可能なインターネット接続と、インストールが可能な権限(root権限など)が必要になりますので、それらの設定が完了した後、Docker環境構築を開始してください。

以降の節においては、Docker公式ドキュメントに従った環境構築手順を記載します。

また、チュートリアルにおけるインストール対象OSは、以下の通りです。設定も実施しておいてください。

チュートリアルでのインストール対象OS
  • Ubuntu 18.04.2 LTS (bionic)

Ubuntu 16.04及び、Ubuntu 18.04.02以降を使用している方は、本ページとともにDocker公式ドキュメントを参照してください。

Docker環境の構築

...

参考:Docker公式ドキュメント

必要パッケージをインストールする

Docker環境の構築に必要なパッケージをインストールします。

Code Block
$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common \
    qemu-user-static

リポジトリ追加

Docker社が提供している、Ubuntu用aptリポジトリをシステムに追加します。Docker社提供のUbuntu用aptリポジトリをシステムに追加します。

まず、Docker社オフィシャルPGPキーをシステムに追加します。Docker社オフィシャルPGPキーをシステムに追加します。

Code Block
languagebash
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK
Info

インターネット接続にProxyサーバが必要な場合は、インターネット接続にプロキシサーバが必要な場合は、-xオプションを使用します。

ProxyサーバのURL及びポート番号は、使用するProxyサーバに即したものへと変更してください。(プロキシサーバのURLやポート番号は、使用するプロキシサーバに即したものへと変更してください。)

$ curl -x http://proxy.example.com:8080/ -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

PGPキー追加後、以下コマンドを実行し、fingerprintが実行結果のようになっているか確認してください。PGPキーを追加したら、fingerprintがこのようになっているか確認してください。

Code Block
languagebash
$ sudo apt-key fingerprint 0EBFCD88
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown ] Docker Release (CE deb) docker@docker.com
sub   rsa4096 2017-02-22 [S]

...

Code Block
languagebash
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Info

インターネット接続にProxyサーバが必要な場合は、環境変数”httpインターネット接続にプロキシサーバが必要な場合は、環境変数”http_proxy”と”https_proxy”を以下のように追加してください。

ProxyサーバのURL及びポート番号は、使用するProxyサーバに即したものへと変更してください。(プロキシサーバのURLやポート番号は、使用するプロキシサーバに即したものへと変更してください。)

$ sudo http_proxy=http://proxy.example.com:8080 https_proxy=https://proxy.example.com:8080 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

aptリポジトリ追加後、aptリポジトリを追加したら、/etc/apt/sources.listにリポジトリが追加されていることを確認してください。

Code Block
languagebash
$ cat /etc/apt/sources.list
(省略)
deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable
# deb-src [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable

...

Docker実行用ファイルをインストールする

Docker実行に必要なファイルを、aptを使用してインストールします。

Code Block
languagebash
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

...

(任意)Dockerにプロキシ設定を行う

インターネット接続にProxyサーバが必要な場合、DockerにProxy設定を行う必要があります。インターネット接続にプロキシサーバが必要な場合は、Dockerにプロキシ設定を行ってください。公式ドキュメント を参照して、Proxy設定を行ってください。

参考:Docker公式ドキュメント

...

Dockerコマンドの権限を変更する

dockerコマンドを一般ユーザでも使用できるように設定を変更します。

Code Block
languagebash
$ sudo usermod -a -G docker $(whoami)

実行後、一度ログアウトし、再度ログインしてください。一度ログアウトして、再度ログインしてください。

Docker実行確認

Dockerが使用できるか確認します。

Code Block
languagebash
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Dockerイメージを作成

...

Pythonモジュールコンパイル用のDockerイメージを作成します。この章では、3章で説明したDockerを使用して、Pythonモジュールコンパイル用のDocker Imageを作成します。

Dockerfileを編集する

...

Dockerイメージを作成する場合、一般的にDockerfileと呼ばれるイメージ作成手順を記載したファイルを作成します。

Docker Imageを作成する場合、一般的にDockerfileと呼ばれる、Image作成手順を記載したファイルを作成します。ひな形として、NumPyとOpenCVモジュールのコンパイルに必要なイメージを作成するためのDockerfileを用意しています。ひな形として、NumPy及びOpenCVモジュールのコンパイルに必要なImageを作成するためのDockerfileをexternal

external/build/sample/docker/

...

Dockerfile

Code Block
languagenone
FROM arm64v8/ubuntu:bionic

ADD qemu-aarch64-static /usr/bin
ADD exec_entry.sh /bin

RUN apt-get update \
 && apt-get install -y --no-install-recommends \
    build-essential gcc-8 g++-8 gfortran-8 python3.7 python3-distutils python3-setuptools python3.7-dev python3-pip cmake unzip \
 && apt-get -y clean && rm -rf /var/lib/apt/lists/*
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8 \
 && update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-8 800 \
 && update-alternatives --install /usr/bin/python python /usr/bin/python3.7 800
RUN python -m pip install Cython
RUN chmod +x /bin/exec_entry.sh

ENTRYPOINT ["/bin/exec_entry.sh"]
Note

※Dockerfile変更時は、上記の1,3,4,14,16行は変更しないでください。動作のために必要です。16行は変更しないでください。

Info

インターネット接続にProxyサーバが必要な場合インターネット接続にプロキシサーバが必要な場合

RUN apt-get update \

の前の行に、以下を追加してください。ProxyサーバのURL及びポート番号は、使用するProxyサーバに即したものに変更してください。

(プロキシサーバのURLやポート番号は、使用するプロキシサーバに即したものに変更してください。)

ENV http_proxy=http://proxy.example.com:8080/ https_proxy=http://proxy.example.com:8080/

Dockerイメージの作成

4.1章で作成したDockerfileを使用して、Docker Imageを作成します。

Docker Imageは、Dockerfileが存在するディレクトリで作成します。

Dockerイメージを作成する

Dockerイメージは、Dockerfileが存在するディレクトリで作成します。

Code Block
languagebash
$ cd external/build/sample/docker/
$ docker build -t compile/ubuntu-rel:0.1 .

エラーなく作成が完了したら、compile作成が完了したら、compile/ubuntu-relというリポジトリが作成されていることを確認してください。

...

Note

Dockerfileが存在するディレクトリに、以下の2ファイルが存在することを確認してください。

  • exec_entry.sh

  • qemu-aarch64-static

これらのファイルは、Pythonモジュール作成時に必要となります。これらのファイルは、Pythonモジュール作成時に必要であるため、削除しないでください。削除しないでください。

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

...

手順

コンパイル

AdamApp用Pythonモジュールは、以下手順で作成します。AdamApp用Pythonモジュールは、以下の手順で作成します。

  1. external/build/sample/docker/docker_volumeディレクトリにソースファイルを配置する。

  2. external/build/sample/docker/docker_volume/module_compile.sh にコンパイル手順を記載する。

  3. dockerを実行し、コンパイルを行う。

  4. external/build/sample/docker/docker_volume/install_pathディレクトリに作成されたモジュールが配置される。

以降の節にて、NumPy及びOpenCVの作成手順を例として記載します。チュートリアルとして、NumPyとOpenCVのコンパイルを実施します。

...

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

Numpy及びOpenCVのソースコードを以下URLからダウンロードしてください。NumpyとOpenCVのソースコードを以下URLからダウンロードしてください。

Numpy 1.14.9:

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

OpenCV 3.4.7:

https://github.com/opencv/opencv/archive/3.4.7.zip

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

...

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

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

Noteinfo

コンパイル手順記載時は、以下事項にご注意ください。コンパイル手順を更新するときは、以下にご注意ください。

  • dockerを実行した際、external/build/sample/docker/docker_volumeが/home/dockerとしてmountされます。

  • ソースファイルやコンパイルディレクトリも/home/dockerに配置されます。

  • コンパイル済みモジュールは/home/docker/install_pathにインストールするようにしてください。

  • OpenCVのコンパイルには、NumPyモジュールが必要になります。

サンプルスクリプトとしてmodule_compile.shを用意しているため、今回はmoduleshを用意しているため、チュートリアルではmodule_compile.shの変更は不要です。shを変更せずに進めます。

...

コンパイルする

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

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

このコマンドを実行すると、externalexternal/build/sample/docker/docker_volume/install_path以下に、コンパイル済みモジュールが作成されます。

...

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

Info

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

AdamAppに配置する

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

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

...

Numpyを配置する

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

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

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

src/adamapp-py/jpeg_app/python/site-packages

...

src/adamapp-py/jpeg_app/python/site-packages/numpy

OpenCV

...

OpenCVを配置する

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

external/build/sample/docker/docker_volume/install_path/lib/python3.7/dist-packages/cv2

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

src/adamapp-py/jpeg_app/python/site-packages

...

src/adamapp-py/jpeg_app/python/site-packages/cv2

OpenCVは、Python用モジュールだけではなくOpenCVライブラリも必要となるため、あわせて配置します。

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

external/build/sample/docker/docker_volume/install_path/lib

上記ディレクトリの libopencv_world.so.3.4.7を以下ディレクトリにコピーしてください。7を以下のディレクトリにコピーしてください。

例)src/adamapp-py/jpeg_app/external/lib/aarch64-linux-gnu/

Code Block
$ cp -R external/build/sample/docker/docker_volume/install_path/lib/libopencv_world.so.3.4.7 src/adamapp-py/jpeg_app/external/external/lib/aarch64-linux-gnu

コピー後、シンボリックリンクを作成してください。コピーしたら、シンボリックリンクを作成してください。

Code Block
languagebash
$ cd src/adamapp-py/jpeg_app/external/lib/aarch64-linux-gnu/
$ ln -s libopencv_world.so.3.4.7 libopencv_world.so.3.4
$ ln -s libopencv_world.so.3.4 libopencv_world.so

...

不要なファイルを削除する

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

...

また、作成されたOpenCVライブラリには、ライブラリのデバッグに使用するための情報が含まれています。

アプリケーション実行時には使用しませんので、容量削減のためデバッグ情報を削除することをお勧めします。アプリケーション実行時には使用しないため、容量削減のためデバッグ情報を削除することをお勧めします。

Code Block
languagebash
$ cd src/adamapp-py/yuv_yolo_app/external/lib/aarch64-linux-gnu/
$ aarch64-linux-gnu-strip -strip-debug libopencv_world.so.3.4.7