部署 AWS Panorama 示例应用程序 - AWS Panorama

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

部署 AWS Panorama 示例应用程序

设置 AWS Panorama 设备或兼容设备并升级其软件后,部署示例应用程序。在以下部分中,您将使用 AWS Panorama Application CLI 导入示例应用程序,并使用 AWS Panorama 控制台进行部署。

示例应用程序使用机器学习模型对来自网络摄像头的视频帧中的对象进行分类。它使用 AWS Panorama 应用程序开发工具包加载模型、获取图像并运行模型。然后,应用程序将结果叠加在原始视频之上,并将其输出到连接的显示器。

在零售环境中,通过分析客流量模式,您可以预测客流量水平。通过将分析与其他数据相结合,您可以计划节假日和其他活动前后增加的人员需求,衡量广告和促销活动的有效性,或优化展示位置和库存管理。

先决条件

为了遵循本教程中的步骤,您需要一个命令行终端或 Shell,以便运行命令。在代码列表中,命令前为提示符 ($) 和当前目录的名称(如适用)。

~/panorama-project$ this is a command this is output

对于长命令,我们使用转义字符 (\) 将命令拆分为多行。

在 Linux 和 macOS 中,可使用您首选的外壳程序和程序包管理器。在 Windows 10 中,您可以安装 Windows Subsystem for Linux,获取 Ubuntu 和 Bash 与 Windows 集成的版本。有关在 Windows 中设置开发环境的帮助,请参阅 在 Windows 中设置开发环境

您可以使用 Python 开发 AWS Panorama 应用程序,并使用 Python 的软件包管理器 pip 安装工具。如果您还没有 Python,请安装最新版本。如果您有 Python 3 但没有 pip,请使用操作系统的包管理器安装 pip,或安装随 pip 一起提供的新版本的 Python。

在本教程中,你将使用 Docker 生成运行应用程序代码的容器。从 Docker 网站安装 Docker:获取 Docker

本教程使用 AWS Panorama Application CLI 导入示例应用程序、构建程序包和上传构件。AWS Panorama Application CLI 使用 AWS Command Line Interface (AWS CLI) 调用服务 API 操作。如果您已经拥有 AWS CLI,请将其升级到最新版本。要安装 AWS Panorama Application CLI 和 AWS CLI,请使用 pip

$ pip3 install --upgrade awscli panoramacli

下载示例应用程序,并将其提取到工作区中。

导入示例应用程序

要导入示例应用程序以在您的账户中使用,请使用 AWS Panorama Application CLI。应用程序的文件夹和清单包含对占位符帐号的引用。若要使用您的帐号更新这些内容,请运行 panorama-cli import-application 命令。

aws-panorama-sample$ panorama-cli import-application

packages 目录中的 SAMPLE_CODE 包包含应用程序的代码和配置,包括使用应用程序基础映像 panorama-application 的 Dockerfile。若要生成在设备上运行的应用程序容器,请使用 panorama-cli build-container 命令。

aws-panorama-sample$ ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account') aws-panorama-sample$ panorama-cli build-container --container-asset-name code_asset --package-path packages/${ACCOUNT_ID}-SAMPLE_CODE-1.0

AWS Panorama 应用程序 CLI 的最后一步是注册应用程序的代码和模型节点,并将资产上传到该服务提供的 Amazon S3 接入点。这些资产包括代码的容器映像、模型和每个资产的描述符文件。要注册节点并上传资产,请运行 panorama-cli package-application 命令。

aws-panorama-sample$ panorama-cli package-application Uploading package model Registered model with patch version bc9c58bd6f83743f26aa347dc86bfc3dd2451b18f964a6de2cc4570cb6f891f9 Uploading package code Registered code with patch version 11fd7001cb31ea63df6aaed297d600a5ecf641a987044a0c273c78ceb3d5d806

部署应用程序

使用 AWS Panorama 控制台将应用程序部署到您的设备。

要部署应用程序
  1. 打开 AWS Panorama 控制台已部署的应用程序页面。

  2. 选择部署应用程序

  3. 将应用程序清单的内容 graphs/aws-panorama-sample/graph.json 粘贴到文本编辑器中。选择 Next(下一步)。

  4. 对于 Application name (应用程序名称),输入 aws-panorama-sample

  5. 选择继续部署

  6. 选择开始部署

  7. 选择下一步,而不选择角色。

  8. 选择选择设备,然后选择您的设备。选择 Next(下一步)。

  9. 选择数据源步骤中,选择查看输入,然后将摄像头流添加为数据源。选择 Next(下一步)。

  10. 配置步骤中,选择下一步

  11. 选择部署,然后选择完成

  12. 在已部署的应用程序列表中,选择 aws-panorama-sample

刷新此页面以获取更新,或使用以下脚本从命令行监视部署。

