目次
...
Table of Contents | ||||
---|---|---|---|---|
|
はじめに
...
ここではiPRO Camera SDKを利用してコンテナアプリを開発する手順をサンプルアプリを用いて説明します。また、このチュートリアルではSDKのインストールディレクトリを${SDK_DIR}
として記載します。
Info |
---|
このチュートリアルはSDK ver.2.10以降のみ対応しています。SDK ver.2.10未満では利用できませんのでご注意ください。また、SDK ver.2.10以降のContainer AdamAppはSoCがambaCV5Xアプリのみ開発可能です。ご利用されるカメラのSoCについてはこちらを確認ください。 また、SoCがambaCV2Xのアプリを開発される場合はこちらから開発環境を構築ください。Container AdamAppはSoCがambaCV5XのカメラファームウェアVer3.30以降が対象で、SDK ver2.10以降で開発可能です。カメラのSoCについてはこちらを確認ください。 |
ビルド手順
...
開発者ライセンスの利用
既に開発者ライセンス(development.key)を申請し取得していると思いますので、SDK/confフォルダに配置しておいてください。
...
サンプルアプリのビルド
ここでは例としてサンプルアプリをビルドする手順を実施します。
...
Code Block |
---|
source setup_env.sh ambaCV5XCEX |
Info |
---|
初回ビルド時は、インターネット上にある必要なDockerイメージのダウンロードが実施されます。 インターネットに接続していることをご確認ください。 |
その後、以下のシェルスクリプトでextファイルがビルドされます。
...
アプリ名およびバージョン名はdocker_compose.yamlの上から一番最初に見つかった imageの値から取得しています。例えば image: “skeleton_sample_app:0.0.6” と記載してあれば、ファイル名はskeleton_sample_app_0.0.6.ext (zip)となります。
動作確認
カメラにインストールします(例:下記画像の緑枠からインストール可能)。作成した.extファイルを選択してインストールしてください。
アプリ画面を開きます(下記画像の赤枠ボタン)。
...
下記画像のような、文字列が表示されていれば成功です。
...
外部ライブラリを用いたビルド手順
...
外部ライブラリを用いたサンプルアプリのビルド
外部ライブラリを用いたアプリも、別途ソースコードをビルドしたりせずに利用することが出来ます。外部ライブラリを用いたアプリを開発したい場合も、Dockerfileに記載することで利用することができます。
また、OpenSSL (Ver 3), curl/libcurl (Ver 7.81.0)はベースのDockerイメージに搭載されているのでそのままご使用いただけます。
ここでは例としてjpeg_app_for_CV5Xをビルドする手順を実施します。
...
[アプリ名]_[バージョン名].ext
[アプリ名]_[バージョン名].zip
動作確認
カメラにインストールします(例:下記画像の緑枠からインストール可能)。作成した.extファイルを選択してインストールしてください。
アプリ画面を開きます(下記画像の赤枠ボタン)。
...
下記のように、起動した際にカメラが撮影した画像が表示されれば成功です。
...
外部ライブラリを追加する
任意の外部ライブラリを用いる場合はDockerfileを編集します。
Note |
---|
外部ライブラリのビルドにつきましてはサポート対象外となっております。本章に記載の情報を参考に外部ライブラリをビルドしてください。問い合わせいただいてもサポートできかねますので予めご了承ください。 |
Dockerfileについてのドキュメントは以下を参照ください。
Dockerfile リファレンス — Docker-docs-ja 24.0 ドキュメント
以下ではi-PROカメラ向けの内容を記載します。
以下にskeleton_sample_appに含まれている下記ファイルをベースに説明します。
${SDK_DIR}
\src\adamapp\skeleton_sample_app\Dockerfile.ext
Code Block |
---|
ARG CADAMBUILDBASE_PATH
ARG CADAMAPPBASE_PATH
FROM ${CADAMBUILDBASE_PATH} 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 ${CADAMAPPBASE_PATH} 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行目から12行目はアプリのビルドを行っています。
3行目のFROMに指定しているイメージはi-PROが提供する開発環境のイメージとなります。カメラで動作するアプリをビルドするためのライブラリ等が含まれていますので、変更しないでください。
6行目では、skeleton_sample_appフォルダ内のすべてのファイル (.dockerignoreに記載したファイルを除く) をビルドイメージ内にコピーしています。
9-12行目で、setup_env.shによる環境設定およびアプリのビルドを実施しています。この行は変更しないでください。
ビルドに必要な独自のOSSを取り込みたい場合は、4-5行目の間に追加してください。以下は、libjpegをインストールする場合の例です。
Code Block #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をソースコードからビルドする場合の例です。
Code Block RUN apt-get update &&\ apt-get install -y build-essential gcc make cmake cmake-gui cmake-curses-gui 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 .
18行目から27行目はext内に含まれ、実際にカメラ上で動作するイメージのビルド手順です。基本的な流れは、1-12行目でビルドしたバイナリをコピーする形となります。
16行目のFROMに指定しているイメージはi-PROが提供するアプリケーションのベースとなるイメージとなります。カメラでで動作するための必要最小限のファイルが含まれていますので、変更しないでください。
17行目では、カメラ内で動作させるためのユーザーを作成しています。i-PROカメラではroot権限でコンテナを動作させることは禁止されています。
19-23行目は、既にビルドしたバイナリや、必要なファイルをイメージにコピーしています。
25行目で実行ユーザーを17行目で作成した”moduleuser”に設定しています。
27行目では、このイメージの起動時のデフォルトのコマンドを指定しています。実際にはdocker-compose.yamlファイルで、ビルドしたアプリが最初に起動するように上書きされます。
17行目以降で、独自に使用するライブラリがある場合はコピーを行うコードを追加します。以下はlibjpegをコピーするコードの例です。
Code Block # 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 コマンドを使用したりして調べてください。