,
目次
...
Table of Contents | ||||
---|---|---|---|---|
|
はじめに
AdamApp は、定められた形式(AdamApp パッケージ形式)にパッケージングをして、インス トールする必要があります。このため、AdamAppSDK では、AdamApp のビルドと AdamApp パッケージ 作成を、容易に行える環境を提供します。
本章では、AdamApp のビルド、及び、AdamApp パッケージ形式の作成に必要な情報と手順について、 AdamAppSDK で提供するサンプルプログラム(SkeletonSampleApp)を用いて説明します。
また、このチュートリアルでは、SDKのインストールディレクトリを${SDK_DIR}
として記載します。
開発環境のディレクトリ構成
AdamAppSDK のディレクトリ構成は、以下のようになります。
${SDK_DIR}/ 追加アプリ作成トップディレクトリ
bin/ Adam 実行プログラムのディレクトリ
build_config/ make 用ルールファイルのディレクトリ
conf/ 設定情報用ディレクトリ
external/ AdamApp で利用する Open Source ライブラリファイルのディレクトリ
include/ AdamApp 用ヘッダファイルディレクトリ
lib/ AdamApp 用ライブラリファイルディレクトリ
src/ AdamApp のソースコードを格納するディレクトリ
tool/ ツール類のディレクトリ
www/ Adam の操作用 HTML ページを格納するディレクトリ(未使用)
sdk_version.txt AdamSDK のバージョンを書いたファイル
setup_env.sh make 環境設定用ファイル
これ以降の節で、各ディレクトリ/ファイルの詳細な説明を行います。
include: AdamApp のヘッダーファイルのディレクトリ
include ディレクトリは、AdamApp(追加アプリ)を作成する際に必要なヘッダファイルを置いています。提供するヘッダファイルは以下の通りです。
AdamType.h Adam の型定義がされているヘッダファイルです。
AdamApi.h 追加アプリ用 API ヘッダです。
lib: AdamApp のライブラリのディレクトリ
lib ディレクトリは、AdamApp(追加アプリ)を作成する際に必要なライブラリファイルを置いています。提供するライブラリファイルは、以下の通りです。
libadam_common.so / libadam_common.a
Adam 共通ライブラリ: Adam 関連プロセスの共通ライブラリです。
libadam.so / libadam.a
追加アプリ用 API ライブラリ: 追加アプリ向けの API を提供するライブラリです。
なお、ライブラリファイルは、実行環境毎に異なるものを使う必要があります。このため、実行環境毎のディレクトリを作り、その下に、それぞれの実行環境用のライブラリファイルを用意しています。
${SDK_DIR}/lib/aarch64-linux-gnu/
i-pro ambaCV2X model 用ライブラリ
src: AdamApp のソースファイルのディレクトリ
src ディレクトリは、AdamApp(追加アプリ)のソースファイルを格納するディレクトリです。この srcディレクトリの直下に、AdamApp 毎のディレクトリをさらに作成して、そこにソースファイルを置くことを想定しています。
AdamApp のソースファイルの配置方法を理解しやすくするため、AdamApp のサンプルとして、srcディレクトリ直下に、skelton_sample_appディレクトリを配置しています。ユーザは、このskelton_sample_app ディレクトリをコピーして、そのコピーしたディレクトリ内でソースファイルを作成することで、ビルド環境の構築が容易になります。なお、skelton_sample_app ディレクトリ以下には、実際にビルド&可能な簡単なサンプルアプリケーションを格納していますので、AdamApp の API の使用方法の参考にすることができます。srcディレクトリ、及び、skelton_sample_app ディレクトリは、以下の構成になっています。
${SDK_DIR}/src/adamapp/
adamapp_setting.mk Make 用共通設定ファイル
adam_make_package.mk Make用共通ルールファイル
${SDK_DIR}/src/adamapp/skeleton_sample_app/
bin/ AdamApp 実行プログラムを格納するディレクトリ
conf/ コンフィギュレーション情報を格納するディレクトリ
data/ AdamApp 用外部データファイルを格納するディレクトリ
external/ AdamApp で使う外部ソフトウェアを配置するディレクトリ
setup/ セットアップスクリプトファイルを格納するディレクトリ
Makefile メイクファイル
configuration.txt コンフィギュレーションファイル
skeletonSampleApp.cpp サンプルアプリソースプログラム
bin: Adam 実行プログラムのディレクトリ
作成した AdamApp(追加アプリ)を実行させるために必要となる、Adam の実行プログラムを置いています。提供している実行プログラムは、下記のものになります。
adamCore : Adam の主制御を行うプログラムです。
adam.cgi : Adam の CGI プログラムです。HTTP サーバから呼び出されます。
sdkCam : sdkCAM のプログラムです。
なお、実行プログラムは、実行環境毎に異なるものを使う必要があります。このため、実行環境毎のディレクトリを作り、その下に、それぞれの実行環境用の実行プログラムを用意しています。
${SDK_DIR}/bin/
i686-linux-gnu/ PC(32bit 版)実行用バイナリ
X86_64-linux-gnu/ PC(64bit 版)実行用バイナリ
build_config: ビルド用基本設定ファイルのディレクトリ
build_config ディレクトリは、AdamApp アプリのビルドの際に必要となる make 用ルールファイルを格納しています。通常は、このディレクトリ以下のファイルを編集する必要はありません。もし、ユーザ独自で make ルールを変更したい場合には、このディレクトリ以下のファイルを編集してください。
tool: ツールのディレクトリ
tool ディレクトリは、コンフィギュレーション情報生成ツールなどの Adam 用のツールや、Adam 起動用スクリプトファイルなど、Adam 関連ファイルの作成や実行を行うツール類を格納したディレクトリです。
提供するツールは、下記のものになります。
adamapp_configurator コンフィギュレーションファイルからコンフィギュレーション情報を生成するスクリプト
httpdctl.sh httpd 起動、終了スクリプト (busybox httpd を使います)
startAdam.sh Adam 起動スクリプト
stopAdam.sh Adam 終了スクリプト
external: AdamApp に使用されるオープン ソース ライブラリのディレクトリ
external ディレクトリは、AdamApp のビルドに必要な Open Source のライブラリファイルを置いています。このディレクトリに格納されている Open Source の種類については、adamappsdk/external/license を参照してください。
なお、ライブラリファイルは、実行環境毎に異なるものを使う必要があります。このため、ターゲット毎のディレクトリを作り、その下に、それぞれの実行環境用のライブラリファイルを用意しています。
${SDK_DIR}/external/license/
external ディレクトリに格納されている Open Source のライセンスを置き場です。
${SDK_DIR}/external/lib/aarch64-linux-gnu/
i-pro ambaCV2X model 用ライブラリ
sdk_version.txt: SDK のバージョン ファイル
iPRO_CAMERA_SDK のバージョン情報が記載されています。
setup_env.sh: 設定ファイル
ビルドに必要な環境設定ファイルです。
AdamApp のパッケージ形式
AdamApp パッケージ形式とは、カメラにインストールする際のパッケージ形式です。 具体的には、下記に示すディレクトリ構成で、かつ、これらを zip 化 + 暗号化したものです。※C/C++を例に記載します。
bin/
AdamApp 実行プログラムを格納するディレクトリ
conf/
コンフィギュレーション情報を格納するディレクトリ
data/data_CV2X/data_CV5X
AdamApp 用外部データファイルを格納するディレクトリ
※data_CV2X/data_CV5X はSDK1.80以降のみ
external/
AdamApp で使う外部ソフトウェアを配置するディレクトリ
setup/
セットアップスクリプトファイルを格納するディレクトリ
上記のディレクトリに、AdamApp の実行プログラムや、コンフィギュレーション情報などの関連ファイ ルを配置します。それぞれのディレクトリの詳しい説明は、下記の通りです。
⚫ bin ディレクトリ: AdamApp 実行プログラムを格納するディレクトリ
bin ディレクトリは、AdamApp の実行プログラムを格納するディレクトリです。実行プログラ ム名は、任意の名前で構いません。 なお、AdamAppSDKを用いて、AdamAppをビルド、パッケージ化した場合には、このディレ クトリに、実行プログラムが自動的に配置されます。その際、実行プログラム名は、Makefile の PROG_NAME マクロで指定した名前となります。
⚫ conf ディレクトリ: コンフィギュレーション情報を格納するディレクトリ
conf ディレクトリは、AdamApp 用のコンフィギュレーション情報を格納するディレクトリで す。コンフィギュレーション情報は、applicense.bin と profile.binの 2つのファイルが必須です。 applicense.bin と profile.bin の 2 つのファイルは、adamapp_configurator というツールを用い て、コンフィギュレーションファイル(AdamAppSDK のサンプルでは、configuration.txt とい う名前で配置しています)から生成します。コンフィギュレーションファイルの記載方法につい ては、コンフィギュレーションファイルのフォーマットを参照してください。 なお、 AdamAppSDK を用いて、 AdamApp をビルド、パッケージ化した場合には、 configuration.txt から applicense.bin と profile.bin を自動的に生成して、このディレクトリに配 置します。
⚫ data/data_CV2X/data_CV5X ディレクトリ: AdamApp 用外部データファイルを格納するディレクトリ
data ディレクトリは、AdamApp 用外部データファイルを配置できる唯一のディレクトリで す。 AdamApp 用外部データファイルを、インストール時に同時にコピーしたい場合には、そのフ ァイルをこの下に配置します。インストール時に、コピーしたい AdamApp 用外部データファイ ルがない場合は、このディレクトリは空にしておきます。
data_CV2Xディレクトリは、ambaCV2X用のAdamApp 用外部データファイルを配置できるディレクトリで す。
data_CV5Xディレクトリは、ambaCV5X用のAdamApp 用外部データファイルを配置できるディレクトリで す。
ambaCV2XおよびambaCV5Xで共用する場合はdataディレクトリにAdamApp 用外部データファイルを格納すれば、共用されます。ambaCV2XおよびambaCV5XでAdamApp 用外部データファイルを区別する場合はdata_CV2Xディレクトリおよびdata_CV5Xディレクトリの下に配置します。
⚫ external ディレクトリ: AdamApp で使う外部ソフトウェアを配置するディレクトリ
AdamApp で利用する外部ソフトウェアのライブラリファイル(.a や.so ファイル)とヘッダファイル (.h .hpp .hxx ファイルなど)を、external ディレクトリ以下に配置してください。
⚫ setup ディレクトリ: セットアップスクリプトファイルを格納するディレクトリ
setup ディレクトリは、AdamApp のインストール時、アップデート時、アンインストール時に 実行させたいシェルスクリプトを格納します。記述できるシェルスクリプトは、Bourne Shell (実際には、Bourne Shell 互換シェルである ash を利用)スクリプトのみです。 シェルスクリプトは、下記の環境変数が渡されて実行されますので、シェルスクリプト内から これら環境変数を参照することができます。
ADAM_INSTALLID
AdamApp のインストール ID
ADAM_APP_DATA_DIR
AdamApp 用外部データファイルを格納するディレクトリのパス (= data ディレクトリのパス)
ADAM_APP_TMP_DIR
AdamApp の一時的なファイルを格納するディレクトリのパス
それぞれのシェルスクリプト名は、コンフィギュレーションファイルで指定します。 なお、シェルスクリプトを使うかどうかを、スクリプト毎に任意に設定可能です。使わない場 合は、コンフィギュレーションファイルに、シェルスクリプトのファイル名を記載しないでくだ さい。(その際、setup ディレクトリに、スクリプトファイルを配置しても問題は発生しません が、FlashROM の容量を無駄に消費することになりますので、配置しない方がよいです。)
➢ インストールスクリプト(任意)
AdamApp をインストールする際に実行されるシェルスクリプトです。AdamApp がインス トールされた直後に実行されます。
➢ アップデートスクリプト(任意)
AdamApp をアップデートする際に実行されるシェルスクリプトです。AdamApp がアップ デートされた直後に実行されます。
➢ アンインストールスクリプト(任意)
AdamApp をアンインストールする際に実行されるシェルスクリプトです。AdamApp がア ンインストールされる直前に実行されます。
Pythonの場合は下記の通りです。詳細な説明はC/C++と同様のため省略します。
bin/
AdamApp 実行プログラムを格納するディレクトリ
conf/
コンフィギュレーション情報を格納するディレクトリ
data/
AdamApp 用外部データファイルを格納するディレクトリ
python/
Python スクリプトファイルを格納するディレクトリ
setup/
セットアップスクリプトファイルを格納するディレクトリ
ターゲット依存マクロ
この節では、ターゲット依存マクロについて説明します。ターゲット依存マクロは、機種や OS などの違 いを示すもので、マクロ変数として定義され、ソースコード、ヘッダファイル、Makefileから利用すること ができます。開発者は、機種や OS などによって AdamApp の実装を変える必要がある場合、このマクロを 利用することで、作り分けることができます。
ソースファイルとヘッダーファイルのマクロ
ソースファイル、及び、ヘッダファイル用のターゲット依存マクロは、下記のマクロが定義されます。
...
Macro Name
...
Description
...
Macro to represent the architecture (ADAM_TARGET_ARCH_XXX)
...
ADAM_TARGET_ARCH_aarch64-linux-gnu
...
Linux 64bit on aarch64 (For ambaCV2X)
...
Macro to represent the model name (ADAM_TARGET_MODEL_XXX)
...
ADAM_TARGET_MODEL_ipro
...
i-pro Model
...
Macro to represent the OS (ADAM_TARGET_OS_XXX)
...
ADAM_TARGET_MODEL_linux
...
Linux
...
Macro to represent the detail platform (ADAM_TARGET_PF_XXX)
...
ADAM_TARGET_PF_ipro_ambaCV2X_linux
...
i-pro Model / ambaCV2X / Linux
Makefileのマクロ
Makefile 用のターゲット依存マクロは、下記のマクロが定義されます。
...
Macro Name
...
Value
...
Description
...
ADAM_TARGET_ARCH
...
Macro to represent the architecture
...
aarch64-linux-gnu
...
Linux 64bit on aarch64 (For ambaCV2X)
...
ADAM_TARGET_MODEL
...
Macro to represent the model name
...
ipro
...
i-pro Model
...
ADAM_TARGET_OS
...
Macro to represent the OS
...
linux
...
Linux
...
ADAM_TARGET_PF
...
Macro to represent the detail platform
...
ipro_ambaCV2X_linux
...
i-pro Model / ambaCV2X / Linux
AdamApp パッケージの生成手順
この節では、AdamApp パッケージの具体的な作成手順について、AdamAppSDK のサンプルプログラム (SkeletonSampleApp)を用いて、説明します。 パッケージ作成手順は、大きく分けて、下記の 3 つのフェーズで構成されています。
1.ソースファイルの作成、Makefile の作成
AdamApp のソースファイルを作成します。
2.関連ファイルの作成と配置
AdamApp のビルド・動作に必要なファイルを作成し、適切なディレクトリに配置します。
3.ビルド & パッケージ作成
AdamApp のビルド(コンパイル、リンク)と、パッケージ作成を行います。
それぞれの具体的な方法について、これ以降で説明していきます。
ソースファイルと Makefile を生成する
(1) ソースファイルの作成と配置
AdamAppSDK では、AdamApp のソースコードは、
<AdamAppSDK のインストールディレクトリ>/src/adamapp
以下に置くことを前提としています。
Info |
---|
Pythonのソースコードは、 <AdamAppSDKのインストールディレクトリ>/src/adamapp-py となります。 |
その前提に従って、AdamAppSDK 付属のサンプルプログラム(SkeletonSampleApp)のソースコードは、
<AdamAppSDK の イ ン ス ト ー ル デ ィ レ ク ト リ >/src/adamapp/skeleton_sample_app
に配置されています。
このため、新規に AdamApp を作りたい場合は、
<AdamAppSDK のインストールディレクトリ>/src/adamapp/<新規 AdamApp のディレクトリ名>
のディレクトリを作成し、その下にソースコード、及び、ヘッダファイル、Makefile を作成・配置する
ようにしてください。
なお、skeleton_sample_app ディレクトリをコピーして新規ディレクトリを作成することで、新規
AdamApp 作成に必要なファイル一式もコピーされますので、新規 AdamApp を作る場合は、
skeleton_sample_app ディレクトリをコピーして利用することをお薦めします。
Info |
---|
※Pythonの場合はjpeg_appディレクトリを利用することをお薦めします。 |
(2) 外部ソフトウェアのライブラリとヘッダファイルの配置(必要であれば)
AdamApp で利用する外部ソフトウェアのライブラリファイル(.a や.so ファイル)とヘッダファイル
(.h .hpp .hxx ファイルなど)を、external ディレクトリ以下に配置してください。
(3) Makefile の編集
ソースファイル、ヘッダファイルの作成後、Makefile の編集を行います。Makefileは雛形が用意されて
いますので、その雛形に必要な情報を追記して完成させます。Makefile の雛形は、変数が並んでいて、
それらの変数に値を追記する形で構成されています。
下記は、サンプルプログラム(SkeletonSampleApp)のMakefile の雛形の中から、代表的な変数を抜き出し、説明したものになります。この説明を参考にして、Makefile の編集を行って下さい。
PROG_NAME= SkeletonSampleApp
PROG_NAME は、作成されるプログラム名を指定する変数です。 プログラム名には、英数字、ハイフン、アンダースコア、ピリオドを用いることが できます。また、プログラム名の長さは 32 文字までです。
SRC_FILES= skeletonSampleApp.cpp
SRC_FILES は、ビルド対象のソースファイルを指定する変数です。 ビルド対象のすべてのソースファイルを、この変数に指定してください。 なお、この変数は、C のソースファイル(.c の拡張子のファイル)、C++のソースフ ァイル(.cpp の拡張子のファイル)を混在して指定可能です。
ADD_LIB_PATH=$(ADAM_ADD_LIB_PATH)
ADD_LIB_PATH+=
ADD_LIB_PATH は、ライプラリパスを指定する変数です。 指定時には、パス名のみを記載してください。 Adam のライブラリ以外をリンクする場合に、追記して下さい。 なお、ADD_LIB_PATH に設定済みの値[$(ADAM_ADD_LIB_PATH)]は、消さない でください。
ADD_LIBS=$(ADAM_ADD_LIBS)
ADD_LIBS+=
ADD_LIBS は、リンクするライプラリ名を指定する変数です。 Adam のライブラリ以外をリンクする場合は、この変数に追記してください。 なお、ADD_LIBS に設定済みの値[$(ADAM_ADD_LIBS)]は、消さないでください。
ADD_INCLUDE_PATH=$(ADAM_ADD_INCLUDE_PATH)
ADD_INCLUDE_PATH+=
ADD_INCLUDE_PATH は、include パスを指定する変数です。 Adam の include ファイル以外を include する場合に、そのパスを追記して下さ い。 なお、ADD_INCLUDE_PATH に設定済みの値[$(ADAM_ADD_INCLUDE_PATH)]は、 消さないでください。
PROG_CPPFLAGS= $(ADAM_DFLAGS)
PROG_CPPFLAGS+=
PROG_CPPFLAGS は、プリプロセッサオプションを指定する変数です。 AdamApp 独自のプリプロセッサオプションがある場合は、この変数に追記して下さ い。 なお、PROG_CPPFLAGSに設定済みの値[$(ADAM_DFLAGS)]は、消さないでくださ い。
PROG_CFLAGS= $(ADAM_CFLAGS)
PROG_CFLAGS+=
PROG_CFLAGS は、C のコンパイルオプションを指定する変数です。 AdamApp 独自の C コンパイルオプションがある場合は、この変数に追記して下さ い。 なお、PROG_CFLAS に設定済みの値[$(ADAM_CFLAGS)]は、消さないでくださ い。
PROG_CXXFLAGS= $(ADAM_CXXFLAGS)
PROG_CXXFLAGS+= -fno-rtti
PROG_CXXFLAGS+=
PROG_CXXFLAGS は、C++のコンパイルオプションを指定する変数です。 AdamApp 独自の C++コンパイルオプションがある場合は、この変数に追記して下さ い。 なお、PROG_CXXFLAGS に設定済みの値[$(ADAM_CXXFLAGS)]は、消さないでく ださい。
ファイルの生成と配置
(1) AdamApp 用外部データファイルの作成と配置
AdamApp から Read/Write したいファイルがある場合は、skeleton_sample_app/data ディレクトリ
以下に、作成・配置してください。なお、data ディレクトリ以下に配置されたファイルは、AdamApp
パッケージ作成時に、AdamApp パッケージの中に一緒に含められます。このため、AdamApp が実行
時には、AdamApp から data ディレクトリに配置されたファイルにアクセスすることができます。
(2) スクリプトファイルの作成と配置
AdamApp は、インストール時(直後)、アップデート時(直後)、アンインストール時(直前) に、指定されたスクリプトを実行する機能を持っています。それぞれの時に、実行したいスクリプトがあれば、skeleton_sample_app/setup ディレクトリに配置してください。もし、実行したいスクリプトがなければ、配置する必要はありません。
(3) コンフィギュレーションファイルの作成
コンフィギュレーションファイルのフォーマットに示す記載方法に従って、コンフィギュレーションファイルを作成し、configuration.txt という ファイル名で、skeleton_sample_app/ディレクトリ直下に配置してください。
(4) 設定値ファイルの作成
AdamApp で、設定値管理機能を用いる場合は、こちらに従って、設定値管理ファイルを作成し、appPrefs.json というファイル名で、skeleton_sample_app/ディレクトリ直下に配置してください。
AdamApp のビルドとパッケージの生成
AdamApp に必要なファイルの作成と配置が完了したら、AdamApp のビルドとパッケージ作成を行いま
す。具体的には、(1)AdamApp の実行環境に対応する設定ファイルを読み込み、(2)make の実行、を実施し
ます。
詳しい手順について、これ以降で説明します。
(1) ビルド用環境設定ファイルの読み込み
ビルド用環境設定ファイルとして、setup_env.sh が用意されています。これを source コマンドを用いて読み込むことで、環境設定が完了します。その際、AdamApp を動作させる実行環境に応じて、引数を指定する必要があります。
指定できる引数は下記の通りです。
i-pro ambaCV2X 用の AdamApp を作成する場合:
ipro-ambaCV2X
下記に、それぞれの場合の詳細な手順を示します。
Code Block |
---|
$ cd ${SDK_DIR}
$ source setup_env.sh ipro-ambaCV2X |
Info |
---|
下記のようなメッセージが表示されれば、ビルド用環境設定ファイルの読み込みは成功です。 ***** /usr/local/linaro-aarch64-2018.08-gcc8.2/bin/aarch64-linux-gnu-gcc found. ***** |
(2) make の実行(AdamApp のビルド&パッケージの作成)
続いて、AdamApp(追加アプリ)のビルドとパッケージ作成を行うために、make を実行します。
make を実行すると、ビルドとパッケージの作成を一気に行います。make が成功した場合には、
skeleton_sample_app ディレクトリ直下に、
SkeletonSampleApp :
SkeletonSampleApp の実行プログラム
SkeletonSampleApp.zip :
SkeletonSampleApp のパッケージ
SkeletonSampleApp.ext :
SkeletonSampleApp.zip を Base64 化したもの
の 3 つのファイルが生成されます。
Code Block |
---|
$ cd src/adamapp/skeleton_sample_app
$ ls –CF
Makefile configuration.txt skeletonSampleApp.cpp
bin/ data/ setup/
$ make
(略)
$ ls –CF
Makefile bin/ setup/
SkeletonSampleApp* configuration.txt skeletonSampleApp.cpp
SkeletonSampleApp.ext conf/ skeltonSampleApp.d
SkeletonSampleApp.zip data/ skeltonSampleApp.o |
make の実行によって、生成されるファイルの詳細な説明は、下記の通りです。
SkeletonSampleApp.zip :
必要な情報を格納した bin, data, config, setup の各ディレクトリを zip 化したパッケージファイルで す。
SkeletonSampleApp.ext :
SkeletonSampleApp.zip を Base64 化したパッケージファイルです。AdamApp のインストールす る際に、zip ファイルではなく、Base64 ファイルを指定する必要がある場合に、このファイルを用います。(監視カメラの商品 UI を用いてのインストールなど)
コンフィギュレーションファイルのフォーマット
コンフィギュレーションファイルとは、AdamApp の動作に必要な情報を記述したファイルです。Adam
実行環境は、このファイルの内容を参照して、AdamApp の制御(インストール/開始など)を行います。このため、このファイルの内容が誤っている場合は、AdamApp のインストールや開始に失敗することがありますので、正確に記述してください。
なお、このファイルは、AdamApp パッケージの作成時に参照されますので、AdamApp 作成のための
make 実行前までに作成しておく必要があります。
具体的な記述例については、任意のサンプルアプリのconfiguration.txt を参照してください。
${SDK_DIR}/src/adamapp/[任意のサンプルアプリ]/configuration.txt
configuration.txt の各用語
コンフィギュレーションファイルの各項目は、タグと値で構成されており、下記のフォーマットで記述し ます。
# 行頭の「#」はコメントアウトを表わす
# head of line ‘#’ means comment out
TagName Value
TagName と Value の間の空白は、1文字以上のスペースか、タブで構成してください。行頭の「#」は、
コメントアウトを表わします。なお、行の途中に「#」が来ても、コメントアウトとは認識されませんの
で、ご注意ください。
具体的なタグの種類は、Table1.4.1-1 に示しています。また、Value に使える文字は、タグの種類によって異なりますので、こちらについても Table1.4.1-1 を参照してください。
記述の具体例を下記に示します。
# AdamApp 実行ファイル名の設定
# set of the name of execution file of AdamApp
APPLICATION SkeletonSampleApp
# AdamApp のバージョンの設定
# set of version of AdamApp
APPVERSION V0.01
また、項目によっては、複数設定することも可能です。複数設定する場合は、下記のように項目を複数の 項目を並べて記述してください。
# APPNAME(AdamApp の正式名称)の設定
# set of the official name of AdamApp
APPNAME0 Sample Application
APPNAME1 サンプルアプリケーション
APPNAME5 esempio di applicazione
コンフィギュレーションファイルに記載できるタグ名の種類は、下記の通りです。
なお、選択性に、「M(Mandatory)」と書かれている項目は、記述必須の項目です(何も書かれていてい
ない項目は、省略可能です)。
Table 1.4.1-1 コンフィギュレーションファイルに記載するタグの説明
...
タグ名
...
説明
...
複数指定
...
選択性
...
ア プ リ ケ ー シ ョ ン 名 関 連 情 報
...
APPLICATION
...
AdamApp の実行ファイル名。 Makefile の PROG_NAME 変数と同じ名前を記載します。 使える文字は、英数字、ハイフン、アンダースコア、ピリオド で、256 文字以内です。
...
M
...
APPVERSION
...
AdamApp のバージョン。 使える文字は、英数字、ピリオドで、7 文字以内です。
...
M
...
APPNAME
...
AdamApp の正式名称。
この AdamApp の正式名称は、複数言語に対応しているため、
APPNAME0 Sample Application
というように APPNAME + リージョンコードというタグ名を構成
します。複数言語の正式名称を記載する場合には、この項目を複
数記載してください。
各言語に対応するタグ名は下記の通りです。
APPNAME0:英語
APPNAME1:日本語
APPNAME5:イタリア語
APPNAME7:フランス語
APPNAME9:ドイツ語
APPNAME11:スペイン語
APPNAME12:中国語
APPNAME13:ロシア語
APPNAME14:ポルトガル語
なお、APPNAME0(英語)は、必ず指定してください。その他の
APPNAME の指定については、任意です。
シングルクォートは使用できません。文字数は、32 文字以内です。
なお、文字コードは UTF-8 でなければなりません。
...
O
...
M
...
リ ソ ー ス 関 連 情 報
...
ROMSIZE (*1)
...
AdamApp が利用する ROM 使用量 (KB)。
この ROM 使用量には、AdamApp の実行ファイルだけでなく、
data ディレクトリに格納するファイルのサイズなども含みます。
AdamApp のインストール時に、この値を参照して、インストール可能かどうかを判断します。
...
M
...
RAMSIZE (*2)
...
AdamApp が利用する RAM 使用量(KB)。
AdamApp のインストール時に、この値を参照して、インストール可能かどうかを判断します。
AdamApp の開始時に、この値を参照して、開始可能かどうかを判断します。
...
M
...
CPURATE (*2)
...
AdamApp が利用する CPU 使用率(%)。
...
M
...
AIACCRATE (*2)
...
AdamApp が利用する AI アクセラレータ使用率(%)
AdamApp の開始時に、この値を参照して、開始可能かどうかを判断します。
...
AIMEMSIZE (*3)
...
AdamApp が利用する AI メモリ使用量(KB)
AdamApp の開始時に、この値を参照して、開始可能かどうかを判断します。
...
ス ク リ プ ト フ ァ イ ル 情 報
...
INSTALLER
...
インストール実行直後に実行されるシェルスクリプト名。
記述できるシェルスクリプトは、Bourne Shell(実際には、Bourne Shell 互換シェルである ash を利用)スクリプトのみです。
使える文字は、英数字、ハイフン、アンダースコア、ピリオドで、256 文字以内です。
なお、このシェルスクリプトを用いない場合は、値を記載しないか、この項目をコメントアウトしてください。
...
UPDATER
...
アップデート実行直後に実行されるシェルスクリプト名。
記述できるシェルスクリプトは、Bourne Shell(実際には、Bourne Shell 互換シェルである ash を利用)スクリプトのみです。
使える文字は、英数字、ハイフン、アンダースコア、ピリオドで、256 文字以内です。
なお、このシェルスクリプトを用いない場合は、値を記載しないか、この項目をコメントアウトしてください。
...
UNINSTALLER
...
アンインストール実行直前に実行されるシェルスクリプト名。
記述できるシェルスクリプトは、Bourne Shell(実際には、Bourne Shell 互換シェルである ash を利用)スクリプトのみです。
使える文字は、英数字、ハイフン、アンダースコア、ピリオドで、256 文字以内です。
なお、このシェルスクリプトを用いない場合は、値を記載しないか、この項目をコメントアウトしてください。
...
ラ イ セ ン ス 関 連 情 報
...
FUNCID
...
機能 ID。機能 ID は、AdamApp 毎に一意に割当てられる値で、通常、i-PRO 株式会社によって定められます。
この項目は、AdamApp に機能 ID を紐づけるためのものです。
使える文字は、16 進数で 8 桁の値です。
Info |
---|
AdamApp 開発時には、0000FF01~0000FFFF の間で設定してください。 |
...
M
*1: ROMSIZE
以下の合計:
実行可能なファイルと共有ライブラリ(Linux サイズコマンドで取得した”text”と”data”のフィールドの合計値)。
Data ディレクトリの容量
Conf ディレクトリの容量
*2: RAMSIZE, CPURATE, AIACCRATE,
初めにサンプルアプリケーションと同じ値を設定してください。最後に、i-PRO カメラ上でアプリケーションを実行した際の値を設定してください。これらのパラメータについてはResource Monitorを参照ください。
また、利用可能な ROM/RAM のリソースについてはAppendix B: AdamApp で利用可能な CPU と RAMを参照ください。
*3: AIMEMSIZE
サンプルアプリケーションと同じ値を設定してください。
AIアクセラレーターの活用事例
Note |
---|
・AI アクセラレータは i-pro ambaCV2X モデル向けの AdamApp でのみ、利用可能です。 ・ツール(cvtool)は AdamAppSDK には含まれていません。必要な場合には、i-PRO 株式会社にお問合せください。 |
i-pro ambaCV2X モデルのカメラには、AI の推論処理用アクセラレータ(CVFlow)を内蔵しています。
AdamApp からは、専用の API 経由でこのアクセラレータを使用することが可能です。API の入力として、アクセラレータ用のバイナリファイルが必要になります。以下の手順でバイナリの作成、およびAdamApp への組み込みを行ってください。
[手順]
学習済みの AI モデルを、アクセラレータ用のバイナリファイルに変換します。
AdamApp パッケージの生成手順の記載手順にしたがって、AdamApp パッケージを作成します。この際に、手順 1.で作成したバイナリを data/cnn ディレクトリの下に置いてください。
...
Adam では、上記の手順 1.を行うためのツール(cvtool)を用意しています。cvtool の使用方法については、 AIモデル変換ツールを参照してください。
Appendix
Appendix A: 製品のセキュリティについて
製品セキュリティを確保するため以下の事に注意して開発してください。
・静的解析を実施してください。
・脆弱性の検証を行ってください。
・OSS 使用時には、最新の OSS を使用する、或いは、既知の脆弱性を確認してからご使用ください。
Appendix B: AdamApp で利用可能な CPU と RAM
AdamApp で利用可能な CPU 使用率及び RAM 使用量は、i-PRO カメラの機種によって異なります。
CPU 使用率が上限に達すると、カメラはそれ以上 AdamApp が CPU を使用しないように制限します。
メモリ使用量が上限に達すると、AdamApp は強制終了されます。
機種ごとの利用可能なリソース情報は下記 URL を参照下さい。
https://dev-partner.i-pro.com/space/TPFAQ/694780048
...
YC画像取得
...
アプリで使用可能な解像度一覧について
アプリが使用可能なYC画像の解像度リストは、カメラファームウェアの設定に応じて変わります。
参考:https://dev-partner.i-pro.com/space/TPFAQ/1172766733/ADAM_CamPref_Get()で取得可能なYC解像度一覧
カメラの上下反転設定に対応するための実装
CV2xカメラの画像回転・上下反転設定を使用する場合、アプリが取得するYC画像は自動では反転されず、アプリ内で反転処理を実装する必要があります。
また一部のCV2xカメラ(ボックスタイプ、ドームタイプ)では、上下反転設定にかかわらず、画像センサの取付け向きの関係で、アプリが取得可能なYC画像がデフォルト状態で反転しています。以下のページを参考にYC画像取得後の反転処理を実装して下さい。
https://dev-partner.i-pro.com/space/TPFAQ/965477999/カメラの取り付け向きと取得YC画像について
この実装はSDK v2.01以降に同梱されているサンプルアプリケーションweb_template_app, yuv_dnn_app,
yuv_pose_ap, yuv_ssd_app, yuv_yolo_app,yuv_yolov5_app,yuv_yolov8_appで実装されています。
全方位カメラの映像取得
撮像モード設定に応じて、魚眼画像、パノラマ画像など所望の画像をアプリで使用することが可能です。
https://dev-partner.i-pro.com/space/TPFAQ/1300103211/全方位カメラの映像をAdamAppアプリで使用する
マルチセンサカメラの映像取得
マルチセンサカメラでは、アプリをインストール時、インストール対象のカメラNo(No.1~No.4)を選択してインストールします。アプリが取得するYC画像はADAM_DevYcVideo_Createでは自動でそのカメラNoの映像が取得されます。ADAM_DevRawVideo_Create使用時は引数に応じて自動または特定のカメラNoの映像を指定することが可能です。
また、例えばアプリのWEB画面でそのカメラNoの映像を表示する場合は、Adam_GetSensorChannelでそのアプリがインストールされているカメラNoを取得後、映像配信のCGIを使用してください。
(ex. /cgi-bin/mjpeg?ch=2, /cgi-bin/mjpeg?ch=3, /cgi-bin/mjpeg?ch=4)
この実装はサンプルアプリケーションweb_template_appで実装されています。
また、YC画像のフレームレートに制限があります。
2M / 4Mタイプ: 最大15 fps
5M / 6M / 4Kタイプ: 最大7.5 fps
AIアクセラレータの活用
...
Note |
---|
・AI アクセラレータは i-pro ambaCV2X,CV5X モデルでのみ利用可能です。 ・ツール(cvtool)は AdamAppSDK には含まれていません。必要な場合には、i-PRO 株式会社にお問合せください。 |
ambaCV2X,CV5Xのカメラには、AI の推論処理用アクセラレータ(CVFlow)を内蔵しています。
AdamApp からは、専用の API 経由でこのアクセラレータを使用することが可能です。API の入力として、アクセラレータ用のバイナリファイルが必要になります。以下の手順でバイナリの作成、およびAdamApp への組み込みを行ってください。
[手順]
学習済みの AI モデルを、アクセラレータ用のバイナリファイルに変換します。
SDKパッケージの構造とビルド方法の記載手順にしたがって、AdamApp パッケージを作成します。この際に、手順 1.で作成したバイナリを data/cnn ディレクトリの下に置いてください。
...
Adam では、上記の手順 1.を行うためのツール(cvtool)を用意しています。cvtool の使用方法については、 AIモデル変換ツールを参照してください。
AI処理の一般的な処理シーケンス例
...
YC画像のフレームレートとアプリケーションの処理時間について
アプリケーションが、例えば10fpsでYC画像を要求した場合、ファームウェアはアプリケーションに対して10fps(約100msec間隔)でコールバック関数を通知します。
アプリケーションのコールバック関数は、必ずこの間隔以内にコールバック関数を完了する必要があります。
コールバックを通知するタイミングで、アプリケーションの前回のコールバック関数の処理が完了していない場合(アプリケーションの処理が遅延している場合)、前回のコールバック関数が終了したタイミングで次の通知が行われます。この場合、アプリケーションが取得する画像データは古い時間のデータとなります。
またこの遅延が続くと、ファームウェアは遅延をリセットするために、メモリ上の画像データを初期化します。
アプリケーションの処理が遅延しているかどうか確認するためにはサンプルアプリyuv_ssd_app(SDK v2.10以降)のログを参考にしてください。
YC画像のタイムスタンプm_timeStampと、アプリケーションでコールバック関数が実行されたシステム時刻の差を出力するようになっています。この差が増えつづけなければ問題ありません。
カメラファームウェアで発生するイベントをトリガにして、各種処理を行う場合
すべてのYC画像に対して画像解析を行う代わりに、ADAM_DevInputAlarm_Createを使用することで例えばカメラで検知したVMDや端子アラームのイベントをアプリで受信し、その後一定時間だけ処理するような実装(この実装はサンプルアプリweb_template_appで実装されています)、あるいはADAM_DevPtzPresetPositionState_Createを使用することでPTZカメラがプリセットポジション移動したことをトリガとしてその後一定時間だけ処理するような実装が可能です。
ADAM_DevInputAlarm_CreateはPython版のアプリでは非対応です。
外部機器へのデータ送信方法
...
アプリ内で発生したイベントはSDKを使用してカメラファームウェアのアラーム連動動作機能を動作させたり、またはアプリから外部機器に対して直接通信することも可能です。
ADAM_Alarm_Notify
カメラファームウェアの以下のようなアラーム連動動作を開始させることが可能です。
例
・独自アラーム通知、HTTPアラーム通知 (参考:https://dev-partner.i-pro.com/space/TPFAQ/1029963873/TCP+Alarm%2FHTTP+Alarm)
・メール通知
・SDカードへの映像録画
・アラームFTP転送(JPEG)
・出力端子のアラーム連動出力
※本SDKはサンプルアプリalarm_sample_app、web_template_appで実装されています。
ADAM_MetaDataStream_SetRaw
RTSPのメタデータチャンネルで、Onvif meta streamとしてデータの送信が可能です。本データを活用するソフトはパートナー様で開発頂く必要があります。
※本SDKは各種サンプルアプリmeta_stream_app、web_template_appで実装されています。
ADAM_AdditionalInfo_Set
H.264、H.265、音声のネットワーク配信時のRTP拡張ヘッダに任意の情報を付与します。JPEGの場合はCOMセグメントに格納されます。本データを活用するソフトはパートナー様で開発頂く必要があります。
※本SDKは各種サンプルアプリadditional_info_sample_appで実装されています。
その他
パートナー様で自由にプロトコルの実装が可能です。サンプルアプリmqtt_sampleではMQTTを実装しています。
アプリからのカメラファームウェアのCGIの実行
...
アプリケーションからカメラファームウェアのHTTPポートに対してローカル通信としてCGIを実行することが可能です。ユーザー認証が必要となるため、カメラのユーザー名、パスワードをアプリケーションの設定値として実装する必要があります。
ローカル通信時に必要となるカメラのHTTPポート番号設定は ADAM_GetHttpInfo で取得することができます。
CGIドキュメントダウンロード:https://i-pro.com/products_and_solutions/ja/surveillance/learning-and-support/device-integration/cgi-itg-camera
各CGIの仕様については、https://japancs.i-pro.com/page/inquiryからお問い合わせください。
カメラ内部のRAM,ROMの活用
...
カメラの機種によって使用可能なリソースは異なります
参考:https://dev-partner.i-pro.com/space/TPFAQ/694780048/i-PROカメラへのソフトウェアインストール条件
ROM(フラッシュメモリ)への保存
ADAM_GetAppDataDirPathで取得されるディレクトリに対して保存したデータはカメラ内部のフラッシュメモリに保存されるため、カメラの電源をOff/Onを行っても保存されます。
フラッシュメモリには書き込み回数に上限があるため、映像から検知したデータなどを保存したい場合は、SDカードまたは外部装置へ送信して保存する必要があります。
一時的なRAMへの保存で十分の場合は、RAMの上限を超えない範囲でADAM_GetAppTmpDirPathで取得されるディレクトリに保存してください。
高頻度のフラッシュメモリへの書き込みが行われ劣化した場合、アプリのインストール、起動、その他アプリの動作に影響を及ぼす場合があります。
SDK 2.01以降のResouce Monitorでは、フラッシュメモリへのアクセス状況を確認可能です。不要なアクセスがないかどうか、開発中にご確認ください。
参考:https://dev-partner.i-pro.com/space/TPFAQ/1028163220/Resource+Monitor
また、各カメラのROMサイズの上限を超えて、保存が行われた場合、カメラのファームウェアがアプリを停止します。この場合、カメラのWEBブラウザの管理ログに「不正終了(ROM容量制限(実容量))」が表示されます。
RAMの活用
各カメラのRAMサイズの上限を超えて使用された場合、カメラのファームウェアがアプリを停止します。この場合、カメラのWEBブラウザの管理ログに「不正終了(RAM容量制限)」が表示されます。
また、ADAM_GetAppTmpDirPathで取得されるディレクトリに一時的にデータを格納することが可能です。
この場合も上限を超えないようにご使用下さい。
リソース情報の取得方法
開発中はSDK同梱のResouce Monitorで確認可能です。
アプリ内部で取得する場合は、以下のいずれかの方法で可能です。
Adam WebAPI getAppResourceInfo
/proc/[pid]/statusや/proc/[pid]/statmで取得
ADAM_GetRomRamSize *SDK v2.01以降で対応
SDメモリーカードの活用
...
カメラ設定画面の[基本]-[SDメモリーカード]-[機能拡張ソフトウェアモード]を[On]にすることで、アプリからSDカードに対してデータを書き込むことが可能です。ディレクトリはADAM_GetSdCardPathで取得可能です。
外部ライブラリSQLiteを使用して、SDメモリーカードへデータベースを構築することも可能です。サンプルアプリsqlite_appで実装されています。
[SDメモリーカードファイルシステム]設定を[FAT]で使用する場合、カメラファームウェアによるSDメモリーカードへの録画機能は動作しますが、保証できません。
[SDメモリーカードファイルシステム]設定を[ext]で使用する場合、カメラファームウェアによるSDメモリーカードへの録画機能は動作しません。
SDメモリーカードには書き込み回数の上限があります。詳細はメーカーの情報を参照ください。
WEB UIの実装
...
アプリでWEB UIを自由に実装し、カメラのWEBブラウザから表示することが可能です(ex. MJPEGと検知枠の表示、アプリの設定変更など)
WEB UIは各種サンプルアプリでも実装されており、またweb_template_appでは、一般的にアプリに必要となる機能が含まれています。
アプリのライセンスアクティベーションが必要となる場合、これらはすべてパートナー様で設計、実装頂く必要があります。カメラのMACアドレスやシリアル番号はSDKで取得可能であり、ご使用下さい。
ログの実装
...
AdamDebug.hに定義されている ADAM_DEBUG_PRINT() 関数 を用いることでログを出力すること可能です。ログはカメラのWEB画面からダウンロード可能なログデータsyslog.tgz 内の mnt/log/pflog.tgz 内の log/adam 内にある pf_< インストール ID>< processId>.log に出力されます。
また開発期間中はログのUDP出力を有効にして、ツールを使用することでリアルタイムにログの内容を確認することが可能です。
複数のAIモデル及び複数アプリの活用
...
1つのアプリに複数のAIモデルを組み込み、動作させることが可能です。
また、アプリを複数にわけ、アプリ間での通信を行う場合は、サンプルアプリiac_server_sample_app、iac_client_sample_appを参照ください。
死活監視
...
カメラのファームウェアとアプリのメインスレッドにて約20秒間隔で死活監視が行われます。メインスレッドでの待機処理や時間のかかる処理は行わないようにしてください。
連続2回アプリからの応答がなかった場合、アプリが異常になっていると判定し、ファームウェアはアプリを停止します。その後、そのアプリがスケジュール動作期間内である場合は、再度自動的に起動します。
また、外部装置からのAdamCGI(WEB API)を受信し、アプリがファームウェアに対して応答を返却しない場合も同様に停止、再起動が行われます。例えば、アプリで受信パラメータに対するチェックを行い、異常と判断した場合にもADAM_ServerResponse_SendまたはADAM_ServerResponse_SendAsIsでファームウェアに対する応答を実装する必要があります。
また、アプリ内の別のスレッドを死活監視対象に追加したい場合は、ADAM_KeepAlive_Addをご使用下さい。
CV2xとCV52カメラアプリの互換性・SoC判別方法
...
SoCがCv2xのカメラ用アプリとCV52のカメラ用アプリは互換性がありません。Cv2xカメラ用アプリをすでに開発済で、CV52カメラ用アプリを開発する場合はAIモデル変換(https://dev-partner.i-pro.com/space/TPFAQ/1187053582)と、ビルド時のオプションを変更(https://dev-partner.i-pro.com/space/TPFAQ/1112245115/SDKインストール(v1.80以降))する必要があります
ソースコードでは以下によって制御を分けることが可能です。ビルド時のオプションによって一方が有効となります。
#ifdef ADAM_TARGET_PF_ipro_ambaCV2X_linux
#ifdef ADAM_TARGET_PF_ipro_ambaCV5X_linux
SDK v2.01以降に同梱されているサンプルアプリケーションweb_template_app, yuv_dnn_app, yuv_pose_ap, yuv_ssd_app, yuv_yolo_app,yuv_yolov5_app,yuv_yolov8_appで実装されています。
また、SDK2.01以降に対応したファームウェアバージョンで追加されたSDK ADAM_GetSocTypeでSoCの情報を取得し、動的に制御を分けることも可能です。
Pythonでの開発について
...
i-PROカメラのPython環境
i-PRO カメラにあらかじめインストールされている Python 環境は下記の通りです。
...
Python 版 AdamApp は、下記の図に示すように、Main スレッドと Python スレッドから 構成されている。構成されます。
...
Python スクリプトに関しては、基本的に Python スレッドで実行される。 スレッドで実行されます。 ただし、stopCallback、httpCallback、appPrefCallback 等のコールバック関数については、 Main スレッドで実行される。 Python 版 AdamApp スレッドで実行されます。
Python版AdamApp が起動すると、まず Main スレッドが生成される。Main スレッドは AdamAppの初期化処理を行った後、Pythonスレッドを生成する。PythonスレッドはPython スレッドが生成され、AdamAppの初期化処理を行った後、Pythonスレッドを生成します。PythonスレッドはPython インタープリタを起動し、pymain.py を読み込み、Python スクリプトを実行する。 Python スクリプトを実行します。Python スクリプトが最後まで実行されると、Python スレッドは自動的に終了する。その 後 スレッドは自動的に終了します。その後 Main スレッドが終了処理を行い、AdamApp が終了する。が終了します。