本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 TensorFlow Lite 对来自相机的图像执行样本图像分类推断
本教程向您展示如何使用 TensorFlow Lite 图像分类推理组件在 Greengrass 核心设备上对来自本地摄像机的图像进行样本图像分类推断。该组件包括以下组件依赖关系:
-
TensorFlow 精简版图像分类模型存储组件
-
TensorFlow 精简版运行时组件
注意
本教程访问了 Raspberry Pi
有关在 Greengrass设备上进行机器学习的更多信息,请参阅执行机器学习推理。
先决条件
要完成本教程,您需要先完成教程:使用 TensorFlow Lite 执行样本图像分类推断。
您需要以下内容:
-
一款带有摄像头接口的 Linux Greengrass 核心设备。本教程在以下支持的设备之一上访问摄像头模块:
-
运行@@ 树莓派
操作系统(以前称为 R aspbian)的树莓派
有关设置 Greentrass核心设备的信息,请参阅教程:Amazon IoT Greengrass V2 入门。
核心设备必须满足以下要求:
-
在运行亚马逊 Linux 2 或 Ubuntu 18.04 的 Greengrass 核心设备上,设备上安装了 GNU C Lib
rary (glibc) 2.27 或更高版本。 -
在 ARMv7L 设备上,例如 Raspberry Pi,设备上安装了 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 的树莓派设备必须满足以下要求:
-
NumPy 设备上安装了 1.22.4 或更高版本。Raspberry Pi OS Bullseye 包含早期版本的,因此你可以运行以下命令在设备 NumPy 上升级。 NumPy
pip3 install --upgrade numpy
-
设备上启用了旧版相机堆栈。Raspberry Pi OS Bullseye 包含一个新的摄像机堆栈,该堆栈在默认情况下处于启用状态且不兼容,因此您必须启用旧版摄像机堆栈。
-
-
-
适用于 Raspberry Pi 或 NVIDIA Jetson Nano 设备,树莓派摄像头模块 V2-800 万像素,1080p
。要了解如何设置摄像机,请参阅 Raspberry Pi 文档中的连接摄像机 。
步骤 1:在设备上配置摄像头模块
在此步骤中,为设备安装并启用摄像头模块。在设备上运行以下命令。
步骤 2:验证您对默认通知主题的订阅
在中教程:使用 TensorFlow Lite 执行样本图像分类推断,您将Amazon IoT MQTT 客户端配置为在Amazon IoT控制台中监视 TensorFlow Lite 图像分类组件发布的有关该ml/tflite/image-classification
主题的 MQTT 消息。在Amazon IoT控制台中,验证此订阅是否存在。如果不是,请在将组件部署步骤 1:订阅默认通知主题到 Greengrass 核心设备之前,按照中的步骤订阅此主题。
步骤 3:修改 TensorFlow 精简版图像分类组件配置并进行部署
在此步骤中,您可以配置 TensorFlow Lite 图像分类组件并将其部署到您的核心设备:
-
在Amazon IoT Greengrass控制台
导航菜单中,选择组件。 -
在组件页面的公共组件选项卡上,选择
aws.greengrass.TensorFlowLiteImageClassification
。 -
在aws.greengrass.TensorFlowLiteImageClassification页面上,选择部署。
-
从添加到部署中,选择以下选项之一:
-
要将此组件合并到目标设备上的现有部署,请选择添加到现有部署,然后选择要修改的部署。
-
要在目标设备上创建新部署,请选择创建新部署。如果您的设备上已有部署,则选择此步骤将替换现有部署。
-
-
在 Selec torm ation 页面中,执行以下操作:
-
在 “部署信息” 下,输入或修改部署的友好名称。
-
在 “部署目标” 下,选择部署目标,然后选择 “下一步”。如果要修改现有部署,则无法更改部署目标。
-
-
在 “选择组件” 页面的 “公共组件” 下,确认该
aws.greengrass.TensorFlowLiteImageClassification
组件已选中,然后选择 “下一步”。 -
在 Conf ormat ion 页面上,执行以下操作:
-
选择推理组件,然后选择配置组件。
-
在 “配置更新” 下,在 “要合并的配置” 框中输入以下配置更新。
{ "InferenceInterval": "60", "UseCamera": "true" }
通过此配置更新,该组件可以访问设备上的摄像头模块,并对摄像机拍摄的图像进行推断。推理代码每 60 秒运行一次。
-
选择 “确认”,然后选择 “下一步”。
-
-
在配置高级设置页面上,保留默认配置设置,然后选择下一步。
-
在 “查看” 页面上,选择 “部署”
-
创建一个
deployment.json
文件来定义 TensorFlow Lite 图像分类组件的部署配置。此文件应类似以下内容:{ "targetArn":"
targetArn
", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion":2.1.0
, "configurationUpdate": { "InferenceInterval": "60", "UseCamera": "true" } } } }-
在
targetArn
字段中,
替换为部署的目标事物或事物组的 Amazon 资源名称 (ARN),格式如下:targetArn
-
事情:
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 秒运行一次。替换以下值
-
-
运行以下命令以在设备上部署 TensorFlow Lite图像分类组件:
aws greengrassv2 create-deployment \ --cli-input-json file://
path/to/
deployment.json
部署可能需要几分钟的时间才能完成。在下一步中,检查组件日志以验证部署是否成功完成并查看推理结果。
步骤 4:查看推理结果
部署组件后,您可以在 Greengrass 核心设备上的组件日志和Amazon IoT控制台的Amazon IoT MQTT 客户端中查看推理结果。要订阅组件发布推理结果的主题,请参阅步骤 2:验证您对默认通知主题的订阅。
主题
-
Amazon IoTMQTT 客户端-要查看推理组件在默认通知主题上发布的结果,请完成以下步骤:
-
在Amazon IoT控制台
导航菜单中,选择测试、MQTT 测试客户端。 -
在 “订阅” 下,选择
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 精简版图像分类组件以及自定义配置选项,对相机拍摄的图像执行样本图像分类。
有关自定义公共组件的配置或创建自定义机器学习组件的更多信息,请参阅自定义您的机器学习组件。