チュートリアル: TensorFlow Lite を使用してカメラからの画像に対してサンプル画像分類推論を実行する - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チュートリアル: TensorFlow Lite を使用してカメラからの画像に対してサンプル画像分類推論を実行する

このチュートリアルでは、TensorFlow Lite イメージ分類推論コンポーネントを使用して、Greengrass コアデバイスでローカルにカメラから画像に対してサンプルイメージ分類推論を実行する方法を示します。このコンポーネントには、次のコンポーネントの従属関係が含まれます:

  • TensorFlow Lite イメージ分類モデルストアコンポーネント

  • TensorFlow Lite ランタイムコンポーネント

注記

このチュートリアルでは、Raspberry Pi もしくは NVIDIA Jetson Nano デバイスのカメラモジュールにアクセスしていますが、AWS IoT Greengrass では、Armv7l、Armv8、または x86_64 プラットフォームの他のデバイスもサポートしています。別のデバイスにカメラを設定するには、デバイスの関連マニュアルを参照してください。

Greengrass デバイスでの機械学習の詳細については、「機械学習の推論を実行する」を参照してください。

前提条件

このチュートリアルを完了するには、まず チュートリアル: TensorFlow Lite を使用してサンプルイメージ分類推論を実行する を完了する必要があります。

また、以下も必要になります:

  • カメラインターフェイスを備えた Linux Greengrass コアデバイス。このチュートリアルでは、サポートされている次に示すデバイスのいずれかのカメラモジュールにアクセスします:

    Greengrass コアデバイスのセットアップの情報については、「チュートリアル: AWS IoT Greengrass V2 の開始方法」を参照してください。

    コアデバイスは、次の要件を満たしている必要があります。

    • Amazon Linux 2 または Ubuntu 18.04 を実行している Greengrass コアデバイスの場合は、GNU C ライブラリ (glibc) バージョン 2.27 以降がデバイスにインストールされている必要があります。

    • Raspberry Pi などの Armv7l デバイスでは、OpenCV-Python の依存関係がデバイスにインストールされています。次のコマンドを実行して依存関係をインストールします。

      sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    • Raspberry Pi OS Bullseye を実行する Raspberry Pi デバイスでは、次の要件を満たす必要があります。

      • NumPy 1.22.4 以降がデバイスにインストールされている。Raspberry Pi OSwireseye には以前のバージョンの が含まれているため NumPy、次のコマンドを実行して NumPy デバイスでアップグレードできます。

        pip3 install --upgrade numpy
      • デバイスで、レガシーカメラスタックが有効になっていること。Raspberry Pi OS Bullseye には、デフォルトで新しいカメラスタックが含まれており有効化されていますが、これには互換性がないるため、レガシーカメラスタックを有効にしておく必要があります。

        レガシーカメラスタックを有効にするには
        1. 次のコマンドを実行して、Raspberry Pi 設定ツールを開きます。

          sudo raspi-config
        2. [Interface Options] (インターフェイスオプション) を選択します。

        3. [Legacy camera] (レガシーカメラ) を選択して、レガシーカメラスタックを有効にします。

        4. Raspberry Pi を再起動します。

  • Raspberry Pi または NVIDIA Jetson Nano デバイスの場合、Raspberry Pi カメラモジュール V2 - 8 megapixel、1080p。カメラの設定方法については、Raspberry Pi ドキュメントで「カメラの接続」を参照してください。

ステップ 1: デバイスのカメラモジュールを設定

このステップでは、デバイスのカメラモジュールをインストールして有効にします。デバイスに次のコマンドを実行します。

