

지원 종료 알림: 2026년 5월 31일에에 대한 지원이 AWS 종료됩니다 AWS Panorama. 2026년 5월 31일 이후에는 AWS Panorama 콘솔 또는 AWS Panorama 리소스에 더 이상 액세스할 수 없습니다. 자세한 내용은 [AWS Panorama 지원 종료를 참조하세요](https://docs.aws.amazon.com/panorama/latest/dev/panorama-end-of-support.html).

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 시작하기 AWS Panorama
<a name="panorama-gettingstarted"></a>

시작하려면 AWS Panorama먼저 [서비스의 개념](gettingstarted-concepts.md)과이 가이드에서 사용되는 용어에 대해 알아봅니다. 그런 다음 AWS Panorama 콘솔을 사용하여 [AWS Panorama 어플라이언스를 등록](gettingstarted-setup.md)하고 [애플리케이션을 생성할](gettingstarted-deploy.md) 수 있습니다. 약 1시간 내에 디바이스를 구성하고, 소프트웨어를 업데이트하고, 샘플 애플리케이션을 배포할 수 있습니다. 이 섹션의 자습서를 완료하려면 AWS Panorama 어플라이언스와 로컬 네트워크를 통해 비디오를 스트리밍하는 카메라를 사용합니다.

**참고**  
 AWS Panorama 어플라이언스를 구매하려면 [콘솔을 방문하세요 AWS Panorama](https://console.aws.amazon.com/panorama/home#get-device-quote).

[AWS Panorama 샘플 애플리케이션](gettingstarted-sample.md)은 AWS Panorama 기능 사용을 보여줍니다. 여기에는 SageMaker AI로 훈련된 모델과 AWS Panorama Application SDK를 사용하여 추론 및 출력 비디오를 실행하는 샘플 코드가 포함됩니다. 샘플 애플리케이션에는 명령줄에서 개발 및 배포 워크플로를 자동화하는 방법을 보여주는 CloudFormation 템플릿과 스크립트가 포함되어 있습니다.

이 장의 마지막 두 주제에서는 [모델 및 카메라에 대한 요구 사항](gettingstarted-compatibility.md)과 [AWS Panorama 어플라이언스의 하드웨어 사양](gettingstarted-hardware.md)에 대해 자세히 설명합니다. 아직 어플라이언스와 카메라를 구입하지 않았거나 자체 컴퓨터 비전 모델을 개발할 계획이 없다면 먼저 이 주제에서 자세한 내용을 참조하십시오.

**Topics**
+ [AWS Panorama 개념](gettingstarted-concepts.md)
+ [AWS Panorama 어플라이언스 설정](gettingstarted-setup.md)
+ [AWS Panorama 샘플 애플리케이션 배포](gettingstarted-deploy.md)
+ [AWS Panorama 애플리케이션 개발](gettingstarted-sample.md)
+ [지원되는 컴퓨터 비전 모델 및 카메라](gettingstarted-compatibility.md)
+ [AWS Panorama 어플라이언스 사양](gettingstarted-hardware.md)
+ [Service Quotas](gettingstarted-quotas.md)

# AWS Panorama 개념
<a name="gettingstarted-concepts"></a>

AWS Panorama에서는 컴퓨터 비전 애플리케이션을 생성하고 이를 AWS Panorama 어플라이언스 또는 호환 디바이스에 배포하여 네트워크 카메라의 비디오 스트림을 분석합니다. Python으로 애플리케이션 코드를 작성하고 Docker를 사용하여 애플리케이션 컨테이너를 빌드합니다. AWS Panorama Application CLI를 사용하여 기계 학습 모델을 로컬에서 가져오거나 Amazon Simple Storage Service(S3) 에서 가져올 수 있습니다. 애플리케이션은 AWS Panorama Application SDK를 사용하여 카메라로부터 비디오 입력을 수신하고 모델과 상호 작용합니다.

**Topics**
+ [AWS Panorama 어플라이언스](#gettingstarted-concepts-appliance)
+ [호환되는 디바이스](#gettingstarted-concepts-devices)
+ [Applications](#gettingstarted-concepts-application)
+ [노드](#gettingstarted-concepts-node)
+ [모델](#gettingstarted-concepts-model)

## AWS Panorama 어플라이언스
<a name="gettingstarted-concepts-appliance"></a>

AWS Panorama 어플라이언스는 애플리케이션을 실행하는 하드웨어입니다. AWS Panorama 콘솔은 어플라이언스를 등록하고, 소프트웨어를 업데이트하며, 어플라이언스를 배포하는 데 사용합니다. AWS Panorama 어플라이언스의 소프트웨어는 카메라 스트림에 연결하여 애플리케이션으로 비디오 프레임을 전송하고 연결된 디스플레이에 비디오 출력을 표시합니다.

AWS Panorama 어플라이언스는 [Nvidia Jetson AGX Xavier로 구동되는](gettingstarted-hardware.md) *엣지 디바이스*입니다. 처리를 위해 AWS 클라우드로 이미지를 보내는 대신 최적화된 하드웨어에서 로컬로 애플리케이션을 실행합니다. 이를 통해 실시간으로 비디오를 분석하고 결과를 로컬에서 처리할 수 있습니다. 어플라이언스의 상태를 보고하고, 로그를 업로드하고, 소프트웨어 업데이트 및 배포를 수행하려면 인터넷 연결이 필요합니다.

자세한 내용은 [AWS Panorama 어플라이언스 관리](panorama-appliance.md) 단원을 참조하십시오.

## 호환되는 디바이스
<a name="gettingstarted-concepts-devices"></a>

AWS Panorama 어플라이언스 외에도 AWS Panorama는 AWS 파트너의 호환 디바이스를 지원합니다. 호환 디바이스는 AWS Panorama 어플라이언스와 동일한 기능을 지원합니다. AWS Panorama 콘솔 및 API를 사용하여 호환 디바이스를 등록 및 관리하고 동일한 방식으로 애플리케이션을 구축 및 배포합니다.

****
+ [Lenovo ThinkEdge® SE70](https://techtoday.lenovo.com/us/en/solutions/smb/thinkedge) — Nvidia Jetson Xavier NX 기반

이 설명서의 콘텐츠 및 샘플 애플리케이션은 AWS Panorama 어플라이언스를 사용하여 개발되었습니다. 디바이스의 특정 하드웨어 및 소프트웨어 기능에 대한 자세한 내용은 제조업체의 설명서를 참조하십시오.

## Applications
<a name="gettingstarted-concepts-application"></a>

애플리케이션은 AWS Panorama 어플라이언스에서 실행되어 비디오 스트림에서 컴퓨터 비전 작업을 수행합니다. Python 코드와 기계 학습 모델을 결합하여 컴퓨터 비전 애플리케이션을 구축하고 인터넷을 통해 AWS Panorama 어플라이언스에 배포할 수 있습니다. 애플리케이션은 비디오를 디스플레이로 전송하거나 AWS SDK를 사용하여 결과를 AWS 서비스에 전송할 수 있습니다.

애플리케이션을 구축하고 배포하려면 AWS Panorama Application CLI를 사용합니다. AWS Panorama Application CLI는 기본 애플리케이션 폴더 및 구성 파일을 생성하고, Docker로 컨테이너를 구축하고, 자산을 업로드하는 명령줄 도구입니다. 디바이스 하나에서 여러 애플리케이션을 실행할 수 있습니다.

자세한 내용은 [AWS Panorama 애플리케이션 관리](panorama-applications.md) 단원을 참조하십시오.

## 노드
<a name="gettingstarted-concepts-node"></a>

애플리케이션은 입력, 출력, 모델 및 코드를 나타내는 *노드*라는 여러 구성 요소로 구성됩니다. 노드는 구성(입력 및 출력)만 될 수도 있고 아티팩트(모델 및 코드)를 포함할 수도 있습니다. 애플리케이션의 코드 노드는 사용자가 Amazon S3 액세스 포인트에 업로드하는 *노드 패키지*에 번들로 포함되며, AWS Panorama 어플라이언스가 해당 액세스 포인트에 액세스할 수 있습니다. *애플리케이션 매니페스트*는 노드 간 연결을 정의하는 구성 파일입니다.

자세한 내용은 [애플리케이션 노드](applications-nodes.md) 단원을 참조하십시오.

## 모델
<a name="gettingstarted-concepts-model"></a>

컴퓨터 비전 모델은 이미지를 처리하도록 훈련된 기계 학습 네트워크입니다. 컴퓨터 비전 모델은 분류, 감지, 분할 및 추적 등 다양한 작업을 수행할 수 있습니다. 컴퓨터 비전 모델은 이미지를 입력으로 받아 이미지 또는 이미지 내 물체에 대한 정보를 출력합니다.

AWS Panorama는 PyTorch, Apache MXNet, TensorFlow로 구축된 모델을 지원합니다. Amazon SageMaker AI를 사용하거나 개발 환경에서 모델을 빌드할 수 있습니다. 자세한 내용은 [컴퓨터 비전 모델](applications-models.md) 단원을 참조하십시오.

# AWS Panorama 어플라이언스 설정
<a name="gettingstarted-setup"></a>

AWS Panorama 어플라이언스 또는 [호환 디바이스](gettingstarted-concepts.md#gettingstarted-concepts-devices) 사용을 시작하려면 AWS Panorama 콘솔에 등록하고 소프트웨어를 업데이트하십시오. 설정 프로세스 중에 물리적 어플라이언스를 나타내는 어플라이언스 *리소스*를 AWS Panorama에서 생성하고 USB 드라이브로 어플라이언스에 파일을 복사합니다. 어플라이언스는 이러한 인증서와 구성 파일을 사용하여 AWS Panorama 서비스에 연결합니다. 그런 다음 AWS Panorama 콘솔을 사용하여 어플라이언스의 소프트웨어를 업데이트하고 카메라를 등록합니다.

**Topics**
+ [사전 조건](#gettingstarted-prerequisites)
+ [AWS Panorama 어플라이언스 등록 및 구성](#gettingstarted-device)
+ [어플라이언스 소프트웨어 업그레이드](#gettingstarted-upgrade)
+ [카메라 스트림 추가](#gettingstarted-setup-camera)
+ [다음 단계](#gettingstarted-setup-nextsteps)

## 사전 조건
<a name="gettingstarted-prerequisites"></a>

이 자습서를 시작하려면 AWS Panorama 어플라이언스 또는 호환 디바이스와 다음 하드웨어가 필요합니다.

****
+ **디스플레이** – 샘플 애플리케이션 출력을 볼 수 있는 HDMI 입력을 사용하는 디스플레이입니다.
+ **USB 드라이브**(AWS Panorama 어플라이언스에 포함) — 구성 파일 및 인증서가 포함된 아카이브를 AWS Panorama 어플라이언스로 전송하기 위한 최소 1GB의 스토리지가 있는 FAT32 형식의 USB 3.0 플래시 메모리 드라이브입니다.
+ **카메라** – RTSP 비디오 스트림을 출력하는 IP 카메라입니다.

카메라 제조업체에서 제공하는 도구와 지침을 사용하여 카메라의 IP 주소와 스트림 경로를 식별하십시오. [VLC](https://www.videolan.org/)와 같은 비디오 플레이어를 사용하여 네트워크 미디어 소스로 열어 스트림 URL을 확인할 수 있습니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/panorama/latest/dev/images/vlc-stream.png)


AWS Panorama 콘솔은 다른 AWS 서비스를 사용하여 애플리케이션 구성 요소를 조합하고, 권한을 관리하고, 설정을 확인합니다. 어플라이언스를 등록하고 샘플 애플리케이션을 배포하려면 다음 권한이 필요합니다.

****
+ [AWSPanoramaFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSPanoramaFullAccess) – Amazon S3의 AWS Panorama 액세스 포인트, Amazon CloudWatch의 어플라이언스 자격 증명 AWS Secrets Manager및 어플라이언스 로그에 대한 전체 액세스를 제공합니다. AWS Panorama의 [서비스 연결 역할](permissions-services.md)을 생성할 수 있는 권한이 포함되어 있습니다.
+ **AWS Identity and Access Management (IAM)** - 처음 실행할 때 AWS Panorama 서비스 및 AWS Panorama 어플라이언스에서 사용하는 역할을 생성합니다.

IAM에서 역할을 생성할 권한이 없는 경우, 관리자가 [AWS Panorama 콘솔](https://console.aws.amazon.com/panorama/home)을 열고 서비스 역할을 생성하라는 메시지를 수락하도록 요청하십시오.

## AWS Panorama 어플라이언스 등록 및 구성
<a name="gettingstarted-device"></a>

AWS Panorama 어플라이언스는 로컬 네트워크 연결을 통해 네트워크 지원 카메라에 연결하는 하드웨어 디바이스입니다. AWS Panorama Application SDK가 포함된 Linux 기반 운영 체제와 컴퓨터 비전 애플리케이션을 실행하기 위한 지원 소프트웨어를 사용합니다.

어플라이언스 관리 및 애플리케이션 배포를 AWS 위해에 연결하기 위해 어플라이언스는 디바이스 인증서를 사용합니다. AWS Panorama 콘솔을 사용하여 프로비저닝 인증서를 생성합니다. 어플라이언스는 이 임시 인증서를 사용하여 초기 설정을 완료하고 영구 디바이스 인증서를 다운로드합니다.

**중요**  
이 절차에서 생성한 프로비저닝 인증서는 5분 동안만 유효합니다. 이 시간 내에 등록 프로세스를 완료하지 않으면 다시 시작해야 합니다.

**어플라이언스를 등록하려면**

1. 컴퓨터에 USB 드라이브를 연결합니다. 네트워크 및 전원 케이블을 연결하여 어플라이언스를 준비합니다. 어플라이언스는 전원이 켜지고 USB 드라이브가 연결될 때까지 대기합니다.

1. AWS Panorama 콘솔 [시작하기 페이지](https://console.aws.amazon.com/panorama/home#getting-started)를 엽니다.

1. **디바이스 추가**를 선택합니다.

1. **설정 시작**을 선택합니다.

1. AWS Panorama의 어플라이언스를 나타내는 디바이스 리소스에 대한 이름과 설명을 입력합니다. **다음**을 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/panorama/latest/dev/images/setup-name.png)

1. IP 주소, NTP 서버 또는 DNS 설정을 수동으로 할당해야 하는 경우 **고급 네트워크 설정**을 선택합니다. 그렇지 않은 경우 **다음**을 선택합니다.

1. **아카이브 다운로드**를 선택합니다. **Next**(다음)를 선택합니다.

1. 구성 아카이브를 USB 드라이브의 루트 디렉토리에 복사합니다.

1. USB 드라이브를 어플라이언스 전면의 HDMI 포트 옆에 있는 USB 3.0 포트에 연결합니다.

   USB 드라이브를 연결하면 어플라이언스가 구성 아카이브와 네트워크 구성 파일을 자체로 복사하고 AWS 클라우드에 연결합니다. 연결이 완료되면 어플라이언스의 상태 표시등이 녹색에서 파란색으로 바뀌고 다시 녹색으로 바뀝니다.

1. 계속하려면 **다음**을 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/panorama/latest/dev/images/setup-poweron.png)

1. **완료**를 선택합니다.

## 어플라이언스 소프트웨어 업그레이드
<a name="gettingstarted-upgrade"></a>

AWS Panorama 어플라이언스에는 Linux 운영 체제, [AWS Panorama Application SDK](applications-panoramasdk.md), 지원되는 컴퓨터 비전 라이브러리 및 프레임워크를 비롯한 여러 소프트웨어 구성 요소가 있습니다. 어플라이언스에서 최신 기능과 애플리케이션을 사용할 수 있도록 하려면 설치 후 업데이트가 제공될 때마다 소프트웨어를 업그레이드하십시오.

**어플라이언스 소프트웨어를 업데이트하려면**

1. AWS Panorama 콘솔 [디바이스 페이지](https://console.aws.amazon.com/panorama/home#devices)를 엽니다.

1. 어플라이언스를 선택합니다.

1. **설정**을 선택합니다.

1. **시스템 소프트웨어**에서 **소프트웨어 업데이트 설치**를 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/panorama/latest/dev/images/setup-upgrade.png)

1. 새 버전을 선택한 다음 **설치**를 선택합니다.

**중요**  
계속하기 전에 어플라이언스에서 USB 드라이브를 제거하고 포맷하여 내용을 삭제하십시오. 구성 아카이브에는 민감한 데이터가 포함되며 자동으로 삭제되지 않습니다.

업그레이드 프로세스는 30분 이상 걸릴 수 있습니다. AWS Panorama 콘솔 또는 연결된 모니터에서 진행 상황을 모니터링할 수 있습니다. 프로세스가 완료되면 어플라이언스가 재부팅됩니다.

## 카메라 스트림 추가
<a name="gettingstarted-setup-camera"></a>

다음으로, AWS Panorama 콘솔에 카메라 스트림을 등록하십시오.

**카메라 스트림을 등록하려면**

1. AWS Panorama 콘솔 [데이터 소스 페이지](https://console.aws.amazon.com/panorama/home#data-sources)를 엽니다.

1. **데이터 소스 추가**를 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/panorama/latest/dev/images/setup-addstream.png)

1. 다음 설정을 구성합니다.

****
   + **이름** – 카메라 스트림의 이름입니다.
   + **설명** – 카메라, 위치 또는 기타 세부 정보에 대한 간략한 설명입니다.
   + **RTSP URL** – 카메라의 IP 주소와 스트림 경로를 지정하는 URL입니다. 예제: `rtsp://192.168.0.77/live/mpeg4/`
   + **보안 인증 정보** - 카메라 스트림을 암호로 보호하는 경우 사용자 이름과 암호를 지정합니다.

1. **저장(Save)**을 선택합니다.

 AWS Panorama는 카메라의 보안 인증을 안전하게 저장합니다 AWS Secrets Manager. 여러 애플리케이션이 동일한 카메라 스트림을 동시에 처리할 수 있습니다.

## 다음 단계
<a name="gettingstarted-setup-nextsteps"></a>

설정 중에 오류가 발생한 경우 [문제 해결](panorama-troubleshooting.md)을 참조하십시오.

샘플 애플리케이션을 배포하려면 [다음 주제](gettingstarted-deploy.md)로 계속 진행하십시오.

# AWS Panorama 샘플 애플리케이션 배포
<a name="gettingstarted-deploy"></a>

[AWS Panorama 어플라이언스 또는 호환 디바이스를 설정](gettingstarted-setup.md)하고 소프트웨어를 업그레이드한 후 샘플 애플리케이션을 배포하십시오. 다음 섹션에서는 애플리케이션을 AWS Panorama 애플리케이션 CLI로 샘플 가져와서 AWS Panorama 콘솔에 배포합니다.

샘플 애플리케이션은 기계 학습 모델을 사용하여 네트워크 카메라의 비디오 프레임 단위로 개체를 분류합니다. AWS Panorama Application SDK를 사용하여 모델을 로드하고, 이미지를 가져오고, 모델을 실행합니다. 그런 다음 애플리케이션은 결과를 원본 비디오 위에 오버레이하고 연결된 디스플레이에 출력합니다.

소매 환경에서는 유동인구 패턴을 분석하여 트래픽 수준을 예측할 수 있습니다. 분석 내용을 다른 데이터와 결합하여 휴일 및 기타 행사에 필요한 인력 충원에 대한 계획을 세우고, 광고 및 판촉의 효과를 측정하거나, 디스플레이 배치 및 재고 관리를 최적화할 수 있습니다.

**Topics**
+ [사전 조건](#gettingstarted-deploy-prerequisites)
+ [샘플 애플리케이션 가져오기](#gettingstarted-deploy-import)
+ [애플리케이션 배포](#gettingstarted-deploy-deploy)
+ [출력 검토](#gettingstarted-deploy-view)
+ [SDK for Python 사용](#gettingstarted-deploy-redeploy)
+ [정리](#gettingstarted-deploy-cleanup)
+ [다음 단계](#gettingstarted-deploy-next)

## 사전 조건
<a name="gettingstarted-deploy-prerequisites"></a>

이 자습서의 절차를 따르려면 명령을 실행할 쉘 또는 명령줄 터미널이 필요합니다. 코드 목록에서 명령어 앞에는 프롬프트 기호(\$1)와 현재 디렉토리 이름(해당하는 경우)이 표시됩니다.

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

긴 명령의 경우 이스케이프 문자(`\`)를 사용하여 명령을 여러 줄로 분할합니다.

Linux 및 macOS는 선호 쉘과 패키지 관리자를 사용합니다. Windows 10에서 [Linux용 Windows Subsystem을 설치](https://docs.microsoft.com/en-us/windows/wsl/install-win10)하여 Ubuntu와 Bash의 Windows 통합 버전을 가져옵니다. Windows에서 개발 환경을 설정하는 데 도움이 필요하면 [Windows에서 개발 환경 설정](applications-devenvwindows.md)를 참조하십시오.

Python의 패키지 관리자인 pip를 사용하여 AWS Panorama 애플리케이션을 개발하고 도구를 설치할 수 있습니다. 아직 Python 사용 중이라면 [최신 버전을 설치](https://www.python.org/downloads/)하십시오. Python 3을 사용하고 pip는 사용하지 않는 경우 운영 체제의 패키지 관리자를 사용하여 pip를 설치하거나 pip와 함께 제공되는 새 버전의 Python을 설치하십시오.

이 자습서에서는 Docker를 사용하여 애플리케이션 코드를 실행하는 컨테이너를 빌드합니다. Docker 웹 사이트에서 Docker 설치: [Docker 다운로드](https://docs.docker.com/get-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-sample.zip](https://github.com/awsdocs/aws-panorama-developer-guide/releases/download/v1.0-ga/aws-panorama-sample.zip)

## 샘플 애플리케이션 가져오기
<a name="gettingstarted-deploy-import"></a>

계정에서 사용할 샘플 애플리케이션을 가져오려면 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 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
```

## 애플리케이션 배포
<a name="gettingstarted-deploy-deploy"></a>

AWS Panorama 콘솔을 사용하여 애플리케이션을 어플라이언스에 배포하십시오.

**애플리케이션을 배포하려면**

1. AWS Panorama 콘솔 [배포 애플리케이션 페이지](https://console.aws.amazon.com/panorama/home#deployed-applications)를 엽니다.

1. **애플리케이션 배포**를 선택합니다.

1. 애플리케이션 매니페스트의 콘텐츠 `graphs/aws-panorama-sample/graph.json`를 텍스트 편집기에 붙여넣습니다. **Next**(다음)를 선택합니다.

1. **애플리케이션 명칭**에 `aws-panorama-sample`을 입력합니다.

1. **배포로 진행**을 선택합니다.

1. **배포 시작**을 선택합니다.

1. 역할을 선택하지 않고 **다음**을 선택합니다.

1. **디바이스 선택**을 선택한 다음 어플라이언스를 선택합니다. **Next**(다음)를 선택합니다.

1. **데이터 소스 선택** 단계에서 **입력 보기**를 선택하고 카메라 스트림을 데이터 소스로 추가합니다. **Next**(다음)를 선택합니다.

1. **구성** 단계에서 **다음**을 선택합니다.

1. **배포**를 선택한 다음 **완료**를 선택합니다.

1. 배포된 애플리케이션 목록에서 **aws-panorama-sample**을 선택합니다.

업데이트를 위해 이 페이지를 새로 고치거나 다음 스크립트를 사용하여 명령줄에서 배포를 모니터링하십시오.

**Example 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에서 [애플리케이션 및 디바이스 로그](monitoring-logging.md)를 확인하십시오.

## 출력 검토
<a name="gettingstarted-deploy-view"></a>

 배포가 완료되면 애플리케이션이 비디오 스트림 처리를 시작하고 로그를 CloudWatch로 보냅니다.

**CloudWatch Logs에서 로그를 보려면**

1. [CloudWatch 로그 콘솔의 로그 그룹 페이지](https://console.aws.amazon.com/cloudwatch/home#logsV2:log-groups)를 엽니다.

1. 다음 그룹에서 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% 이상인 모든 분류 결과를 표시합니다.

**Example [squeezenet\$1classes.json](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SAMPLE_CODE-1.0/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",
...
```

샘플 모델에는 많은 동물, 음식, 일반 개체를 포함한 1,000개의 클래스가 있습니다. 카메라로 키보드나 커피잔을 가리켜 보십시오.

![\[\]](http://docs.aws.amazon.com/ko_kr/panorama/latest/dev/images/mug.jpg)


단순화를 위해 샘플 애플리케이션은 간단한 분류 모델을 사용합니다. 모델은 각 클래스에 대한 확률을 통해 단일 배열을 출력합니다. 실제 애플리케이션에서는 다차원 출력이 있는 개체 감지 모델을 더 자주 사용합니다. 더 복잡한 모델을 사용하는 샘플 애플리케이션에 대해서는 [샘플 애플리케이션, 스크립트, 템플릿](panorama-samples.md)를 참조하십시오.

## SDK for Python 사용
<a name="gettingstarted-deploy-redeploy"></a>

샘플 애플리케이션은를 사용하여 Amazon CloudWatch AWS SDK for Python (Boto) 로 지표를 전송합니다. 이 기능을 활성화하려면 애플리케이션에 지표 전송 권한을 부여하는 역할을 생성하고 역할이 연결된 애플리케이션을 재배포하십시오.

샘플 애플리케이션에는 필요한 권한이 있는 역할을 생성하는 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 콘솔 [배포 애플리케이션 페이지](https://console.aws.amazon.com/panorama/home#deployed-applications)를 엽니다.

1. 애플리케이션을 선택합니다.

1. **바꾸기**를 선택합니다.

1. 애플리케이션 배포 단계를 완료합니다. **IAM 역할 지정**에서 사용자가 생성한 역할을 선택합니다. 이름이 `aws-panorama-sample-runtime`로 시작하는 함수입니다.

1. 배포가 완료되면 [CloudWatch 콘솔](https://console.aws.amazon.com/cloudwatch/home#metricsV2:graph=~();namespace=~'AWSPanoramaApplication)을 열고 `AWSPanoramaApplication` 네임스페이스에서 지표를 확인합니다. 150프레임마다 애플리케이션은 프레임 처리 및 추론 시간에 대한 지표를 기록하고 업로드합니다.

## 정리
<a name="gettingstarted-deploy-cleanup"></a>

샘플 애플리케이션 작업을 완료한 경우 AWS Panorama 콘솔을 사용하여 어플라이언스에서 해당 애플리케이션을 제거할 수 있습니다.

**어플라이언스에서 애플리케이션을 제거하려면**

1. AWS Panorama 콘솔 [배포 애플리케이션 페이지](https://console.aws.amazon.com/panorama/home#deployed-applications)를 엽니다.

1. 애플리케이션을 선택합니다.

1. **디바이스에서 삭제**를 선택합니다.

## 다음 단계
<a name="gettingstarted-deploy-next"></a>

샘플 애플리케이션을 배포하거나 실행하는 동안 오류가 발생한 경우 [문제 해결](panorama-troubleshooting.md)을 참조하십시오.

샘플 애플리케이션의 기능 및 구현에 대해 자세히 알아보려면 [다음 주제](gettingstarted-sample.md)를 계속 진행하십시오.

# AWS Panorama 애플리케이션 개발
<a name="gettingstarted-sample"></a>

샘플 애플리케이션은 AWS Panorama 애플리케이션 구조에 대해 배우는 데 사용할 수 있으며 애플리케이션을 자체 애플리케이션의 시작점으로 사용할 수 있습니다.

다음 다이어그램은 AWS Panorama 어플라이언스에서 실행되는 애플리케이션의 주요 구성 요소를 보여줍니다. 애플리케이션 코드는 AWS Panorama Application SDK를 사용하여 이미지를 가져오고 모델과 상호 작용하지만, 모델에 직접 액세스할 수는 없습니다. 애플리케이션은 연결된 디스플레이에 비디오를 출력하지만 로컬 네트워크 외부로 이미지 데이터를 전송하지는 않습니다.

![\[\]](http://docs.aws.amazon.com/ko_kr/panorama/latest/dev/images/sample-app.png)


이 예제에서 애플리케이션은 AWS Panorama Application SDK를 사용하여 카메라로부터 비디오 프레임을 가져오고, 비디오 데이터를 전처리하고, 객체를 감지하는 컴퓨터 비전 모델로 데이터를 전송합니다. 애플리케이션은 어플라이언스에 연결된 HDMI 디스플레이에 결과를 표시합니다.

**Topics**
+ [애플리케이션 매니페스트](#gettingstarted-sample-manifest)
+ [샘플 애플리케이션을 사용한 빌드](#gettingstarted-sample-adapting)
+ [컴퓨터 비전 모델 변경](#gettingstarted-sample-model)
+ [이미지 사전 처리](#gettingstarted-sample-preprocessing)
+ [SDK for Python을 통한 지표 업로드](#gettingstarted-sample-metrics)
+ [다음 단계](#gettingstarted-sample-nextsteps)

## 애플리케이션 매니페스트
<a name="gettingstarted-sample-manifest"></a>

애플리케이션 매니페스트는 `graphs` 폴더의 `graph.json`이라는 이름의 파일입니다. 매니페스트는 패키지, 노드, 엣지와 같은 애플리케이션의 구성 요소를 정의합니다.

패키지는 애플리케이션 코드, 모델, 카메라 및 디스플레이를 위한 코드, 구성 및 바이너리 파일입니다. 샘플 애플리케이션은 4개의 패키지를 사용합니다.

**Example `graphs/aws-panorama-sample/graph.json` – 패키지**  

```
        "packages": [
            {
                "name": "123456789012::SAMPLE_CODE",
                "version": "1.0"
            },
            {
                "name": "123456789012::SQUEEZENET_PYTORCH_V1",
                "version": "1.0"
            },
            {
                "name": "panorama::abstract_rtsp_media_source",
                "version": "1.0"
            },
            {
                "name": "panorama::hdmi_data_sink",
                "version": "1.0"
            }
        ],
```

처음 두 패키지는 애플리케이션 내의 `packages` 디렉토리에서 정의됩니다. 여기에는 이 애플리케이션과 관련된 코드와 모델이 들어 있습니다. 다음 두 패키지는 AWS Panorama 서비스에서 제공하는 일반 카메라 및 디스플레이 패키지입니다. `abstract_rtsp_media_source` 패키지는 배포 중에 재정의할 수 있는 카메라의 자리 표시자입니다. `hdmi_data_sink` 패키지는 장치의 HDMI 출력 커넥터를 나타냅니다.

노드는 패키지에 대한 인터페이스일 뿐만 아니라 배포 시 재정의하는 기본값을 가질 수 있는 비패키지 파라미터입니다. 코드 및 모델 패키지는 입력과 출력을 지정하는 `package.json` 파일의 인터페이스를 정의합니다. 인터페이스는 비디오 스트림이거나 실수, 부울, 문자열과 같은 기본 데이터 유형일 수 있습니다.

예를 들어, `code_node` 노드는 `SAMPLE_CODE` 패키지의 인터페이스를 참조합니다.

```
        "nodes": [
            {
                "name": "code_node",
                "interface": "123456789012::SAMPLE_CODE.interface",
                "overridable": false,
                "launch": "onAppStart"
            },
```

이 인터페이스는 패키지 구성 파일 `package.json`에 정의되어 있습니다. 이 인터페이스는 패키지가 비즈니스 로직이며 `video_in`이라는 비디오 스트림과 `threshold`라는 부동 소수점 숫자를 입력값으로 받는다고 지정합니다. 또한 이 인터페이스는 디스플레이에 비디오를 출력하기 위해 코드에 `video_out`이라는 이름의 비디오 스트림 버퍼가 필요함을 지정합니다.

**Example `packages/123456789012-SAMPLE_CODE-1.0/package.json`**  

```
{
    "nodePackage": {
        "envelopeVersion": "2021-01-01",
        "name": "SAMPLE_CODE",
        "version": "1.0",
        "description": "Computer vision application code.",
        "assets": [],
        "interfaces": [
            {
                "name": "interface",
                "category": "business_logic",
                "asset": "code_asset",
                "inputs": [
                    {
                        "name": "video_in",
                        "type": "media"
                    },
                    {
                        "name": "threshold",
                        "type": "float32"
                    }
                ],
                "outputs": [
                    {
                        "description": "Video stream output",
                        "name": "video_out",
                        "type": "media"
                    }
                ]
            }
        ]
    }
}
```

애플리케이션 매니페스트에서 `camera_node` 노드는 카메라의 비디오 스트림을 나타냅니다. 여기에는 애플리케이션을 배포할 때 콘솔에 나타나는 데코레이터가 포함되어 있어 카메라 스트림을 선택하라는 메시지가 표시됩니다.

**Example `graphs/aws-panorama-sample/graph.json` – 카메라 노드**  

```
            {
                "name": "camera_node",
                "interface": "panorama::abstract_rtsp_media_source.rtsp_v1_interface",
                "overridable": true,
                "launch": "onAppStart",
                "decorator": {
                    "title": "Camera",
                    "description": "Choose a camera stream."
                }
            },
```

파라미터 노드 `threshold_param`는 애플리케이션 코드에서 사용하는 신뢰도 임계값 파라미터를 정의합니다. 기본값은 60이며 배포 중에 재정의할 수 있습니다.

**Example `graphs/aws-panorama-sample/graph.json`— 파라미터 노드**  

```
            {
                "name": "threshold_param",
                "interface": "float32",
                "value": 60.0,
                "overridable": true,
                "decorator": {
                    "title": "Confidence threshold",
                    "description": "The minimum confidence for a classification to be recorded."
                }
            }
```

애플리케이션 매니페스트의 마지막 섹션인 `edges`는 노드 간 연결을 만듭니다. 카메라의 비디오 스트림과 임계값 파라미터는 코드 노드의 입력에 연결되고 코드 노드의 비디오 출력은 디스플레이에 연결됩니다.

**Example `graphs/aws-panorama-sample/graph.json` – 엣지**  

```
        "edges": [
            {
                "producer": "camera_node.video_out",
                "consumer": "code_node.video_in"
            },
            {
                "producer": "code_node.video_out",
                "consumer": "output_node.video_in"
            },
            {
                "producer": "threshold_param",
                "consumer": "code_node.threshold"
            }
        ]
```

## 샘플 애플리케이션을 사용한 빌드
<a name="gettingstarted-sample-adapting"></a>

샘플 애플리케이션을 자체 애플리케이션의 시작점으로 사용할 수 있습니다.

각 패키지의 이름은 계정에서 고유해야 합니다. 계정 내 다른 사용자와 함께 `code` 또는 `model` 같은 일반 패키지 이름을 사용하는 경우 배포할 때 패키지 버전이 잘못될 수 있습니다. 코드 패키지의 이름을 애플리케이션을 나타내는 이름으로 변경하십시오.

**코드 패키지의 이름을 변경하려면**

1. 패키지 폴더 이름 변경: `packages/123456789012-SAMPLE_CODE-1.0/`.

1. 다음 위치에서 패키지 이름을 업데이트하십시오.

****
   + **애플리케이션 매니페스트** – `graphs/aws-panorama-sample/graph.json`
   + **패키지 구성** – `packages/123456789012-SAMPLE_CODE-1.0/package.json`
   + **빌드 스크립트** – `3-build-container.sh`

**애플리케이션의 코드를 업데이트하려면**

1. `packages/123456789012-SAMPLE_CODE-1.0/src/application.py`에서 애플리케이션 코드를 수정합니다.

1. 컨테이너를 빌드하려면 `3-build-container.sh`를 실행하십시오.

   ```
   aws-panorama-sample$ ./3-build-container.sh
   TMPDIR=$(pwd) docker build -t code_asset packages/123456789012-SAMPLE_CODE-1.0
   Sending build context to Docker daemon  61.44kB
   Step 1/2 : FROM public.ecr.aws/panorama/panorama-application
    ---> 9b197f256b48
   Step 2/2 : COPY src /panorama
    ---> 55c35755e9d2
   Successfully built 55c35755e9d2
   Successfully tagged code_asset:latest
   docker export --output=code_asset.tar $(docker create code_asset:latest)
   gzip -9 code_asset.tar
   Updating an existing asset with the same name
   {
       "name": "code_asset",
       "implementations": [
           {
               "type": "container",
               "assetUri": "98aaxmpl1c1ef64cde5ac13bd3be5394e5d17064beccee963b4095d83083c343.tar.gz",
               "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json"
           }
       ]
   }
   Container asset for the package has been succesfully built at  ~/aws-panorama-sample-dev/assets/98aaxmpl1c1ef64cde5ac13bd3be5394e5d17064beccee963b4095d83083c343.tar.gz
   ```

   CLI는 `assets` 폴더에서 이전 컨테이너 자산을 자동으로 삭제하고 패키지 구성을 업데이트합니다.

1. 패키지를 업로드하려면 `4-package-application.py`를 실행하십시오.

1. AWS Panorama 콘솔 [배포 애플리케이션 페이지](https://console.aws.amazon.com/panorama/home#deployed-applications)를 엽니다.

1. 애플리케이션을 선택합니다.

1. **바꾸기**를 선택합니다.

1. 애플리케이션 배포 단계를 완료합니다. 필요한 경우 애플리케이션 매니페스트, 카메라 스트림 또는 파라미터를 변경할 수 있습니다.

## 컴퓨터 비전 모델 변경
<a name="gettingstarted-sample-model"></a>

샘플 애플리케이션에는 컴퓨터 비전 모델이 포함되어 있습니다. 자체 모델을 사용하려면 모델 노드의 구성을 수정하고 AWS Panorama Application CLI를 사용하여 모델을 자산으로 가져오십시오.

다음 예시는 MXnet SSD ResNet50 모델을 사용하며, 이 모델은 이 설명서의 GitHub 리포지토리 [ssd\$1512\$1resnet50\$1v1\$1voc.tar.gz](https://github.com/awsdocs/aws-panorama-developer-guide/releases/download/v0.1-preview/ssd_512_resnet50_v1_voc.tar.gz)에서 다운로드할 수 있습니다.

**샘플 애플리케이션의 모델을 변경하려면**

1. 모델에 맞게 패키지 폴더의 이름을 변경합니다. 예를 들어 `packages/123456789012-SSD_512_RESNET50_V1_VOC-1.0/`로 변경합니다.

1. 다음 위치에서 패키지 이름을 업데이트하십시오.

****
   + **애플리케이션 매니페스트** – `graphs/aws-panorama-sample/graph.json`
   + **패키지 구성** – `packages/123456789012-SSD_512_RESNET50_V1_VOC-1.0/package.json`

1. 패키지 구성 파일(`package.json`)에서. `assets` 값을 빈 배열로 변경합니다.

   ```
   {
       "nodePackage": {
           "envelopeVersion": "2021-01-01",
           "name": "SSD_512_RESNET50_V1_VOC",
           "version": "1.0",
           "description": "Compact classification model",
           "assets": [],
   ```

1. 패키지 설명자 파일(`descriptor.json`)을 엽니다. `framework` 및 `shape` 값을 모델에 맞게 업데이트하십시오.

   ```
   {
       "mlModelDescriptor": {
           "envelopeVersion": "2021-01-01",
           "framework": "MXNET",
           "inputs": [
               {
                   "name": "data",
                   "shape": [ 1, 3, 512, 512 ]
               }
           ]
       }
   }
   ```

   **모양** 값 `1,3,512,512`는 모델이 입력으로 받는 이미지 수(1), 각 이미지의 채널 수(3--빨간색, 녹색, 파란색), 이미지 크기(512 x 512)를 나타냅니다. 배열의 값과 순서는 모델마다 다릅니다.

1. AWS Panorama Application CLI를 사용하여 모델을 가져옵니다. AWS Panorama Application CLI는 모델 및 설명자 파일을 고유한 이름이 있는 `assets` 폴더에 복사하고 패키지 구성을 업데이트합니다.

   ```
   aws-panorama-sample$ panorama-cli add-raw-model --model-asset-name model-asset \
   --model-local-path ssd_512_resnet50_v1_voc.tar.gz \
   --descriptor-path packages/123456789012-SSD_512_RESNET50_V1_VOC-1.0/descriptor.json \
   --packages-path packages/123456789012-SSD_512_RESNET50_V1_VOC-1.0
   {
       "name": "model-asset",
       "implementations": [
           {
               "type": "model",
               "assetUri": "b1a1589afe449b346ff47375c284a1998c3e1522b418a7be8910414911784ce1.tar.gz",
               "descriptorUri": "a6a9508953f393f182f05f8beaa86b83325f4a535a5928580273e7fe26f79e78.json"
           }
       ]
   }
   ```

1. 모델을 업로드하려면 `panorama-cli package-application`을 실행하십시오.

   ```
   $ panorama-cli package-application
   Uploading package SAMPLE_CODE
   Patch Version 1844d5a59150d33f6054b04bac527a1771fd2365e05f990ccd8444a5ab775809 already registered, ignoring upload
   Uploading package SSD_512_RESNET50_V1_VOC
   Patch version for the package 244a63c74d01e082ad012ebf21e67eef5d81ce0de4d6ad1ae2b69d0bc498c8fd
   upload: assets/b1a1589afe449b346ff47375c284a1998c3e1522b418a7be8910414911784ce1.tar.gz to s3://arn:aws:s3:us-west-2:454554846382:accesspoint/panorama-123456789012-wc66m5eishf4si4sz5jefhx
   63a/123456789012/nodePackages/SSD_512_RESNET50_V1_VOC/binaries/b1a1589afe449b346ff47375c284a1998c3e1522b418a7be8910414911784ce1.tar.gz
   upload: assets/a6a9508953f393f182f05f8beaa86b83325f4a535a5928580273e7fe26f79e78.json to s3://arn:aws:s3:us-west-2:454554846382:accesspoint/panorama-123456789012-wc66m5eishf4si4sz5jefhx63
   a/123456789012/nodePackages/SSD_512_RESNET50_V1_VOC/binaries/a6a9508953f393f182f05f8beaa86b83325f4a535a5928580273e7fe26f79e78.json
   {
       "ETag": "\"2381dabba34f4bc0100c478e67e9ab5e\"",
       "ServerSideEncryption": "AES256",
       "VersionId": "KbY5fpESdpYamjWZ0YyGqHo3.LQQWUC2"
   }
   Registered SSD_512_RESNET50_V1_VOC with patch version 244a63c74d01e082ad012ebf21e67eef5d81ce0de4d6ad1ae2b69d0bc498c8fd
   Uploading package SQUEEZENET_PYTORCH_V1
   Patch Version 568138c430e0345061bb36f05a04a1458ac834cd6f93bf18fdacdffb62685530 already registered, ignoring upload
   ```

1. 애플리케이션 코드를 업데이트합니다. 대부분의 코드는 재사용할 수 있습니다. 모델 응답과 관련된 코드는 `process_results` 메서드에 있습니다.

   ```
       def process_results(self, inference_results, stream):
           """Processes output tensors from a computer vision model and annotates a video frame."""
           for class_tuple in inference_results:
               indexes = self.topk(class_tuple[0])
           for j in range(2):
               label = 'Class [%s], with probability %.3f.'% (self.classes[indexes[j]], class_tuple[0][indexes[j]])
               stream.add_label(label, 0.1, 0.25 + 0.1*j)
   ```

   모델에 따라 `preprocess` 메서드를 업데이트해야 할 수도 있습니다.

## 이미지 사전 처리
<a name="gettingstarted-sample-preprocessing"></a>

애플리케이션은 이미지를 모델로 보내기 전에 이미지의 크기를 조정하고 색상 데이터를 정규화하여 추론을 준비합니다. 애플리케이션이 사용하는 모델에는 첫 번째 레이어의 입력 개수와 일치하도록 세 개의 색상 채널이 있는 224 x 224 픽셀 이미지가 필요합니다. 애플리케이션은 각 색상 값을 0에서 1 사이의 숫자로 변환하고, 해당 색상의 평균값을 빼고, 표준 편차로 나누어 조정합니다. 마지막으로 색상 채널을 결합하여 모델이 처리할 수 있는 NumPy 배열로 변환합니다.

**Example [application.py](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SAMPLE_CODE-1.0/application.py) – 사전 처리**  

```
    def preprocess(self, img, width):
        resized = cv2.resize(img, (width, width))
        mean = [0.485, 0.456, 0.406]
        std = [0.229, 0.224, 0.225]
        img = resized.astype(np.float32) / 255.
        img_a = img[:, :, 0]
        img_b = img[:, :, 1]
        img_c = img[:, :, 2]
        # Normalize data in each channel
        img_a = (img_a - mean[0]) / std[0]
        img_b = (img_b - mean[1]) / std[1]
        img_c = (img_c - mean[2]) / std[2]
        # Put the channels back together
        x1 = [[[], [], []]]
        x1[0][0] = img_a
        x1[0][1] = img_b
        x1[0][2] = img_c
        return np.asarray(x1)
```

이 프로세스는 0을 중심으로 한 예측 가능한 범위의 모델 값을 제공합니다. 이는 표준 접근 방식이지만 모델마다 다를 수 있는 교육 데이터 세트의 이미지에 적용되는 전처리와 일치합니다.

## SDK for Python을 통한 지표 업로드
<a name="gettingstarted-sample-metrics"></a>

샘플 애플리케이션은 SDK for Python을 사용하여 Amazon CloudWatch에 지표를 업로드합니다.

**Example [application.py](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SAMPLE_CODE-1.0/application.py) – SDK for Python**  

```
    def process_streams(self):
        """Processes one frame of video from one or more video streams."""
        ...
            logger.info('epoch length: {:.3f} s ({:.3f} FPS)'.format(epoch_time, epoch_fps))
            logger.info('avg inference time: {:.3f} ms'.format(avg_inference_time))
            logger.info('max inference time: {:.3f} ms'.format(max_inference_time))
            logger.info('avg frame processing time: {:.3f} ms'.format(avg_frame_processing_time))
            logger.info('max frame processing time: {:.3f} ms'.format(max_frame_processing_time))
            self.inference_time_ms = 0
            self.inference_time_max = 0
            self.frame_time_ms = 0
            self.frame_time_max = 0
            self.epoch_start = time.time()
            self.put_metric_data('AverageInferenceTime', avg_inference_time)
            self.put_metric_data('AverageFrameProcessingTime', avg_frame_processing_time)
 
    def put_metric_data(self, metric_name, metric_value):
        """Sends a performance metric to CloudWatch."""
        namespace = 'AWSPanoramaApplication'
        dimension_name = 'Application Name'
        dimension_value = 'aws-panorama-sample'
        try:
            metric = self.cloudwatch.Metric(namespace, metric_name)
            metric.put_data(
                Namespace=namespace,
                MetricData=[{
                    'MetricName': metric_name,
                    'Value': metric_value,
                    'Unit': 'Milliseconds',
                    'Dimensions': [
                        {
                            'Name': dimension_name,
                            'Value': dimension_value
                        },
                        {
                            'Name': 'Device ID',
                            'Value': self.device_id
                        }
                    ]
                }]
            )
            logger.info("Put data for metric %s.%s", namespace, metric_name)
        except ClientError:
            logger.warning("Couldn't put data for metric %s.%s", namespace, metric_name)
        except AttributeError:
            logger.warning("CloudWatch client is not available.")
```

배포 중에 할당한 런타임 역할에서 권한을 얻습니다. 역할은 `aws-panorama-sample.yml` CloudFormation 템플릿에 정의되어 있습니다.

**Example [aws-panorama-sample.yml](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/aws-panorama-sample.yml)**  

```
Resources:
  runtimeRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - panorama.amazonaws.com
            Action:
              - sts:AssumeRole
      Policies:
        - PolicyName: cloudwatch-putmetrics
          PolicyDocument:
            Version: 2012-10-17		 	 	 
            Statement:
              - Effect: Allow
                Action: 'cloudwatch:PutMetricData'
                Resource: '*'
      Path: /service-role/
```

샘플 애플리케이션은 pip를 사용하여 SDK for Python 및 기타 종속 항목을 설치합니다. 애플리케이션 컨테이너를 빌드하는 경우 `Dockerfile`은 명령을 실행하여 기본 이미지와 함께 제공되는 항목 위에 라이브러리를 설치합니다.

**Example [Dockerfile](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SAMPLE_CODE-1.0/Dockerfile)**  

```
FROM public.ecr.aws/panorama/panorama-application
WORKDIR /panorama
COPY . .
RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt
```

애플리케이션 코드에서 AWS SDK를 사용하려면 먼저 템플릿을 수정하여 애플리케이션이 사용하는 모든 API 작업에 대한 권한을 추가합니다. 변경할 `1-create-role.sh` 때마다를 실행하여 CloudFormation 스택을 업데이트합니다. 그런 다음 애플리케이션 코드에 변경 내용을 배포하십시오.

기존 리소스를 수정하거나 사용하는 작업의 경우 별도의 문장에 대상 `Resource`의 이름이나 패턴을 지정하여 이 정책의 적용 범위를 최소화하는 것이 가장 좋습니다. 각 서비스에서 지원하는 작업 및 리소스에 대한 자세한 내용은 서비스 승인 참조의 [작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)를 참조하십시오.

## 다음 단계
<a name="gettingstarted-sample-nextsteps"></a>

AWS Panorama 애플리케이션 CLI를 사용하여 애플리케이션을 구축하고 처음부터 패키지를 생성하는 방법에 대한 지침은 CLI의 README를 참조하십시오.

****
+ [github.com/aws/aws-panorama-cli](https://github.com/aws/aws-panorama-cli)

배포 전에 애플리케이션 코드를 검증하는 데 사용할 수 있는 샘플 코드와 테스트 유틸리티에 대한 자세한 내용은 AWS Panorama 샘플 리포지토리를 참조하십시오.

****
+ [github.com/aws-samples/aws-panorama-samples](https://github.com/aws-samples/aws-panorama-samples)

# 지원되는 컴퓨터 비전 모델 및 카메라
<a name="gettingstarted-compatibility"></a>

AWS Panorama는 PyTorch, Apache MXNet, TensorFlow로 구축된 모델을 지원합니다. 애플리케이션을 배포하면 AWS Panorama가 SageMaker AI Neo에서 모델을 컴파일합니다. Amazon SageMaker SageMaker AI 또는 개발 환경에서 모델을 빌드할 수 있습니다.

비디오를 처리하고 모델로 전송할 이미지를 가져오기 위해 AWS Panorama 어플라이언스는 RTSP 프로토콜을 사용하여 H.264로 인코딩된 비디오 스트림에 연결합니다. AWS Panorama는 다양한 일반 카메라의 호환성을 테스트합니다.

**Topics**
+ [지원되는 모델](#gettingstarted-compatibility-models)
+ [지원되는 카메라](#gettingstarted-compatibility-cameras)

## 지원되는 모델
<a name="gettingstarted-compatibility-models"></a>

AWS Panorama용 애플리케이션을 빌드할 경우, 사용자는 애플리케이션이 컴퓨터 비전에 사용하는 기계 학습 모델을 제공합니다. 모델 프레임워크에서 제공하는 사전 빌드 및 사전 학습된 모델, [샘플 모델](gettingstarted-sample.md#gettingstarted-sample-model) 또는 직접 구축하고 학습한 모델을 사용할 수 있습니다.

**참고**  
AWS Panorama로 테스트한 사전 빌드 모델 목록은 [모델 호환성](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/resources/model-compatibility.md)을 참조하십시오.

애플리케이션을 배포할 때 AWS Panorama는 SageMaker AI Neo 컴파일러를 사용하여 컴퓨터 비전 모델을 컴파일합니다. SageMaker AI Neo는 Amazon Elastic Compute Cloud(Amazon EC2)의 인스턴스 또는 AWS Panorama 어플라이언스와 같은 엣지 디바이스일 수 있는 대상 플랫폼에서 효율적으로 실행되도록 모델을 최적화하는 컴파일러입니다.

AWS Panorama는 SageMaker AI Neo에서 엣지 디바이스에 대해 지원되는 PyTorch, Apache MXNet 및 TensorFlow 버전을 지원합니다. 자체 모델을 빌드할 때 [SageMaker AI Neo 릴리스 정보에](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/) 나열된 프레임워크 버전을 사용할 수 있습니다. SageMaker AI에서는 기본 제공 [이미지 분류 알고리즘](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html)을 사용할 수 있습니다.

AWS Panorama에서 모델을 사용하는 방법은 [컴퓨터 비전 모델](applications-models.md) 단원을 참조하십시오.

## 지원되는 카메라
<a name="gettingstarted-compatibility-cameras"></a>

AWS Panorama 어플라이언스는 로컬 네트워크를 통해 RTSP를 출력하는 카메라의 H.264 비디오 스트림을 지원합니다. 2메가픽셀을 초과하는 카메라 스트림의 경우 어플라이언스는 이미지를 1920x1080 픽셀 또는 스트림의 가로 세로 비율을 유지하는 동등한 크기로 축소합니다.

다음 카메라 모델은 AWS Panorama 어플라이언스와의 호환성 테스트를 완료했습니다.
+ [Axis](https://www.axis.com/) – M3057-PLVE, M3058-PLVE, P1448-LE, P3225-LV Mk II
+ [LaView](https://www.laviewsecurity.com/) – LV-PB3040W
+ [Vivotek](https://www.vivotek.com/) – IB9360-H
+ [Amcrest](https://amcrest.com/) – IP2M-841B
+ **Anpviz** – IPC-B850W-S-3X, IPC-D250W-S
+ **WGCC** – Dome PoE 4MP ONVIF

어플라이언스의 하드웨어 사양은 [AWS Panorama 어플라이언스 사양](gettingstarted-hardware.md)를 참조하십시오.

# AWS Panorama 어플라이언스 사양
<a name="gettingstarted-hardware"></a>

AWS Panorama 어플라이언스의 하드웨어 사양은 다음과 같습니다. 다른 [호환 디바이스](gettingstarted-concepts.md#gettingstarted-concepts-devices)에 대해서는 제조업체 설명서를 참조하십시오.


| 구성 요소 | 사양 | 
| --- | --- | 
|  프로세서 및 GPU  |  [Nvidia Jetson AGX Xavier](https://developer.nvidia.com/embedded/jetson-agx-xavier-developer-kit)(32GB RAM 포함)  | 
|  이더넷  |  2x 1000 Base-T(기가바이트)  | 
|  USB  |  USB 2.0 1개 및 USB 3.0 타입-A 1개(암형)  | 
|  HDMI 출력  |  2.0a  | 
|  치수  |  7.75” x 9.6” x 1.6”(197mm x 243mm x 40mm)  | 
|  가중치  |  3.7파운드(1.7kg)  | 
|  전원 공급  |  100V-240V 50-60Hz AC 65W  | 
|  전원 입력  |  IEC 60320 C6(3핀) 리셉터클  | 
|  방진 및 방수  |  IP-62  | 
|  EMI/EMC 규제 준수  |  FCC Part-15(미국)   | 
|  열 접촉 제한  |  IEC-62368  | 
|  작동 온도  |  -20°C\$160°C  | 
|  작동 습도  |  0%\$195% RH  | 
|  보관 온도  |  -20°C\$185°C  | 
|  보관 습도  |  저온에서는 제어되지 않습니다. 고온에서 90% RH   | 
|  냉각  |  강제 공기 열 추출(팬)  | 
|  장착 옵션  |  랙마운트 또는 독립형  | 
|  전원 코드  |  6피트(1.8미터)  | 
|  전원 제어  |  푸시 버튼  | 
|  Reset  |  모멘터리 스위치  | 
|  상태 및 네트워크 LED  |  프로그래밍형 3색 RGB LED  | 

어플라이언스에 Wi-Fi, Bluetooth 및 SD 카드 스토리지가 있지만 사용할 수 없습니다.

AWS Panorama 어플라이언스에 서버 랙에 장착하기 위한 나사 2개가 포함되어 있습니다. 19인치 랙에 어플라이언스 두 개를 나란히 장착할 수 있습니다.

# Service Quotas
<a name="gettingstarted-quotas"></a>

AWS Panorama는 계정에서 생성한 리소스와 배포하는 애플리케이션에 할당량을 적용합니다. 여러 AWS 리전에서 AWS Panorama를 사용하는 경우 각 리전에 별도로 할당량이 적용됩니다. AWS Panorama 할당량은 조절할 수 없습니다.

AWS Panorama의 리소스에는 디바이스, 애플리케이션 노드 패키지 및 애플리케이션 인스턴스가 포함됩니다.

****
+ **디바이스** – 지역당 등록된 어플라이언스 최대 50개.
+ **노드 패키지** – 지역당 50개 패키지, 패키지당 최대 20개 버전.
+ **애플리케이션 인스턴스** – 디바이스당 최대 10개 애플리케이션. 각 애플리케이션은 최대 8개의 카메라 스트림을 모니터링할 수 있습니다. 배포는 각 디바이스에 대해 하루 200개로 제한됩니다.

AWS Panorama Application CLI AWS Command Line Interface또는 AWS SDK를 AWS Panorama 서비스와 함께 사용하는 경우 할당량은 수행한 API 호출 수에 적용됩니다. 초당 총 5개까지 요청할 수 있습니다. 리소스를 만들거나 수정하는 API 작업의 하위 집합에는 초당 요청 1개라는 추가 제한이 적용됩니다.

전체 할당량 목록을 보려면 [Service Quotas 콘솔](https://console.aws.amazon.com/servicequotas/home/services/panorama/quotas)을 방문하거나 Amazon Web Services 일반 참조에서 [AWS Panorama 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/panorama.html)을 참조하십시오.