例 monitor-deployment.sh
while true; do aws panorama list-application-instances --query 'ApplicationInstances[?Name==`aws-panorama-sample`]' sleep 10 done
[ { "Name": "aws-panorama-sample", "ApplicationInstanceId": "applicationInstance-x264exmpl33gq5pchc2ekoi6uu", "DefaultRuntimeContextDeviceName": "my-appliance", "Status": "DEPLOYMENT_PENDING", "HealthStatus": "NOT_AVAILABLE", "StatusDescription": "Deployment Workflow has been scheduled.", "CreatedTime": 1630010747.443, "Arn": "arn:aws:panorama:us-west-2:123456789012:applicationInstance/applicationInstance-x264exmpl33gq5pchc2ekoi6uu", "Tags": {} } ] [ { "Name": "aws-panorama-sample", "ApplicationInstanceId": "applicationInstance-x264exmpl33gq5pchc2ekoi6uu", "DefaultRuntimeContextDeviceName": "my-appliance", "Status": "DEPLOYMENT_PENDING", "HealthStatus": "NOT_AVAILABLE", "StatusDescription": "Deployment Workflow has completed data validation.", "CreatedTime": 1630010747.443, "Arn": "arn:aws:panorama:us-west-2:123456789012:applicationInstance/applicationInstance-x264exmpl33gq5pchc2ekoi6uu", "Tags": {} } ] ...

如果应用程序未开始运行,请在 Amazon CloudWatch Logs 中检查应用程序和设备日志

查看输出

部署完成后,应用程序将开始处理视频流并将日志发送到 CloudWatch。

要查看 CloudWatch Logs 中的日志
  1. 打开 CloudWatch Logs 控制台的日志组页面

  2. 在以下组中查找 AWS Panorama 应用程序和设备日志:

    • 设备日志/aws/panorama/devices/device-id

    • 应用程序日志/aws/panorama/devices/device-id/applications/instance-id

2022-08-26 17:43:39 INFO INITIALIZING APPLICATION 2022-08-26 17:43:39 INFO ## ENVIRONMENT VARIABLES {'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'TERM': 'xterm', 'container': 'podman'...} 2022-08-26 17:43:39 INFO Configuring parameters. 2022-08-26 17:43:39 INFO Configuring AWS SDK for Python. 2022-08-26 17:43:39 INFO Initialization complete. 2022-08-26 17:43:39 INFO PROCESSING STREAMS 2022-08-26 17:46:19 INFO epoch length: 160.183 s (0.936 FPS) 2022-08-26 17:46:19 INFO avg inference time: 805.597 ms 2022-08-26 17:46:19 INFO max inference time: 120023.984 ms 2022-08-26 17:46:19 INFO avg frame processing time: 1065.129 ms 2022-08-26 17:46:19 INFO max frame processing time: 149813.972 ms 2022-08-26 17:46:29 INFO epoch length: 10.562 s (14.202 FPS) 2022-08-26 17:46:29 INFO avg inference time: 7.185 ms 2022-08-26 17:46:29 INFO max inference time: 15.693 ms 2022-08-26 17:46:29 INFO avg frame processing time: 66.561 ms 2022-08-26 17:46:29 INFO max frame processing time: 123.774 ms

要查看应用程序的视频输出,请使用 HDMI 电缆将设备连接到显示器。默认情况下,应用程序会显示置信度超过 20% 的任何分类结果。

squeezenet_classes.json
["tench", "goldfish", "great white shark", "tiger shark", "hammerhead", "electric ray", "stingray", "cock", "hen", "ostrich", "brambling", "goldfinch", "house finch", "junco", "indigo bunting", "robin", "bulbul", "jay", "magpie", "chickadee", "water ouzel", "kite", "bald eagle", "vulture", "great grey owl", "European fire salamander", "common newt", "eft", "spotted salamander", "axolotl", "bullfrog", "tree frog", ...

示例模型有 1000 个类,包括许多动物、食物和常见物体。尝试将摄像头对准键盘或咖啡杯。

带有检测文本的咖啡杯。

为简单起见,示例应用程序使用轻量级分类模型。该模型输出一个数组,其中包含其每个类的概率。现实世界的应用程序更频繁地使用具有多维输出的对象检测模型。有关具有更复杂模型的示例应用程序,请参阅 示例应用程序、脚本和模板

为 Python 启用 SDK

示例应用程序使用 AWS SDK for Python (Boto) 将指标发送到 Amazon CloudWatch。要启用此功能,请创建一个角色,该角色授予应用程序发送指标的权限,然后重新部署附加了该角色的应用程序。

示例应用程序包括一个 AWS CloudFormation 模板,该模板创建具有所需权限的角色。要创建角色,请使用 aws cloudformation deploy 命令。

$ aws cloudformation deploy --template-file aws-panorama-sample.yml --stack-name aws-panorama-sample-runtime --capabilities CAPABILITY_NAMED_IAM

重新部署应用程序
  1. 打开 AWS Panorama 控制台已部署的应用程序页面。

  2. 选择应用程序。

  3. 选择 Replace(替换)

  4. 完成以下步骤以部署应用程序。在指定 IAM 角色中,选择您创建的角色。它的名称以 aws-panorama-sample-runtime 开头。

  5. 部署完成后,打开 CloudWatch 控制台并查看 AWSPanoramaApplication 命名空间中的指标。每 150 帧,应用程序记录并上传帧处理和推理时间的指标。

清理

如果您已使用完示例应用程序,则可以使用 AWS Panorama 控制台将其从设备中删除。

要从设备中删除应用程序
  1. 打开 AWS Panorama 控制台已部署的应用程序页面。

  2. 选择应用程序。

  3. 选择从设备中删除

后续步骤

如果在部署或运行示例应用程序时遇到错误,请参阅 故障排除

若要详细了解示例应用程序的功能和实现,请继续阅读下一主题