Raspberry Pi (Armv7l)
  1. カメラモジュールの picamera インターフェイスをインストールします。次のコマンドを実行して、カメラモジュールとこのチュートリアルに必要な他の Python ライブラリをインストールします。

    sudo apt-get install -y python3-picamera
  2. Picamera が正常にインストールされたことを確認します。

    sudo -u ggc_user bash -c 'python3 -c "import picamera"'

    出力にエラーが含まれていない場合、検証は成功です。

    注記

    デバイスにインストールされた Python 実行可能ファイルが python3.7 である場合、このチュートリアルのコマンドに python3 ではなく、python3.7 を使用します。依存関係のエラーを回避するために、pip インストールが正しい python3 バージョンまたは python3.7 バージョンにマップされていることを確認してください。

  3. デバイスを再起動します。

    sudo reboot
  4. Raspberry Pi 設定ツールを開きます。

    sudo raspi-config
  5. 矢印キーを使用して [Interfacing Options] (インターフェイスオプション) を開き、カメラインターフェイスを有効にします。プロンプトが表示されたら、デバイスを再起動します。

  6. 次のコマンドを実行してカメラの設定をテストします。

    raspistill -v -o test.jpg

    これにより、Raspberry Pi のプレビューウィンドウが開き、test.jpg という写真が現在のディレクトリに保存されて、カメラに関する情報が Raspberry Pi のターミナルに表示されます。

  7. 次のコマンドを実行し、シンボリックリンクを作成して、推論コンポーネントがランタイムコンポーネントによって作成されたバーチャル環境からカメラにアクセスできるようにします。

    sudo ln -s /usr/lib/python3/dist-packages/picamera "MLRootPath/greengrass_ml_tflite_venv/lib/python3.7/site-packages"

    このチュートリアルの MLRootPath のデフォルト値は です/greengrass/v2/work/variant.TensorFlowLite/greengrass_ml。この場所の greengrass_ml_tflite_venv フォルダは、チュートリアル: TensorFlow Lite を使用してサンプルイメージ分類推論を実行する で初めて推論コンポーネントをデプロイするときに作成されます。

Jetson Nano (Armv8)
  1. 次のコマンドを実行してカメラの設定をテストします。

    gst-launch-1.0 nvarguscamerasrc num-buffers=1 ! "video/x-raw(memory:NVMM), width=1920, height=1080, format=NV12, framerate=30/1" ! nvjpegenc ! filesink location=test.jpg

    これは test.jpg という名前のイメージをキャプチャして現在のディレクトリに保存します。

  2. (オプション) デバイスを再起動します。前の手順で gst-launch コマンドを実行時に問題が発生した場合、デバイスを再起動するとこれらの問題が解決される場合があります。

    sudo reboot
注記

Jetson Nano など、Armv8 (Aarch64) デバイスの場合、推論コンポーネントが、ランタイムコンポーネントによって作成されたバーチャル環境からカメラにアクセスできるようにするシンボリックリンクを作成する必要はありません。

ステップ 2: デフォルトの通知トピックのサブスクライブ状況を確認

チュートリアル: TensorFlow Lite を使用してサンプルイメージ分類推論を実行する、 AWS IoT ml/tflite/image-classificationトピックの TensorFlow Lite イメージ分類コンポーネントによって発行された MQTT メッセージを監視するように、 AWS IoTコンソールで MQTT クライアントを設定しました。AWS IoT コンソールで、このサブスクリプションが存在することを確認します。そうでない場合、ステップ 1: デフォルトの通知トピックへサブスクライブ の手順に従って、コンポーネントを Greengrass コアデバイスにデプロイする前に、このトピックをサブスクライブします。

ステップ 3: TensorFlow Lite イメージ分類コンポーネント設定を変更してデプロイする

