yuv_ssd_appの動作説明

 

目次


 

はじめに


i-PROカメラアプリケーション開発環境の構築が完成していることを前提に説明します。
開発環境の構築が準備できていない場合、こちらを参考に完成させてください。

また、このチュートリアルではSDKのインストールディレクトリを${SDK_DIR}として記載します。

 

動作概要


yuv_ssd_appはカメラ上のモデルにオブジェクト名と枠を描画するサンプルアプリです。

 

動作に必要な外部ライブラリ


特になし。

 

サンプルアプリのディレクトリパス


C/C++のソースコードは下記に格納されています。

${SDK_DIR}/src/adamapp/yuv_ssd_app

Pythonのソースコードは下記に格納されています。

${SDK_DIR}/src/adamapp-py/yuv_ssd_app

 

AIモデル変換ツールの利用


サンプルアプリをビルドする前に、AIモデル変換ツールを利用する必要があります。

yuv_ssd_appサンプルアプリには下記ファイルを用意しているので、AIモデル変換ツールを利用しなくても動作確認は可能です。

[ambaCV2Xアプリの場合]
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV2X/cnn/mobilenet_priorbox_fp32.bin
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV2X/cnn/mobilenetv1_ssd_cavalry.bin
[ambaCV5Xアプリの場合]
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV5X/cnn/mobilenet_priorbox_fp32.bin
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV5X/cnn/mobilenetv1_ssd_cavalry.bin

下記からAIモデル変換ツールを取得し、環境構築してください。

AIモデル変換ツール - Technology Partner - Confluence (atlassian.net)

お問い合わせからご提供までは数日お時間をいただいております。

 環境構築が完了しましたら、下記を参考にサンプルモデルの変換を行ってください。

AIモデル変換ツール:Tensorflow編 - Technology Partner - Confluence (atlassian.net)

 

サンプルアプリのビルド方法(C/C++)


SDKのインストールディレクトリでビルド用環境設定ファイルの読み込みを実施します。

$ cd ${SDK_DIR} $ source setup_env.sh ipro-ambaCV2X

ビルド用環境設定は各環境に合わせて実施してください。
ここでは、ipro-ambaCV2X を指定します。

 

次にサンプルアプリのディレクトリに、モデル変換したmobilenet_priorbox_fp32.binおよびmobilenetv1_ssd_cavalry.binファイルを下記の構成で配置します。

[ambaCV2Xアプリの場合]
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV2X/cnn/mobilenet_priorbox_fp32.bin
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV2X/cnn/mobilenetv1_ssd_cavalry.bin
[ambaCV5Xアプリの場合]
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV5X/cnn/mobilenet_priorbox_fp32.bin
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV5X/cnn/mobilenetv1_ssd_cavalry.bin

makeします。

$ cd src/adamapp/yuv_ssd_app $ make

${SDK_DIR}/src/adamapp/yuv_ssd_app に.extファイルが作成されていれば成功です。

 

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

 

カメラの映像が表示されていれば成功です。

 

サンプルアプリのビルド方法(Python)


SDKのインストールディレクトリでビルド用環境設定ファイルの読み込みを実施します。

$ cd ${SDK_DIR} $ source setup_env.sh ipro-ambaCV2X

 

次にサンプルアプリのディレクトリに、モデル変換したmobilenet_priorbox_fp32.binおよびmobilenetv1_ssd_cavalry.binファイルを下記の構成で配置します。

[ambaCV2Xアプリの場合]
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV2X/cnn/mobilenet_priorbox_fp32.bin
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV2X/cnn/mobilenetv1_ssd_cavalry.bin
[ambaCV5Xアプリの場合]
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV5X/cnn/mobilenet_priorbox_fp32.bin
${SDK_DIR}/src/adamapp/yuv_ssd_app/data_CV5X/cnn/mobilenetv1_ssd_cavalry.bin

makeします。

${SDK_DIR}/src/adamapp-py/yuv_ssd_app に.extファイルが作成されていれば成功です。

 

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

 

カメラの映像が表示されていれば成功です。

 

サンプルアプリの使用方法


テレビのモニターやソファなどをカメラに映してみると、該当するモデルにオブジェクト名と枠が描画されます。各自で試してみてください。

 

補足情報


・設定の変更

このアプリケーションには、ユーザーが変更できるいくつかの設定があります。 一部の設定を変更する場合は、「ADAM OPERATION UI」HTMLページの「AppPrefs」ボタンを押してください。
以下は、ユーザーが現在変更できる設定のリストです。

Resoultion:
YUV 画像を取得するための解像度。HD(1280x720)またはFHD(1920x1080)を指定してください。ただし、カメラの性能によっては指定した値で動作しない場合があります。

Frame rate:
YUV画像を取得するためのフレームレート。 1以上を指定してください。 ただし、カメラの性能によっては指定された値で動作しない場合があります。

・AIモデルの変更方法

  1. data_CV2X/cnn/mobilenetv1_ssd_cavalry.bin
    data_CV5X/cnn/mobilenetv1_ssd_cavalry.bin
    および
    data_CV2X/cnn/mobilenet_priorbox_fp32.bin
    data_CV5X/cnn/mobilenet_priorbox_fp32.bin
    をご使用のモデルに置き換えてください。

  2. main.cppの以下の部分を機種に合わせて変更してください。
    #define OUTSIZE_HEIGHT <モデルの入力高さ>
    #define OUTSIZE_WIDTH <モデルの入力幅>

    #define NETNAME <モデルのファイル名>
    #define PRIORBOXFILE <前のボックスのファイル名>
    #define LAYERNAMEIN <モデルのレイヤー名を入力>
    #define LAYERNAMEOUT_MBOX_LOC <境界ボックスの位置を示すモデルの出力レイヤー名>
    #define LAYERNAMEOUT_MBOX_CONF_FLATTEN <境界ボックスの信頼性を示すモデルの出力レイヤー名>
    #define PROPERTY_NUMCLASSES <背景ラベルを含むクラスの数>
    #define PROPERTY_MBOXLOCSIZE <境界ボックスの数 * 4> : 4 は (x,y,w,h) を意味します
    #define PROPERTY_BACKGROUND_LABEL_ID <背景ラベル ID>

    次のパラメータは、tensorflow SSD に対してのみ有効です。 caffe SSD の場合は、これらの値を 0 に設定してください。
    #define X_SCALE <X スケール値>
    #define Y_SCALE <Yスケール値>
    #define WIDTH_SCALE <幅スケール値>
    #define HEIGHT_SCALE <高さスケール値>

  3. モデルに応じて"objectname" (label-objectname matrix)を記述してください。

・利用ポート

このアプリケーションは、WebSocket 通信に 8081 ポートを使用します。

・ライセンス

MIT License

Copyright (c) 2018 chuanqi305

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.