Table of contents
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}
.
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}
.
cd ${SDK_DIR}
Add new options specific to ContainerAdamApp in setup_env.sh.
source setup_env.sh ambaCV5XCEX
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:
./ext_docker_build.sh [sample app directory]
For example, to build the C version of skeleton_sample_app, do the following. (The Python version is similar, so I will omit the details.)
./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
The app name and version name are taken from the first image value found at the top of docker_compose.yaml. For example, if image: “skeleton_sample_app:0.0.6” is written, the file name will be skeleton_sample_app_0.0.6.ext (zip).
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) are 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 as an example.
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}
.
cd ${SDK_DIR}
Add new options specific to ContainerAdamApp in setup_env.sh.
source setup_env.sh ambaCV5XCEX
After that, the ext file is built with the following shell script. (Python version is the same, so it is omitted.)
./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
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 external libraries
If you want to use any external libraries, edit the Dockerfile.
Building external libraries is not supported. Please refer to the information in this chapter to build external libraries. Please note that we cannot provide support even if you contact us.
For documentation on Dockerfile, see:
Dockerfile reference | Docker Docs
The following describes the content for i-PRO cameras.
以下にskeleton_sample_appに含まれている下記ファイルをベースに説明します。
${SDK_DIR}
\src\adamapp\skeleton_sample_app\Dockerfile.ext
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をインストールする場合の例です。
#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をソースコードからビルドする場合の例です。
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をコピーするコードの例です。
# 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 コマンドを使用したりして調べてください。