このステップでは、 TensorFlow Lite イメージ分類コンポーネントを設定し、コアデバイスにデプロイします。

  1. AWS IoT Greengrass コンソールのナビゲーションメニューで、[Components] (コンポーネント) を選択します。

  2. [Components] (コンポーネント) ページの [Public components] (公開コンポーネント) タブで、[aws.greengrass.TensorFlowLiteImageClassification] を選択します。

  3. [aws.greengrass.TensorFlowLiteImageClassification] ページで、[Deploy] (デプロイ) を選択します。

  4. [Add to deployment] (デプロイに追加) から、次のいずれかを選択します。

    1. ターゲットデバイスにある既存のデプロイにこのコンポーネントをマージするには、[Add to existing deployment] (既存のデプロイに追加) をクリックし、修正するデプロイを選択します。

    2. ターゲットデバイスに新しいデプロイを作成するには、[Create new deployment] (新しいデプロイの作成) を選択します。デバイスに既存のデプロイがある場合は、このステップを選択すると既存のデプロイが置き換えられます。

  5. [Specify device state] (ターゲットを指定) ページで、次を実行します。

    1. [Deployment information] (デプロイ情報) で、デプロイの名前を入力または変更して、わかりやすくします。

    2. [Deployment targets] (デプロイターゲット) でデプロイのターゲットを選択し、[Next] (次へ) を選択します。既存のデプロイを修正する場合は、デプロイターゲットを変更できません。

  6. [Select components] (コンポーネントを選択) ページの [Public components] (パブリックコンポーネント) 内で、aws.greengrass.TensorFlowLiteImageClassification コンポーネントが選択されていることを確認して、[Next] (次) を選択します。

  7. [Configure components] (コンポーネントの設定) ページで、次の手順を実行します:

    1. 推論コンポーネントを選択して、[Configure component] (コンポーネントの設定) を選択します。

    2. [Configuration update] (設定更新) 内で、[Configuration to merge] (マージの設定) ボックスに次の設定更新を入力します:

      { "InferenceInterval": "60", "UseCamera": "true" }

      この設定更新により、コンポーネントはデバイスのカメラモジュールにアクセスし、カメラで撮影した画像の推論を実行します。推論コードは 60 秒ごとに実行されます。

    3. [Confirm] (確認)、[Next] (次へ) の順に選択します。

  8. [Configure advanced settings] (詳細設定) ページはデフォルト設定のままにし、[Next] (次へ) を選択します。

  9. [Review] (レビュー) ページで、[Deploy] (デプロイ) を選択します。

  1. TensorFlow Lite イメージ分類コンポーネントのデプロイ設定を定義する deployment.json ファイルを作成します。このファイルは次のようになります:

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { "InferenceInterval": "60", "UseCamera": "true" } } } }
    • [targetArn] フィールドで targetArn をデプロイメントの対象となるモノまたはモノのグループの Amazon リソースネーム (ARN) に置き換えます。形式は以下のとおりです:

      • モノ: arn:aws:iot:region:account-id:thing/thingName

      • モノのグループ: arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • このチュートリアルでは、コンポーネントバージョン 2.1.0 を使用します。aws.greengrass.TensorFlowLiteImageClassification コンポーネントオブジェクトで 2.1.0 を置き換えて、別のバージョンの TensorFlow Lite イメージ分類コンポーネントを使用します。

    この設定更新により、コンポーネントはデバイスのカメラモジュールにアクセスし、カメラで撮影した画像の推論を実行します。推論コードは 60 秒ごとに実行されます。次の値の置き換え

  2. 次のコマンドを実行して、デバイスに TensorFlow Lite イメージ分類コンポーネントをデプロイします。

    aws greengrassv2 create-deployment \ --cli-input-json file://path/to/deployment.json

デプロイには数分かかる場合があります。次のステップでは、コンポーネントログをチェックして、デプロイが正常に完了したことを確認し、推論結果を表示します。

ステップ 4: 推論結果の確認

コンポーネントをデプロイした後、Greengrass コアデバイスのコンポーネントログと、AWS IoT コンソールの AWS IoT MQTT クライアントで推論結果を確認できます。コンポーネントが推論結果をパブリッシュするトピックへサブスクライブするには、「ステップ 2: デフォルトの通知トピックのサブスクライブ状況を確認」を参照してください。

トピック
    • AWS IoT MQTT クライアント - 推論コンポーネントがデフォルトの通知トピックにパブリッシュした結果を確認するには、次のステップを実行します:

      1. AWS IoT コンソールのナビゲーションメニューで、[Test, MQTT test client] (テスト、MQTT テストクライアント) を選択します。

      2. [Subscriptions] (サブスクリプション) 内で、ml/tflite/image-classification を選択します。

    • コンポーネントログ - コンポーネントログで推論結果を確認するには、Greengrass コアデバイスで次のコマンドを実行します。

      sudo tail -f /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log

    コンポーネントログまたは MQTT クライアントで推論結果が確認できない場合、デプロイが失敗しているか、コアデバイスに到達していません。これは、コアデバイスがインターネットに接続されていない、あるいはコンポーネントを実行するために必要な許可がない場合に発生します。コアデバイスで次のコマンドを実行して、AWS IoT Greengrass Core ソフトウェアのログファイルを確認します。このファイルは、Greengrass コアデバイスのデプロイサービスからのログが含まれます。

    sudo tail -f /greengrass/v2/logs/greengrass.log

    詳細については、「機械学習の推論に対するトラブルシューティング」を参照してください。

    次のステップ

    このチュートリアルでは、 TensorFlow Lite イメージ分類コンポーネントと、カメラで撮影したイメージのサンプルイメージ分類を実行するカスタム設定オプションを使用する方法を示します。

    パブリックコンポーネント設定のカスタマイズ、またはカスタム機械学習コンポーネントの作成の詳細については、「機械学習コンポーネントのカスタマイズ」を参照してください。