Versions Compared

Key

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

Table of contents


Table of Contents
minLevel1
maxLevel4

Overview


This tutorial explains how to develop a container app using the iPRO Camera SDK, using a sample app. In this tutorial, the installation directory of the SDK is indicated as ${SDK_DIR}.

Info

Container AdamApp is for cameras with SoC ambaCV5X and firmware version 3.30 or later, and can be developed with SDK version 2.10 or later. Please check here for camera SoC.

How to build


Use of Developer License

You should already have applied for and obtained a developer license (development.key), so place it in the SDK/conf folder.

Image Removedimage-20240913-103323.pngImage Added

サンプルアプリのビルド

ここでは例としてサンプルアプリをビルドする手順を実施します。

${SDK_DIR}に移動します。

Code Block
cd ${SDK_DIR}

setup_env.shでContainerAdamApp専用のオプションを新たに追加します。

Code Block
source setup_env.sh ambaCV5XCEX
Info

初回ビルド時は、インターネット上にある必要なDockerイメージのダウンロードが実施されます。

インターネットに接続していることをご確認ください。

その後、以下のシェルスクリプトでextファイルがビルドされます。

Code Block
./ext_docker_build.sh [サンプルアプリのディレクトリ]

例えば、C版のskeleton_sample_appであれば下記のようにビルドします。(Python版も同様ですので省略します)

Code Block
./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ファイルを選択してインストールしてください。
アプリ画面を開きます(下記画像の赤枠ボタン)。

20240910-103544.png

下記画像のような、文字列が表示されていれば成功です。

Image-20240830-155501.jpg

外部ライブラリを用いたビルド手順


外部ライブラリを用いたサンプルアプリのビルド

外部ライブラリを用いたアプリを開発したい場合も、Dockerfileに記載することで利用することができます。

また、OpenSSL (Ver 3), curl/libcurl (Ver 7.81.0)はベースのDockerイメージに搭載されているのでそのままご使用いただけます。

ここでは例としてjpeg_app_for_CV5Xをビルドする手順を実施します。

Note

C版ではlibjpeg、Python版ではNumpyおよびOpenCVをビルドします。数時間ビルドに時間がかかる場合がありますので十分な余裕を持ってビルドください。また、十分な空き容量も確保しておいてください。
※具体的に必要な時間や空き容量は外部ライブラリに依存します。

${SDK_DIR}に移動します。

Code Block
cd ${SDK_DIR}

setup_env.shでContainerAdamApp専用のオプションを新たに追加します。

Code Block
source setup_env.sh ambaCV5XCEX

その後、以下のシェルスクリプトでextファイルがビルドされます。(Python版も同様ですので省略します)

Code Block
./ext_docker_build.sh src/adamapp/jpeg_app_for_CV5X

ビルドが成功すると、サンプルアプリのディレクトリ内に以下の二つのファイルが生成されます。

  • [アプリ名]_[バージョン名].ext

  • [アプリ名]_[バージョン名].zip

動作確認

カメラにインストールします(例:下記画像の緑枠からインストール可能)。作成した.extファイルを選択してインストールしてください。
アプリ画面を開きます(下記画像の赤枠ボタン)。

Image-20240830-155500.jpg

下記のように、起動した際にカメラが撮影した画像が表示されれば成功です。

外部ライブラリを追加する

任意の外部ライブラリを用いる場合はDockerfileを編集します。

Note

外部ライブラリのビルドにつきましてはサポート対象外となっております。本章に記載の情報を参考に外部ライブラリをビルドしてください。問い合わせいただいてもサポートできかねますので予めご了承ください。

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

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 コマンドを使用したりして調べてください。