使用 TensorFlow 精简版对来自相机的图像进行样本图像分类推理 - Amazon IoT Greengrass
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 TensorFlow 精简版对来自相机的图像进行样本图像分类推理

本教程介绍了如何使用TensorFlow 精简版图像分类推理组件,在 Greengrass 核心设备上对来自摄像机的图像执行样本图像分类推理。此组件包括以下组件依赖关系:

  • TensorFlow 精简版图像分类模型存储组件

  • TensorFlow 精简组件

注意

本教程访问Raspberry PiNVIDIA 杰森纳米,或者Amazon DeepLens设备,但Amazon IoT Greengrass支持 ARMV7L、Armv8 或 x86_64 平台上的其他设备。要为其他设备设置摄像头,请参阅设备的相关文档。

Prerequisites

要完成本教程,您首先必须完成教程:使用 TensorFlow 精简版进行样本图像分类推理

您还需要以下内容:

  • 带有摄像头接口的 Greengrass 核心设备。本教程访问以下受支持的设备上的摄像头模块:

    有关设置 Greengrass 核心设备的信息,请参阅。开始使用Amazon IoT GreengrassV2

  • 对于覆盆子派或 NVIDIA 杰森纳米设备,Raspberry Pi 摄像机模块 V2-800 万像素,1080p。要了解如何设置摄像机,请参阅 Raspberry Pi 文档中的连接摄像机

  • 安装在设备上的 OpenCV Python 的依赖关系。此要求仅适用于 ARMV7L 设备,如本教程中使用的树莓派。您无需满足其他设备的此要求。

    运行以下命令以安装依赖关系:

    sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev

第 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.7而不是python3了解本教程中的命令。确保 pip 安装映射到正确的 python3.7python3 版本以避免依赖项错误。

  3. 重新启动设备。

    sudo reboot
  4. 打开 Raspberry Pi 配置工具。

    sudo raspi-config
  5. 使用箭头键打开接口选项并启用摄像机接口。如果出现提示,请允许设备重新启动。

  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"

    的默认值MLROOT路径本教程中的/greengrass/v2/work/variant.TensorFlowLite/greengrass_ml。这些区域有:greengrass_ml_tflite_venv文件夹中首次部署推理组件时创建教程:使用 TensorFlow 精简版进行样本图像分类推理

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
注意

对于 Armv8 (aArch64) 设备(如 Jetson Nano),您无需创建符号链接即可使推理组件从运行时组件创建的虚拟环境访问摄像机。

Amazon DeepLens (x86_64)
  1. 更新awscamAPT 软件包。在设备上运行以下命令。

    sudo apt-get update && sudo apt-get install awscam
  2. 重新启动设备。

    sudo reboot
  3. 运行以下每个命令创建符号链接,以使推理组件能够从运行时组件创建的虚拟环境访问摄像机。

    sudo ln -s /usr/lib/python3/dist-packages/awscam "MLRootPath/greengrass_ml_tflite_conda/envs/greengrass_ml_tflite_conda/lib/python3.7/site-packages/"
    sudo ln -s /usr/lib/python3/dist-packages/awscamdldt.so "MLRootPath/greengrass_ml_tflite_conda/envs/greengrass_ml_tflite_conda/lib/python3.7/site-packages/"

    本教程的默认值为/greengrass/v2/work/variant.TensorFlowLite/greengrass_ml。这些区域有:greengrass_ml_tflite_conda文件夹中首次部署推理组件时创建教程:使用 TensorFlow 精简版进行样本图像分类推理

有关使用的更多信息Amazon DeepLens,请参阅Amazon DeepLens开发人员指南

第 2 步:验证您对默认通知主题的订阅

