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.

...

サンプルアプリのビルド

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

Building the sample app

Here we will go through the steps to build a sample app as an example.

Move to ${SDK_DIR}に移動します。.

Code Block
cd ${SDK_DIR}

Add new options specific to ContainerAdamApp in setup_env.sh.shでContainerAdamApp専用のオプションを新たに追加します。

Code Block
source setup_env.sh ambaCV5XCEX
Info

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

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

...

During the first build, the necessary Docker images will be downloaded from the Internet. Please make sure you are connected to the Internet.

After that, the ext file is built with the following shell script:

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

例えば、C版のFor example, to build the C version of skeleton_sample_appであれば下記のようにビルドします。(Python版も同様ですので省略します, do the following. (The Python version is similar, so I will omit the details.)

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

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

...

If the build is successful, the following two files will be generated in the sample app directory.

  • [app name]_[バージョン名version name].ext

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

アプリ名およびバージョン名はdockerThe app name and version name are taken from the first image value found at the top of docker_compose.yamlの上から一番最初に見つかった imageの値から取得しています。例えば yaml. For example, if image: “skeleton_sample_app:0.0.6” と記載してあれば、ファイル名はskeletonis written, the file name will be skeleton_sample_app_0.0.6.ext (zip)となります。.

動作確認

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

...

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

...

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

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

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

...

Operation check

Install it on your camera (for example, you can install it from the green frame in the image below). Select the .ext file you created and install it. Open the app screen (red frame button in the image below).

...

If the text is displayed as in the image below, the operation was successful.

...

Build procedure using external libraries

...

Building a sample app with external libraries

If you want to develop an app that uses external libraries, you can use them by including them in the Dockerfile.

In addition, OpenSSL (Ver 3) and curl/libcurl (Ver 7.81.0) はベースのDockerイメージに搭載されているのでそのままご使用いただけます。ここでは例としてjpegare included in the base Docker image, so you can use them as is.

Here we will go through the steps to build jpeg_app_for_CV5Xをビルドする手順を実施します。CV5X as an example.

Note

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

The C version builds libjpeg, and the Python version builds Numpy and OpenCV. The build may take several hours, so please allow yourself plenty of time to complete. Also, please make sure you have enough free space.
*The specific time and free space required will depend on the external library.

Move to ${SDK_DIR}に移動します。.

Code Block
cd ${SDK_DIR}

Add new options specific to ContainerAdamApp in setup_env.sh.shでContainerAdamApp専用のオプションを新たに追加します。

Code Block
source setup_env.sh ambaCV5XCEX

その後、以下のシェルスクリプトでextファイルがビルドされます。(Python版も同様ですので省略しますAfter that, the ext file is built with the following shell script. (Python version is the same, so it is omitted.)

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

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

...

If the build is successful, the following two files will be generated in the sample app directory.

  • [app name]_[バージョン名version name].ext

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

動作確認

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

...

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

...

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

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

Note

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

Dockerfileについてのドキュメントは以下を参照ください。

日本語: Dockerfile リファレンス — Docker-docs-ja 24.0 ドキュメント

...

Operation check

Install it on your camera (for example, you can install it from the green frame in the image below). Select the .ext file you created and install it. Open the app screen (red frame button in the image below).

...

If the image captured by the camera is displayed when you start the app, as shown below, then the app was successful.

...

Adding other external libraries

If you want to use any external libraries, edit the Dockerfile.

Note

Building external libraries is out of our technical support. Followings are the reference.

For documentation on Dockerfile, see:

Dockerfile reference | Docker Docs

以下ではi-PROカメラ向けの内容を記載します。The following describes the content for i-PRO cameras.

 

以下にskeletonThe following explanation will be based on the following files included in skeleton_sample_appに含まれている下記ファイルをベースに説明します。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をインストールする場合の例です。Lines 1 to 12. Build the app.

  • Line 3. The image specified in FROM is the development environment image provided by i-PRO. It contains libraries for building apps that run on the camera, so please do not change it.

  • Line 6. All files in the skeleton_sample_app folder (except for files listed in .dockerignore) are copied into the build image.

  • Lines 9 to 12. This sets up the environment using setup_env.sh and builds the app. Do not change these lines.

  • Lines 4 to 5. If you want to include your own OSS required for the build, add it between lines 4 and 5. The following is an example for installing libjpeg.

    Code Block
    #install libJpeg
    RUN apt update && \
        apt install -y libjpeg-dev && \
        apt-get clean && \
        rm -rf /var/lib/apt/lists/* 

     

  • また、OSSをソースコードからビルドしたい場合も同様に追加することができます。以下はEclipse You can also add OSS if you want to build it from source code. Below is an example of building the Eclipse Paho C Client Library for the MQTT Protocolをソースコードからビルドする場合の例です。Protocol from source code.

    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をコピーするコードの例です。Lines 18 to 27. These are the steps to build the image included in the ext that actually runs on the camera. The basic flow is to copy the binary built in lines 1-12.

  • Line 16. The image specified in FROM is the base image for the application provided by i-PRO. It contains the minimum files required to run on the camera, so do not change it.

  • Line 17. This creates a user to run in the camera. The i-PRO camera prohibits running containers with root privileges.

  • Lines 19 to 23. Copy the already built binaries and necessary files to the image.

  • Line 25. The execution user is set to the “moduleuser” created in line 17.

  • Line 27. This specifies the default command for this image when it starts. This overrides the docker-compose.yaml file so that the app you built starts first.

  • Line 17. From line 17 onwards, add code to copy any libraries you wish to use. Below is an example of code to copy 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 コマンドを使用したりして調べてください。To find out which files you need to copy, use the ldd command on the binary you built, or the dpkg -L command if you installed it with apt-get.