Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

目次


はじめに


ここではAzure IoT Edgeコンテナを利用してiPRO Camera SDKアプリのビルドし、動作確認する手順を説明します。また、このチュートリアルではSDKのインストールディレクトリを${SDK_DIR}として記載します。

このチュートリアルはSDK ver.2.00以降のみ対応しています。SDK ver.2.00未満では利用できませんので注意ください。

動作確認手順


Visual Studio Code上で新規のIoT Edge Solutionを作成する

以下は参考にするサンプルアプリがC版はskeleton_sample_app、Python版はadditional_info_sample_app、作成するEdge Solutionがtest_appの場合について説明します。注意点としてEdge Solutionの名称はすべて小文字である必要があります。

C版/Python版アプリの説明

C版/Python版いずれのアプリも動作確認方法はほぼ同様です。C版を例に説明しますが、異なる部分は適宜説明します。また、アプリのパスは以下の通りですので、適宜読み替えてください。

C版アプリのパス
${SDK_DIR}/src/adamapp

Python版アプリのパス
${SDK_DIR}/src/adamapp-py

[SDKフォルダ]直下でVisual Studio Codeを立ち上げます。

cd ${SDK_DIR}
code .

 

${SDK_DIR}/src/adamapp/skeleton_sample_app フォルダを同じフォルダ内にコピーします。

コピーしたフォルダをtest_appにリネームします。

[コピーしたフォルダ]/container/modules の「skeleton_sample_app」フォルダもtest_appにリネームします。

Visual Studio CodeのEXPLORERからコピーしたフォルダ(test_app)を右クリックし、「Find in Folder…」を選択し、SEARCHウィンドウを表示します。

検索で「skeleton_sample_app」を検索しすべて「test_app」に置き換えます。対象は以下となります。

  • ${SDK_DIR}\src\adamapp\test_app\container\deployment.template.json

  • ${SDK_DIR}\src\adamapp\test_app\container\modules\test_app\module.json

作成したイメージをプッシュするコンテナレジストリの情報を入力します。

Azure Portal にログインし、対象とするコンテナレジストリを選択します。下記画面は例です。

20240124-110900.png

左側のメニューから 「設定」 - 「アクセスキー」を表示します。

20240124-110901.png

表示された情報をもとに、以下を入力します。

  • ${SDK_DIR}\src\adamapp\test_app\container\deployment.template.json
    内の “registryCredentials” を以下のように入力します。 「コンテナレジストリ名」はAzure Portalの「レジストリ名」を小文字にしたもの (「ログインサーバー」の .azurecr.ioよりも前の文字列と同じ) となります。

    "registryCredentials": {
      "[コンテナレジストリ名]": {
        "username": "$CONTAINER_REGISTRY_USERNAME_[コンテナレジストリ名]",
        "password": "$CONTAINER_REGISTRY_PASSWORD_[コンテナレジストリ名]",
        "address": "[ログインサーバー]"
      }
    }

    例えばコンテナレジストリ名がiprocv5xcontainerregistry、コンテナレジストリログインサーバーがiprocv5xcontainerregistry.azurecr.io の場合は以下のようになる。

     

  • ${SDK_DIR}\src\adamapp\test_app\container\modules\test_app\module.json
    内の “repository” を以下のように入力します。

    "repository": "[ログインサーバー]/test_app"

    コンテナレジストリログインサーバーがiprocv5xcontainerregistry.azurecr.io の場合は以下のようになる。

  • ${SDK_DIR}\src\adamapp\test_app\container
    ディレクトリ内に.envファイルを作成し、コンテナレジストリのユーザー名、パスワードを記載して保存します。

    CONTAINER_REGISTRY_USERNAME_[コンテナレジストリ名]=[ユーザー名]
    CONTAINER_REGISTRY_PASSWORD_[コンテナレジストリ名]=[password]

    例を以下に示します。

    20240124-110902.png
20240123-103105.png

アプリのコーディング

このままVisual Studio Code上で任意にコーディングを行います。

skeleton_sample_appなどをコピーした場合、ソースファイル名がコピー前 (skeleton_sample_appの場合はskeletonSampleApp.cpp) になっているので必要に応じてリネームしてください。下記は一例です。

変更前
${SDK_DIR}\src\adamapp\test_app\skeletonSampleApp.cpp
変更後
${SDK_DIR}\src\adamapp\test_app\testApp.cpp

 

Makefile内のSRC_FILESも必要に応じて修正してください。下記は一例です。

${SDK_DIR}\src\adamapp\test_app\Makefile
変更前
SRC_FILES=	skeletonSampleApp.cpp
変更後
SRC_FILES=	testApp.cpp

Makefile内のPROG_NAME、configuration.txt内のAPPLICATION、deployment.template.json内のAPPLICATION_NAMEも必要に応じて修正してください。下記は一例です。

${SDK_DIR}\src\adamapp\test_app\Makefile
変更前
PROG_NAME= SkeletonSampleApp
変更後
PROG_NAME= TestApp

${SDK_DIR}\src\adamapp\test_app\configuration.txt
変更前
APPLICATION	SkeletonSampleApp
変更後
APPLICATION	TestApp

${SDK_DIR}\src\adamapp\test_app\container\deployment.template.json
変更前
"APPLICATION_NAME=SkeletonSampleApp"
変更後
"APPLICATION_NAME=TestApp"

  

アプリのビルド