In教程:使用 TensorFlow 精简版进行样本图像分类推理中,您配置了Amazon IoTMQTT 客户端配置在Amazon IoT控制台来观看由 TensorFlow 精简版图像分类组件发布的 MQTT 消息ml/tflite/image-classification主题。在Amazon IoT控制台,请验证此订阅是否存在。如果没有,请按照第 1 步:订阅默认通知主题以在将组件部署到您的 Greengrass 核心设备之前订阅本主题。

第 3 步:修改 TensorFlow 精简版图像分类组件配置并进行部署

在此步骤中,您将配置 TensorFlow Lite 映像分类组件并将其部署到您的核心设备:

  1. Amazon IoT Greengrass控制台导航菜单中,选择组件

  2. 在存储库的组件页面上的公共组件选项卡上,选择aws.greengrass.TensorFlowLiteImageClassification

  3. 在存储库的AWS. 绿草. 张力流图像同化页面上,选择部署

  4. 添加到部署,选择以下选项之一:

    1. 要将此组件合并到目标设备上的现有部署,请选择添加到现有部署,然后选择希望修订的部署。

    2. 要在目标设备上创建新部署,请选择创建新部署。如果您的设备上有现有部署,则选择此步骤将替换现有部署。

  5. 在存储库的指定目标页面上,执行以下操作:

    1. INDER部署信息中,输入或修改部署的友好名称。

    2. INDER部署目标,为您的部署选择一个目标,然后选择下一步。如果要修订现有部署,则无法更改部署目标。

  6. 在存储库的选择组件页面,在公共组件,验证aws.greengrass.TensorFlowLiteImageClassification组件,然后选择下一步

  7. 在存储库的配置组件页面上,执行以下操作:

    1. 选择推断组件,然后选择配置组件

    2. INDER配置更新中,输入以下配置更新要合并的配置

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

      通过此配置更新,组件可访问设备上的摄像头模块,并对摄像机拍摄的图像执行推断。推断代码每隔 60 秒运行一次。

    3. 选择确认,然后选择下一步

  8. 在存储库的配置高级设置页面上,保留默认配置设置,然后选择下一步

  9. 在存储库的审核页面上,选择部署

  1. 创建deployment.json文件来定义 TensorFlow 精简版图像分类组件的部署配置。此文件应类似以下内容:

    { "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 精简版图像分类组件。

    通过此配置更新,组件可访问设备上的摄像头模块,并对摄像机拍摄的图像执行推断。推断代码每隔 60 秒运行一次。替换以下值

  2. 运行以下命令以在设备上部署 TensorFlow 精简版图像分类组件:

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

部署可能需要几分钟才能完成。在下一步中,检查组件日志以验证部署是否成功完成并查看推断结果。

第 4 步:查看推断结果

部署组件后,您可以在 Greengrass 核心设备上的组件日志中查看推断结果,并在Amazon IoTMQTT 客户端Amazon IoT控制台。要订阅组件发布推理结果的主题,请参阅第 2 步:验证您对默认通知主题的订阅

主题

    • Amazon IoTMQTT 客户端-要查看推理组件在默认通知主题,请完成以下步骤:

      1. Amazon IoT控制台导航菜单中,选择测试,MQTT 测试客户端

      2. INDER订阅中,选择ml/tflite/image-classification

       

    • 组件日志-要查看组件日志中的推断结果,请在 Greengrass 核心设备上运行以下命令。

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

    如果在组件日志或 MQTT 客户端中看不到推断结果,则表示部署失败或未到达核心设备。如果您的核心设备未连接到互联网或者没有运行组件所需的权限,则可能会发生这种情况。在核心设备上运行以下命令以查看Amazon IoT Greengrass核心软件日志文件。此文件包含来自 Greengrass 核心设备部署服务的日志。

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

    有关更多信息,请参阅 机器学习推理疑难解答

    后续步骤

    本教程介绍了如何使用 TensorFlow Lite 图像分类组件以及自定义配置选项来对照相机拍摄的图像执行示例图像分类。

    有关自定义公共组件配置或创建自定义机器学习组件的详细信息,请参阅自定义机器学习组件