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

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

:使用 TensorFlow Lite 对来自相机的图像进行样本图像分类推断

本教程向您展示如何使用 TensorFlow Lite 图像分类推理组件对来自 Greengrass 核心设备本地摄像机的图像执行样本图像分类推断。此组件包括以下组件依赖关系:

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

  • TensorFlow 精简版运行时组件

注意

本教程访问 Raspberry PiNVIDIA Jetson NanoAmazon DeepLens设备的摄像头模块,但Amazon IoT Greengrass支持 armv7L、Armv8 或 x86_64 平台上的其他设备。要为其他设备设置摄像头,请查阅设备的相关文档。

有关 Greengrass 设备上机器学习的更多信息,请参阅执行机器学习推理

先决条件

:使用 TensorFlow Lite 进行样本图像分类推断

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

    Greengrass教程:Amazon IoT Greengrass V2 入门

    ,:

    • 在运行亚马逊 Linux 2 或 Ubuntu 18.04 的 Greengrass 核心设备上,设备上安装了 GNU C Lib rary (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 OS Bullseye 包含的 NumPy早期版本,因此您可以运行以下命令在设备 NumPy 上升级。

        pip3 install --upgrade numpy
      • 设备上启用了传统摄像机堆栈。Raspberry Pi OS Bullseye 包含一个新的摄像机堆栈,该堆栈默认处于启用状态且不兼容,因此您必须启用旧相机堆栈。

        启用旧版摄像机堆栈

        1. Raspberry Pi。

          sudo raspi-config
        2. 选择接口选项

        3. 选择 “传统相机” 以启用旧版摄像机堆栈。

        4. 重启 Raspberry Pi。

  • 对于 Raspberry Pi 或 NVIDIA Jetson Nano 设备,Raspberry Pi 摄像头模块 V2-800 要了解如何设置摄像机,请参阅 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.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"

    本教程中 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
注意

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

Amazon DeepLens (x86_64)
  1. 更新awscam APT 软件包。,。

    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/"

    本教程中 MLRootPath 的默认值为/greengrass/v2/work/variant.TensorFlowLite/greengrass_ml。此位置的greengrass_ml_tflite_conda文件夹是在您首次在中部署推理组件时创建的:使用 TensorFlow Lite 进行样本图像分类推断

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

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

在中:使用 TensorFlow Lite 进行样本图像分类推断,您在Amazon IoT控制台中配置了Amazon IoT MQTT 客户端,以观看 TensorFlow Lite 图像分类组件在ml/tflite/image-classification主题上发布的 MQTT 消息。在Amazon IoT控制台中,验证此订阅是否存在。如果没有,请按照中的第 1 步:。步骤订阅本主题,然后再将组件部署到 Greengrass 核心设备。

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

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

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

  2. 在 “组” 页面上的 “公共组件” 选项卡上,选择aws.greengrass.TensorFlowLiteImageClassification

  3. aws.greengrass.TensorFlowLiteImageClassification页面上,选择 “部署”。

  4. Con to Deplo yment,:

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

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

  5. Cel ify targ er,:

    1. 在 “部署信息” 下,输入或修改部署的友好名称。

    2. 在 “部署目标” 下,选择部署目标,然后选择 “下一步”。如果您正在修改现有部署,则无法更改部署目标。

  6. “选择组件” 页面的 “公共组件” 下,验证该aws.greengrass.TensorFlowLiteImageClassification组件是否已选中,然后选择 “下一步”。

  7. Conf igure Comports,:

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

    2. 在 “配置更新” 下,在 “要合并的配置” 框中输入以下配置更新。

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

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

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

  8. 在 “配置高级设置” 页面上,保留默认配置设置,然后选择 “下一步”。

  9. 在 “查看” 页面上,选择 “部署

  1. 创建一个deployment.json文件来定义 L TensorFlow ite 图像分类组件的部署配置。:

    { "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 核心设备的组件日志和Amazon IoT控制台的Amazon IoT MQTT 客户端中查看推理结果。要订阅组件发布推理结果所依据的主题,请参阅第 2 步:验证您对默认通知主题的订阅

主题

    • Amazon IoTMQTT 客户端 —要查看推理组件在默认通知主题上发布的结果,请完成以下步骤:

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

      2. 在 “订阅” 下,选择ml/tflite/image-classification

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

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

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

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

    有关更多信息,请参阅 Troubleshooting machine learning inference

    后续步骤

    本教程向您展示如何使用带有自定义配置选项的 TensorFlow Lite 图像分类组件,对相机拍摄的图像执行样本图像分类。

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