ビルドを行う際はAzure IoT拡張機能の組込み機能を使用します。Visual Studio Codeのエクスプローラで
${SDK_DIR}\src\adamapp\test_app\container\deployment.template.jsonを右クリックするとビルドメニューが表示されます。

「Build IoT Edge Solution」を選択します。この操作ではビルドのみ実施されます。

初回のビルドの場合は、コンテナレジストリへのログインが要求されます。 以下はコンテナレジストリがiprocv5xcontainerregistry.azurecr.ioの場合の例です。

ERROR: failed to solve: iprocv5xcontainerregistry.azurecr.io/cadamappbase:0.0.2: failed to authorize: failed to fetch anonymous token: unexpected status: 401 Unauthorized

この時はVisual Studio Codeの端末上で下記コマンドを入力します。

docker login iprocv5xcontainerregistry.azurecr.io

続いて表示されるUsernameおよび Passwordを入力します。コンテナレジストリのIDとパスワードを入力します。

20240124-110903.png
Username: [ユーザー名]
Password: [password]

Login Succeeded と表示されたらログイン成功です。

次に${SDK_DIR}\src\adamapp\test_app\container\deployment.template.jsonを右クリックして、
「Build and Push IoT Edge Solution」を選択します。この操作ではビルドとコンテナレジストリへのプッシュを行います。

ビルドは、${SDK_DIR}\src\adamapp\test_app\ 以下にある Dockerfile.arm64v8 ファイルに記載の通りにDocker buildx buildが実行されることで行われます。Dockerfile.の後の環境名(arm64v8)は上記の手順で選択されたアーキテクチャが選択されています。(Visual Studio Codeの下部に現在のアーキテクチャが表示されます)

20240124-110904.png

ビルドしたイメージの確認

ビルドが成功すれば、そのイメージは docker images で存在が確認できます。下記は一例です。

$ docker images
REPOSITORY                                                             TAG             IMAGE ID       CREATED          SIZE
iprocv5xcontainerregistry.azurecr.io/azureiot/test_app  0.0.5-arm64v8   f1772ccfed77   35 minutes ago   91.4MB

   

カメラへのデプロイ

左下の「AZURE IOT HUB」以下からデプロイしたいデバイスを選択し、右クリックして「1つのIoT Edgeに配置」を選択することで、カメラへデプロイされます。デプロイする内容は
${SDK_DIR}\src\adamapp\test_app\container\deployment.template.json に従います。

20240124-110905.png

Visual Studio Codeの上部にプルダウンが表示されるので下記を選択します。
${SDK_DIR}\src\adamapp\test_app\container\config\deployment.arm64v8.json

20240124-110906.png

Deployment Succeeded と表示されたらデプロイ成功です。

20240124-110907.png

Azure上でランタイム状態の確認

Azure Portal にログインして、IoT Hub - IoT Edge画面で追加したIoT Edgeデバイスを選択します。

20240124-110908.png

画面下部に表示されているデプロイしたアプリのランタイムの状態を確認します。「running」になっていればエラーが発生していない状態です。「エラー」と表示されている場合は選択するとエラーメッセージが表示されるので、デバッグしてください。

20240124-110909.png

デプロイしてしばらくはランタイムの状態は「エラー」になります。「running」になるまで時間が必要です。ただし、「running」になるまでに必要な時間はアプリに依存します。

アプリの動作確認

カメラと接続可能なPCで下記URLにアクセスします。

http://[カメラのローカルIPアドレス]/cgi-bin/cadam.cgi?methodName=getApplicationList

カメラの応答が表示されます。下記は一例です。

{
    "appCount": "1",
    "limitationMode": "Shared",
    "maxAppCount": "9",
    "appList": [
        {
            "appType": "0",
            "funcId": "0000FF01",
            "appInfo": {
                "installId": "124B569A",
                (中略)
}

"installId": "124B569A",と表示されている情報を使います。

下記のURLにアクセスします。

http://[カメラのローカルIPアドレス]/cgi-bin/cadam.cgi?Language=1&methodName=sendDataToAdamApplication&installId=[インストールID]&s_appDataType=0&s_appData=e3tMYW5ndWFnZToxfX0%3D

カメラのIPアドレスが192.168.100.33、"installId": "124B569A",の場合は下記になります。

http://192.168.100.33/cgi-bin/cadam.cgi?Language=1&methodName=sendDataToAdamApplication&installId=124B569A&s_appDataType=0&s_appData=e3tMYW5ndWFnZToxfX0%3D

下記のようにアプリ動作を確認できます。下記はskeleton_sample_appを動作させた例です。

20240124-110910.png

Checkpoints if things don't work in the WSL environment


If it does not work in WSL environment, please check the following.

  • The following must be enabled in the Visual Studio Code "LOCAL" extension

    • Dev Containers

    • Remote - SSH, Remote - SSH: Editing Configuration FIles, Remote - Tunnels, Remote Development, Remote Explorer

    • WSL

  • The following must be enabled in Visual Studio Code's "WSL: UBUNTU-20.04" extension:

    • Azure Account

    • Azure IoT Edge

    • Azure IoT Hub

  • "WSL: Ubuntu-20.04" is displayed at the bottom left of the Visual Studio Code screen.

  • If permission denied is displayed in Build IoT Edge Solution, check whether the current user has access rights to the target directory.

    sudo chown -r ipro:ipro [development directory]
    ※ipro:ipro is an example, so please set it according to each environment.

    Run the above to change the owner.

 

  • No labels