目次
はじめに
ここではiPRO Camera SDKを利用してコンテナアプリを開発する手順をサンプルアプリを用いて説明します。また、このチュートリアルではSDKのインストールディレクトリを${SDK_DIR}
として記載します。
Container AdamAppはSoCがambaCV5XのカメラファームウェアVer3.30以降が対象で、SDK ver2.10以降で開発可能です。カメラのSoCについてはこちらを確認ください。
ビルド手順
開発者ライセンスの利用
既に開発者ライセンス(development.key)を申請し取得していると思いますので、SDK/confフォルダに配置しておいてください。
サンプルアプリのビルド
ここでは例としてサンプルアプリをビルドする手順を実施します。
${SDK_DIR}
に移動します。
cd ${SDK_DIR}
setup_env.shでContainerAdamApp専用のオプションを新たに追加します。
source setup_env.sh ambaCV5XCEX
初回ビルド時は、インターネット上にある必要なDockerイメージのダウンロードが実施されます。
インターネットに接続していることをご確認ください。
その後、以下のシェルスクリプトでextファイルがビルドされます。
./ext_docker_build.sh [サンプルアプリのディレクトリ]
例えば、C版のskeleton_sample_app
であれば下記のようにビルドします。(Python版も同様ですので省略します)
./ext_docker_build.sh src/adamapp/skeleton_sample_app
ビルドが成功すると、サンプルアプリのディレクトリ内に以下の二つのファイルが生成されます。
[アプリ名]_[バージョン名].ext
[アプリ名]_[バージョン名].zip
アプリ名およびバージョン名はdocker_compose.yamlの上から一番最初に見つかった imageの値から取得しています。例えば image: “skeleton_sample_app:0.0.6” と記載してあれば、ファイル名はskeleton_sample_app_0.0.6.ext (zip)となります。
動作確認
カメラにインストールします(例:下記画像の緑枠からインストール可能)。作成した.extファイルを選択してインストールしてください。
アプリ画面を開きます(下記画像の赤枠ボタン)。
下記画像のような、文字列が表示されていれば成功です。
外部ライブラリを用いたビルド手順
外部ライブラリを用いたサンプルアプリのビルド
外部ライブラリを用いたアプリも、別途ソースコードをビルドしたりせずに利用することが出来ます。
また、OpenSSL (Ver 3), curl/libcurl (Ver 7.81.0)はベースのDockerイメージに搭載されているのでそのままご使用いただけます。
ここでは例としてjpeg_app_for_CV5Xをビルドする手順を実施します。
C版ではlibjpeg、Python版ではNumpyおよびOpenCVをビルドします。数時間ビルドに時間がかかる場合がありますので十分な余裕を持ってビルドください。また、十分な空き容量も確保しておいてください。
※具体的に必要な時間や空き容量は外部ライブラリに依存します。
${SDK_DIR}
に移動します。
cd ${SDK_DIR}
setup_env.shでContainerAdamApp専用のオプションを新たに追加します。
source setup_env.sh ambaCV5XCEX
その後、以下のシェルスクリプトでextファイルがビルドされます。(Python版も同様ですので省略します)
./ext_docker_build.sh src/adamapp/jpeg_app_for_CV5X
ビルドが成功すると、サンプルアプリのディレクトリ内に以下の二つのファイルが生成されます。
[アプリ名]_[バージョン名].ext
[アプリ名]_[バージョン名].zip
動作確認
カメラにインストールします(例:下記画像の緑枠からインストール可能)。作成した.extファイルを選択してインストールしてください。
アプリ画面を開きます(下記画像の赤枠ボタン)。
下記のように、起動した際にカメラが撮影した画像が表示されれば成功です。
外部ライブラリを追加する
任意の外部ライブラリを用いる場合はDockerfileを編集します。
外部ライブラリのビルドにつきましてはサポート対象外となっております。本章に記載の情報を参考に外部ライブラリをビルドしてください。問い合わせいただいてもサポートできかねますので予めご了承ください。
Dockerfileについてのドキュメントは以下を参照ください。
日本語: Dockerfile リファレンス — Docker-docs-ja 24.0 ドキュメント
★(英語版作成後に削除)英語: Dockerfile reference | Docker Docs
以下ではi-PROカメラ向けの内容を記載します。
以下にskeleton_sample_appに含まれている下記ファイルをベースに説明します。
${SDK_DIR}
\src\adamapp\skeleton_sample_app\Dockerfile.ext
FROM iprocv5xcontainerregistry.azurecr.io/cadamenv:0.1.0 AS build-env WORKDIR /app COPY . ./ WORKDIR /iprosdk RUN chmod +x setup_env.sh RUN /bin/bash -c "source setup_env.sh ambaCV5XCEXinternal && \ cd /app && \ make clean && \ make" # Application environment (arm64v8) FROM iprocv5xcontainerregistry.azurecr.io/cadamappbase:0.0.2 AS aplbase RUN useradd -ms /bin/bash moduleuser WORKDIR /app COPY --chown=moduleuser:moduleuser --from=build-env /app/configuration.txt /app/ COPY --chown=moduleuser:moduleuser --from=build-env /app/data/ /app/data/ COPY --chown=moduleuser:moduleuser --from=build-env /app/setup/ /app/setup/ COPY --chown=moduleuser:moduleuser --from=build-env /app/bin/ /app/bin/ COPY --chown=moduleuser:moduleuser --from=build-env /app/conf/ /app/conf/ USER moduleuser CMD ["bash"]
1行目から10行目はアプリのビルドを行っています。
1行目のFROMに指定しているイメージはi-PROが提供する開発環境のイメージとなります。カメラで動作するアプリをビルドするためのライブラリ等が含まれていますので、変更しないでください。
4行目では、skeleton_sample_appフォルダ内のすべてのファイル (.dockerignoreに記載したファイルを除く) をビルドイメージ内にコピーしています。
7-10行目で、setup_env.shによる環境設定およびアプリのビルドを実施しています。この行は変更しないでください。
ビルドに必要な独自のOSSを取り込みたい場合は、2-5行目の間に追加してください。以下は、libjpegをインストールする場合の例です。
#install libJpeg RUN apt update && \ apt install -y libjpeg-dev && \ apt-get clean && \ rm -rf /var/lib/apt/lists/*
また、OSSをソースコードからビルドしたい場合も同様に追加することができます。以下はEclipse Paho C Client Library for the MQTT Protocolをソースコードからビルドする場合の例です。
WORKDIR /paho RUN git clone https://github.com/eclipse/paho.mqtt.c.git && \ mkdir /tmp/build.paho && \ cd /tmp/build.paho && \ cmake -DPAHO_WITH_SSL=TRUE /paho/paho.mqtt.c && \ cmake --build .
13行目から25行目はext内に含まれ、実際にカメラ上で動作するイメージのビルド手順です。基本的な流れは、1-10行目でビルドしたバイナリをコピーする形となります。
14行目のFROMに指定しているイメージはi-PROが提供するアプリケーションのベースとなるイメージとなります。カメラでで動作するための必要最小限のファイルが含まれていますので、変更しないでください。
15行目では、カメラ内で動作させるためのユーザーを作成しています。i-PROカメラではroot権限でコンテナを動作させることは禁止されています。
17-21行目は、既にビルドしたバイナリや、必要なファイルをイメージにコピーしています。
23行目で実行ユーザーを15行目で作成した”moduleuser”に設定しています。
25行目では、このイメージの起動時のデフォルトのコマンドを指定しています。実際にはdocker-compose.yamlファイルで、ビルドしたアプリが最初に起動するように上書きされます。
15行目以降で、独自に使用するライブラリがある場合はコピーを行うコードを追加します。以下はlibjpegをコピーするコードの例です。
# copy libjpeg COPY --from=build-env /usr/lib/aarch64-linux-gnu/libjpeg.so.8.2.2 /usr/lib/aarch64-linux-gnu/ RUN ln -sf /usr/lib/aarch64-linux-gnu/libjpeg.so.8.2.2 /usr/lib/aarch64-linux-gnu/libjpeg.so.8 && \ ln -sf /usr/lib/aarch64-linux-gnu/libjpeg.so.8.2.2 /usr/lib/aarch64-linux-gnu/libjpeg.so
どのファイルをコピーする必要があるかは、ビルドしたバイナリに対してlddコマンドを使用したり、apt-getでインストールした場合は、dpkg -L コマンドを使用したりして調べてください。