部署 AWS Panorama 範例應用程式 - AWS Panorama

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

部署 AWS Panorama 範例應用程式

在您設定 AWS Panorama 設備或相容裝置並升級其軟體之後,請部署範例應用程式。在下列各節中,您可以使用 AWS Panorama Application CLI 匯入範例應用程式,並使用 AWS Panorama 主控台部署該應用程式。

範例應用程式使用機器學習模型來分類來自網路攝影機的影片影格中的物件。它使用 AWS Panorama 應用程式 SDK 載入模型、取得影像,以及執行模型。然後,應用程式會將結果疊加在原始影片上,並將其輸出到連接的顯示器。

在零售設定中,分析流量模式可讓您預測流量層級。透過將分析與其他資料結合,您可以針對假日和其他事件的更多人員配置需求進行規劃、測量廣告和銷售促銷的有效性,或最佳化顯示器配置和庫存管理。

先決條件

為了遵循本指南的程序,您需要命令列終端機或 shell 來執行命令。在程式碼清單中,命令前面會加上提示符號 ($),並在適當時顯示目前目錄的名稱。

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

對於長命令,我們使用逸出字元 (\) 將命令分割成多行。

在 Linux 和 macOS 上,使用您偏好的 shell 和套件軟體管理工具。在 Windows 10 上,您可以安裝適用於 Linux 的 Windows 子系統,以取得 Ubuntu 和 Bash 的 Windows 整合版本。如需在 Windows 中設定開發環境的說明,請參閱 在 Windows 中設定開發環境

您可以使用 Python 開發 AWS Panorama 應用程式,並使用 Python 套件管理員 pip 安裝工具。如果您還沒有 Python,請安裝最新版本。如果您有 Python 3 但沒有 pip,請使用作業系統的套件管理員安裝 pip,或安裝隨 pip 提供的 Python 新版本。

在本教學課程中,您會使用 Docker 建置執行應用程式程式碼的容器。從 Docker 網站安裝 Docker:取得 Docker

本教學課程使用 AWS Panorama 應用程式 CLI 來匯入範例應用程式、建置套件和上傳成品。AWS Panorama Application CLI 使用 AWS Command Line Interface (AWS CLI) 呼叫服務 API 操作。如果您已有 AWS CLI,請將其升級至最新版本。若要安裝 AWS Panorama 應用程式 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套件包含應用程式的程式碼和組態,包括使用應用程式基礎映像的 Dockerfilepanorama-application。若要建置在設備上執行的應用程式容器,請使用 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 Application 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. 應用程式名稱中,輸入 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. 選擇從裝置刪除

後續步驟

如果您在部署或執行範例應用程式時發生錯誤,請參閱 疑難排解

若要進一步了解範例應用程式的功能和實作,請繼續下一個主題