Versions Compared

Key

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

,

目次

...

Table of Contents
minLevel1
maxLevel4

...

CV2xカメラの画像回転・上下反転設定を使用する場合、アプリが取得するYC画像は自動では反転されず、アプリ内で反転処理を実装する必要があります。

また一部のCV2xカメラ(ボックスタイプ、ドームタイプ)では、上下反転設定にかかわらず、画像センサの取付け向きの関係で、アプリが取得可能なYC画像がデフォルト状態で反転しています。以下のページを参考にYC画像取得後の反転処理を実装して下さい。

https://dev-partner.i-pro.com/space/TPFAQ/965477999/カメラの取り付け向きと取得YC画像について

...

 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 への組み込みを行ってください。

[手順]

  1. 学習済みの AI モデルを、アクセラレータ用のバイナリファイルに変換します。

  2. 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と、アプリケーションでコールバック関数が実行されたシステム時刻の差を出力するようになっています。この差が増えつづけなければ問題ありません。

カメラファームウェアで発生するイベントをトリガにして、各種処理を行う場合

...

ADAM_GetAppDataDirPathで取得されるディレクトリに対して保存したデータはカメラ内部のフラッシュメモリに保存されるため、カメラの電源をOff/Onを行っても保存されます。

フラッシュメモリには書き込み回数に上限があるため、映像から検知したデータなどを保存したい場合は、SDカードまたは外部装置へ送信して保存する必要があります。

一時的なRAMへの保存で十分の場合は、RAMの上限を超えない範囲でADAM_GetAppTmpDirPathで取得されるディレクトリに保存してください。

高頻度のフラッシュメモリへの書き込みが行われ劣化した場合、アプリのインストール、起動、その他アプリの動作に影響を及ぼす場合があります。

SDK 2.01以降のResouce Monitorでは、フラッシュメモリへのアクセス状況を確認可能です。不要なアクセスがないかどうか、開発中にご確認ください。

...

アプリのライセンスアクティベーションが必要となる場合、これらはすべてパートナー様で設計、実装頂く必要があります。カメラのMACアドレスやシリアル番号はSDKで取得可能であり、ご使用下さい。

ログの実装

...

AdamDebug.hに定義されている ADAM_DEBUG_PRINT() 関数 を用いることでログを出力すること可能です。ログはカメラのWEB画面からダウンロード可能なログデータsyslog.tgz 内の mnt/log/pflog.tgz 内の log/adam 内にある pf_< インストール ID>< processId>.log に出力されます。

また開発期間中はログのUDP出力を有効にして、ツールを使用することでリアルタイムにログの内容を確認することが可能です。

複数のAIモデル及び複数アプリの活用

...

1つのアプリに複数のAIモデルを組み込み、動作させることが可能です。

...

また、SDK2.01以降に対応したファームウェアバージョンで追加されたSDK ADAM_GetSocTypeでSoCの情報を取得し、動的に制御を分けることも可能です。

Pythonでの開発について

...

i-PROカメラのPython環境

i-PRO カメラにあらかじめインストールされている Python 環境は下記の通りです。

Interpreter : Python 3.7.9

External library : python adam module for ADAM API

Python版AdamAppの構造

Python 版 AdamApp は、下記の図に示すように、Main スレッドと Python スレッドから 構成されます。

...

Python スクリプトに関しては、基本的に Python スレッドで実行されます。 ただし、stopCallback、httpCallback、appPrefCallback 等のコールバック関数については、 Main スレッドで実行されます。

Python版AdamApp が起動すると、まず Main スレッドが生成され、AdamAppの初期化処理を行った後、Pythonスレッドを生成します。PythonスレッドはPython インタープリタを起動し、pymain.py を読み込み、Python スクリプトを実行します。Python スクリプトが最後まで実行されると、Python スレッドは自動的に終了します。その後 Main スレッドが終了処理を行い、AdamApp が終了します。