HoloLens(1세대) 및 Azure 307: 기계 학습


참고

Mixed Reality 아카데미 자습서는 HoloLens(1세대) 및 Mixed Reality 몰입형 헤드셋을 염두에 두고 설계되었습니다. 따라서 이러한 디바이스 개발에 대한 지침을 계속 찾고 있는 개발자를 위해 이러한 자습서를 그대로 두는 것이 중요합니다. 이러한 자습서는 HoloLens 2에 사용되는 최신 도구 집합 또는 상호 작용으로 업데이트되지 않습니다. 대신 지원되는 디바이스에서 계속 작동하도록 유지 관리됩니다. HoloLens 2 위해 개발하는 방법을 보여 줄 새로운 자습서 시리즈가 미래에 게시 될 예정입니다. 이 알림은 해당 자습서가 게시될 때 해당 자습서에 대한 링크로 업데이트됩니다.


final product -start

이 과정에서는 Azure Machine Learning Studio(클래식)를 사용하여 혼합 현실 애플리케이션에 ML(Machine Learning) 기능을 추가하는 방법을 알아봅니다.

Azure Machine Learning Studio(클래식) 는 개발자에게 데이터 입력, 출력, 준비 및 시각화에 도움이 될 수 있는 많은 수의 기계 학습 알고리즘을 제공하는 Microsoft 서비스입니다. 그런 다음 이러한 구성 요소에서 예측 분석 실험을 개발하고, 반복하고, 이를 사용하여 모델을 학습시킬 수 있습니다. 학습 후에는 Azure 클라우드 내에서 모델을 작동하여 새 데이터의 점수를 매기도록 할 수 있습니다. 자세한 내용은 Azure Machine Learning Studio(클래식) 페이지를 참조하세요.

이 과정을 완료하면 혼합 현실 몰입형 헤드셋 애플리케이션이 있으며 다음을 수행하는 방법을 알아보았습니다.

  1. Azure Machine Learning Studio(클래식) 포털에 판매 데이터 테이블을 제공하고 인기 있는 항목의 향후 판매를 예측하는 알고리즘을 디자인합니다.
  2. ML 서비스에서 예측 데이터를 수신하고 해석할 수 있는 Unity 프로젝트를 만듭니다.
  3. 가장 인기 있는 판매 항목을 선반에 제공하여 Unity 프로젝트 내에서 조건 데이터를 시각적으로 표시합니다.

애플리케이션에서 결과를 디자인과 통합하는 방법은 사용자에게 달려 있습니다. 이 과정은 Unity 프로젝트와 Azure 서비스를 통합하는 방법을 가르치기 위해 고안되었습니다. 혼합 현실 애플리케이션을 향상시키기 위해 이 과정에서 얻은 지식을 사용하는 것이 당신의 일입니다.

이 과정은 다른 Mixed Reality 랩을 직접 포함하지 않는 자체 포함된 자습서입니다.

디바이스 지원

과정 HoloLens 몰입형 헤드셋
MR 및 Azure 307: 기계 학습 ✔️ ✔️

참고

이 과정은 주로 Windows Mixed Reality 몰입형(VR) 헤드셋에 중점을 두지만, 이 과정에서 배운 내용을 Microsoft HoloLens 적용할 수도 있습니다. 과정을 진행하면서 HoloLens를 지원하기 위해 사용해야 할 수 있는 변경 내용에 대한 메모가 표시됩니다. HoloLens를 사용하는 경우 음성 캡처 중에 약간의 에코가 나타날 수 있습니다.

사전 요구 사항

참고

이 자습서는 Unity 및 C#에 대한 기본 경험이 있는 개발자를 위해 설계되었습니다. 또한 이 문서의 필수 구성 요소와 서면 지침은 작성 당시 테스트 및 확인된 내용을 나타냅니다(2018년 5월). 이 과정의 정보가 아래에 나열된 것보다 최신 소프트웨어에서 찾을 수 있는 것과 완벽하게 일치한다고 가정해서는 안 되지만 , 도구 설치 문서에 나열된 대로 최신 소프트웨어를 자유롭게 사용할 수 있습니다.

이 과정에서는 다음 하드웨어 및 소프트웨어를 사용하는 것이 좋습니다.

시작하기 전에

이 프로젝트를 빌드하는 데 문제가 발생하지 않도록 하려면 이 자습서에 언급된 프로젝트를 루트 또는 루트에 가까운 폴더에 만드는 것이 좋습니다(긴 폴더 경로는 빌드 시 문제를 일으킬 수 있습니다).

1장 - Azure Storage 계정 설정

Azure Translator API를 사용하려면 애플리케이션에서 사용할 수 있도록 서비스의 instance 구성해야 합니다.

  1. Azure Portal에 로그인합니다.

    참고

    Azure 계정이 아직 없는 경우 계정을 만들어야 합니다. 교실 또는 랩 상황에서 이 자습서를 따르는 경우 강사 또는 감독관 중 한 명에게 새 계정 설정에 대한 도움을 요청하세요.

  2. 로그인한 후 왼쪽 메뉴에서 스토리지 계정을 클릭합니다.

    왼쪽 탐색 메뉴의 스토리지 계정 항목을 보여주는 Microsoft Azure 창의 스크린샷.

    참고

    단어는 최신 포털에서 리소스 만들기로 대체되었을 수 있습니다.

  3. 스토리지 계정 탭에서 추가를 클릭합니다.

    스토리지 계정 화면과 강조 표시된 추가 단추를 보여주는 Microsoft Azure 창의 스크린샷.

  4. 스토리지 계정 만들기 패널에서 다음을 수행합니다.

    1. 계정 의 이름을 삽입합니다. 이 필드는 숫자와 소문자만 허용합니다.

    2. 배포 모델에서리소스 관리자를 선택합니다.

    3. 계정 종류에 대해 스토리지(범용 v1)를 선택합니다.

    4. 성능표준을 선택합니다.

    5. 복제에서 RA-GRS(읽기 액세스 지역 중복 스토리지)를 선택합니다.

    6. 보안 전송 필요사용 안 함으로 둡니다.

    7. 구독을 선택합니다.

    8. 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다. 리소스 그룹은 Azure 자산 컬렉션에 대한 액세스를 모니터링, 제어, 프로비전 및 관리하는 방법을 제공합니다. 단일 프로젝트(예: 이러한 랩)와 연결된 모든 Azure 서비스를 공통 리소스 그룹 아래에 유지하는 것이 좋습니다.

      Azure 리소스 그룹에 대해 자세히 알아보려면 리소스 그룹 문서를 참조하세요.

    9. 리소스 그룹의 위치를 결정합니다(새 리소스 그룹을 만드는 경우). 위치는 애플리케이션이 실행되는 지역에 있는 것이 가장 좋습니다. 일부 Azure 자산은 특정 지역에서만 사용할 수 있습니다.

  5. 또한 이 서비스에 적용된 사용 약관을 이해했음을 확인해야 합니다.

    사용자가 필요한 텍스트 필드에 입력한 정보를 보여 주는 스토리지 계정 만들기 대화 상자의 스크린샷

  6. 만들기를 클릭하면 서비스가 만들어질 때까지 기다려야 합니다. 이 작업은 1분 정도 걸릴 수 있습니다.

  7. 서비스 instance 만들어지면 포털에 알림이 표시됩니다.

    리소스 그룹에 대한 배포가 성공했음을 사용자에게 알리는 배포 성공 알림의 스크린샷

2장 - Azure Machine Learning Studio(클래식)

Azure Machine Learning을 사용하려면 애플리케이션에서 사용할 수 있도록 Machine Learning 서비스의 instance 구성해야 합니다.

  1. Azure Portal의 왼쪽 위 모서리에서 새로 만들기를 클릭하고 Machine Learning Studio 작업 영역을 검색하고 Enter 키를 누릅니 .

    콘텐츠 창의 Machine Learning Studio 작업 영역을 보여 주는 Microsoft Azure 창의 스크린샷.

  2. 새 페이지에서는 Machine Learning Studio 작업 영역 서비스에 대한 설명을 제공합니다. 이 프롬프트의 왼쪽 아래에서 만들기 단추를 클릭하여 이 서비스와의 연결을 만듭니다.

  3. 만들기를 클릭하면 새 Machine Learning Studio 서비스에 대한 몇 가지 세부 정보를 제공해야 하는 패널이 표시됩니다.

    1. 이 서비스 instance 원하는 작업 영역 이름을 삽입합니다.

    2. 구독을 선택합니다.

    3. 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다. 리소스 그룹은 Azure 자산 컬렉션에 대한 액세스를 모니터링, 제어, 프로비전 및 관리하는 방법을 제공합니다. 단일 프로젝트(예: 이러한 랩)와 연결된 모든 Azure 서비스를 공통 리소스 그룹 아래에 유지하는 것이 좋습니다.

      Azure 리소스 그룹에 대해 자세히 알아보려면 리소스 그룹 문서를 참조하세요.

    4. 리소스 그룹의 위치를 결정합니다(새 리소스 그룹을 만드는 경우). 위치는 애플리케이션이 실행되는 지역에 있는 것이 가장 좋습니다. 일부 Azure 자산은 특정 지역에서만 사용할 수 있습니다. 이전 챕터에서 Azure Storage를 만드는 데 사용한 것과 동일한 리소스 그룹을 사용해야 합니다.

    5. 스토리지 계정 섹션의 경우 기존 항목 사용을 클릭한 다음 드롭다운 메뉴를 클릭한 다음, 마지막 챕터에서 만든 스토리지 계정을 클릭합니다.

    6. 드롭다운 메뉴에서 적절한 작업 영역 가격 책정 계층 을 선택합니다.

    7. 웹 서비스 계획 섹션 내에서 새로 만들기를 클릭한 다음 텍스트 필드에 이름을 삽입합니다.

    8. 웹 서비스 요금제 가격 책정 계층 섹션에서 선택한 가격 계층을 선택합니다. DEVTEST Standard라는 개발 테스트 계층을 무료로 사용할 수 있어야 합니다.

    9. 또한 이 서비스에 적용된 사용 약관을 이해했음을 확인해야 합니다.

    10. 만들기를 클릭합니다.

      사용자가 텍스트 필드에 입력한 정보를 보여 주는 Azure Machine Learning Studio 대화 상자의 스크린샷

  4. 만들기를 클릭하면 서비스가 만들어질 때까지 기다려야 합니다. 이 작업은 1분 정도 걸릴 수 있습니다.

  5. 서비스 instance 만들어지면 포털에 알림이 표시됩니다.

    탐색 메뉴에서 읽지 않은 알림을 보여 주는 Microsoft Azure 창의 스크린샷

  6. 알림을 클릭하여 새 서비스 instance 탐색합니다.

    리소스 그룹에 대한 작업 영역 배포가 성공했음을 사용자에게 알리는 배포 성공 알림의 스크린샷

  7. 알림에서 리소스로 이동 단추를 클릭하여 새 서비스 instance 탐색합니다.

  8. 표시된 페이지의 추가 링크 섹션에서 Machine Learning Studio 시작을 클릭합니다. 그러면 브라우저가 Machine Learning Studio 포털로 이동됩니다.

    콘텐츠 창에서 강조 표시된 Machine Learning Studio 시작 링크를 보여 주는 Microsoft Azure 창의 스크린샷

  9. 오른쪽 위 또는 중앙에 있는 로그인 단추를 사용하여 Machine Learning Studio(클래식)에 로그인합니다.

    강조 표시된 로그인 단추를 보여 주는 Machine Learning Studio 창의 스크린샷.

3장 - Machine Learning Studio(클래식): 데이터 세트 설정

Machine Learning 알고리즘이 작동하는 방법 중 하나는 기존 데이터를 분석한 다음 기존 데이터 집합을 기반으로 향후 결과를 예측하는 것입니다. 이는 일반적으로 기존 데이터가 많을수록 알고리즘이 향후 결과를 더 잘 예측할 수 있음을 의미합니다.

이 과정의 경우 ProductsTableCSV라는 샘플 테이블이 제공되며 여기에서 다운로드할 수 있습니다.

중요

위의 .zip 파일에는 6장에서 필요한 ProductsTableCSV.unitypackage가 모두 포함되어 있습니다. 이 패키지는 csv 파일과는 별도로 해당 챕터 내에서도 제공됩니다.

이 샘플 데이터 집합에는 2017년 매일 매시간 가장 많이 팔린 개체의 레코드가 포함되어 있습니다.

2017년 매일 매시간 가장 많이 팔린 개체의 샘플 데이터 집합을 보여 주는 Microsoft Excel 창의 스크린샷

예를 들어 2017년 1일 오후 1시(13시간)에 가장 많이 팔린 항목은 소금과 후추였습니다.

이 샘플 테이블에는 9998개의 항목이 포함되어 있습니다.

  1. Machine Learning Studio(클래식) 포털로 돌아가서 이 테이블을 ML에 대한 데이터 세트로 추가합니다. 화면 왼쪽 아래 모서리에 있는 + 새로 만들기 단추를 클릭하여 이 작업을 수행합니다.

    메뉴에 강조 표시된 새로 만들기 단추를 보여 Microsoft Azure Machine Learning Studio 클래식 포털의 스크린샷

  2. 섹션이 아래쪽에서 올라오고 그 안에는 왼쪽에 탐색 패널이 있습니다. 데이터 세트를 클릭한 다음 오른쪽에 있는 로컬 파일에서를 클릭합니다.

    강조 표시된 데이터 세트 및 로컬 파일에서 메뉴 항목을 보여주는 새로 만들기 대화 상자의 스크린샷.

  3. 다음 단계에 따라 새 데이터 세트를 업로드합니다.

    1. 새 데이터 세트에 대한 하드 드라이브를 찾아볼 수 있는 업로드 창이 나타납니다.

      사용자가 업로드할 데이터를 찾아 선택할 수 있는 찾아보기 단추를 보여 주는 새 데이터 세트 업로드 대화 상자의 스크린샷.

    2. 선택한 후 업로드 창으로 돌아가서 확인란을 선택 취소한 상태로 둡니다.

    3. 아래 텍스트 필드에 데이터 세트의 이름으로 ProductsTableCSV.csv 입력합니다(하지만 자동으로 추가되어야 합니다).

    4. 형식의 드롭다운 메뉴를 사용하여 헤더가 있는 일반 CSV 파일(.csv)을 선택합니다.

    5. 업로드 창의 오른쪽 아래에 있는 틱을 누르면 데이터 세트 가 업로드됩니다.

4장 - Machine Learning Studio(클래식): 실험

기계 학습 시스템을 빌드하기 전에 데이터에 대한 이론의 유효성을 검사하기 위해 실험을 빌드해야 합니다. 결과를 사용하면 더 많은 데이터가 필요한지 또는 데이터와 가능한 결과 간에 상관 관계가 없는지 여부를 알 수 있습니다.

실험 만들기를 시작하려면 다음을 수행합니다.

  1. 페이지 왼쪽 아래에 있는 + 새로 만들기 단추를 다시 클릭한 다음빈 실험실험을> 클릭합니다.

    실험 메뉴 항목이 선택된 Microsoft Azure Machine Learning Studio 창의 스크린샷

  2. 새 페이지에 빈 실험이 표시됩니다.

  3. 왼쪽 패널에서 저장된 데이터 세트내 데이터 세트를> 확장하고 ProductsTableCSV를실험 캔버스로 끕니다.

    메뉴의 확장된 내 데이터 세트 폴더와 실험 캔버스의 Products Table C S V를 보여주는 실험 창의 스크린샷.

  4. 왼쪽 패널에서 데이터 변환>샘플 및 분할을 확장합니다. 그런 다음 데이터 분할 항목을 실험 캔버스로 끕니다. 데이터 분할 항목은 데이터 집합을 두 부분으로 분할합니다. 기계 학습 알고리즘을 학습하는 데 사용할 한 부분입니다. 두 번째 부분은 생성된 알고리즘의 정확도를 평가하는 데 사용됩니다.

    캔버스에 데이터 분할이 적용된 메뉴의 파티션 및 샘플 및 분할 데이터 항목을 보여 주는 실험 창의 스크린샷.

  5. 캔버스에서 데이터 분할 항목을 선택하는 동안 오른쪽 패널 에서 첫 번째 출력 데이터 세트의 행 분수0.7로 편집합니다. 이렇게 하면 데이터가 두 부분으로 분할되고, 첫 번째 부분은 데이터의 70%가 되고, 두 번째 부분은 나머지 30%가 됩니다. 데이터가 임의로 분할되도록 하려면 임의 분할 확인란이 선택되어 있는지 확인합니다.

    채워진 임의 분할 확인란과 행의 분수 필드가 0포인트 7로 설정된 속성 패널의 스크린샷

  6. 캔버스에 있는 ProductsTableCSV 항목의 기준에서 데이터 분할 항목의 맨 위로 연결을 끌어옵니다. 그러면 항목이 연결되고 ProductsTableCSV 데이터 세트 출력(데이터)이 데이터 분할 입력으로 전송됩니다.

    Products Table C S V dot c s v와 Split Data 간에 그려진 연결을 보여 주는 실험 캔버스의 스크린샷.

  7. 왼쪽의 실험 패널에서 Machine Learning 학습>을 확장합니다. 모델 학습 항목을 실험 캔버스로 끌어옵니다. 캔버스는 아래와 같아야 합니다.

    아래 모델 학습을 사용하여 Products Table C S V dot c s v와 Split Data 간에 그려진 연결을 보여 주는 실험 캔버스의 스크린샷

  8. 데이터 분할 항목의 왼쪽 아래에서모델 학습 항목의 오른쪽 상단으로 연결을 끌어옵니다. 데이터 세트에서 처음 70% 분할은 학습 모델에서 알고리즘을 학습시키는 데 사용됩니다.

    Products Table C S V dot c s v, Split Data 및 Train Model 간에 그려진 연결을 보여 주는 실험 캔버스의 스크린샷

  9. 캔버스에서 모델 학습 항목을 선택하고 브라우저 창의 오른쪽에 있는 속성 패널에서 열 선택기 시작 단추를 클릭합니다.

  10. 텍스트 상자에 product 를 입력한 다음 Enter 키를 누르면 제품이 열로 설정되어 예측을 학습시킵니다. 그런 다음 오른쪽 아래 모서리에 있는 을 클릭하여 선택 대화 상자를 닫습니다.

    열 메뉴에 강조 표시된 제품 열을 보여 주는 단일 열 선택 대화 상자의 스크린샷

  11. 하루 중 시간과 날짜를 기준으로 가장 많이 판매된 제품을 예측하기 위해 다중 클래스 로지스틱 회귀 알고리즘을 학습하려고 합니다. Azure Machine Learning 스튜디오 제공하는 다양한 알고리즘의 세부 정보를 설명하는 것은 이 문서의 scope 넘어가지만 Machine Learning 알고리즘 치트 시트에서 자세히 알아볼 수 있습니다.

  12. 왼쪽의 실험 항목 패널에서 Machine Learning> 모델 >분류초기화를확장하고 다중 클래스 로지스틱 회귀 항목을 실험 캔버스로 끕니다.

  13. 다중 클래스 로지스틱 회귀의 아래쪽에서 모델 학습 항목의 왼쪽 위 입력에 출력을 연결합니다.

    다중 클래스 로지스틱 회귀 및 분할 데이터에 연결된 모델 학습을 보여주는 실험 캔버스의 스크린샷

  14. 왼쪽 패널의 실험 항목 목록에서 Machine Learning>점수를 확장하고 모델 점수 매기 기 항목을 캔버스로 끕니다.

  15. 모델 학습의 아래쪽에서 점수 매기기 모델의 왼쪽 위 입력에 출력을 연결합니다.

  16. 데이터 분할의 오른쪽 아래 출력을 모델 점수 매기기 항목의 오른쪽 위 입력에 연결합니다.

    모델 학습 및 데이터 분할에 연결된 모델 점수 매기기를 보여주는 실험 캔버스의 스크린샷.

  17. 왼쪽 패널의 실험 항목 목록에서 Machine Learning>Evaluate를 확장하고 모델 평가 항목을 캔버스로 끕니다.

  18. 모델 점수 매기기의 출력을 모델 평가의 왼쪽 위 입력에 연결합니다.

    모델 점수 매기기에 연결된 모델 평가를 보여주는 실험 캔버스의 스크린샷.

  19. 첫 번째 Machine Learning 실험을 빌드했습니다. 이제 실험을 저장하고 실행할 수 있습니다. 페이지 아래쪽의 메뉴에서 저장 단추를 클릭하여 실험을 저장한 다음 실행을 클릭하여 실험을 시작합니다.

    강조 표시된 저장 및 실행 단추를 보여주는 실험 캔버스 메뉴의 스크린샷.

  20. 캔버스의 오른쪽 위에서 실험의 상태 볼 수 있습니다. 실험이 완료되기까지 잠시 기다립니다.

    큰(실제) 데이터 세트가 있는 경우 실험을 실행하는 데 몇 시간이 걸릴 수 있습니다.

    오른쪽 위 모서리에 있는 실험의 상태 보여 있는 실험 캔버스 창의 스크린샷

  21. 캔버스에서 모델 평가 항목을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 평가 결과 위로 마우스를 가리킨 다음 시각화를 선택합니다.

    강조 표시된 평가 결과 및 시각화 메뉴 항목을 보여주는 모델 평가 항목의 오른쪽 클릭 메뉴 스크린샷

  22. 예측 결과와 실제 결과를 보여 주는 평가 결과가 표시됩니다. 이는 모델을 평가하기 위해 이전에 분할된 원래 데이터 세트의 30%를 사용합니다. 결과가 좋지 않다는 것을 알 수 있습니다. 이상적으로는 각 행에서 가장 높은 숫자가 열에서 강조 표시된 항목이 됩니다.

    백분율이 있는 상자 그래프에서 실험 결과를 보여 주는 결과 차트의 스크린샷.

  23. 결과를 닫습니다.

  24. 새로 학습된 Machine Learning 모델을 사용하려면 웹 서비스로 노출해야 합니다. 이렇게 하려면 페이지 아래쪽의 메뉴에서 웹 서비스 설정 메뉴 항목을 클릭하고 예측 웹 서비스를 클릭합니다.

    강조 표시된 웹 서비스 설정 메뉴 항목을 보여주는 실험 메뉴의 스크린샷.

  25. 새 탭이 만들어지고 학습 모델이 병합되어 새 웹 서비스를 만듭니다.

  26. 페이지 아래쪽의 메뉴에서 저장을 클릭한 다음 실행을 클릭합니다. 실험 캔버스의 오른쪽 위 모서리에 업데이트된 상태 표시됩니다.

    강조 표시된 실행 메뉴 단추와 실행 메뉴 항목을 보여주는 실험 메뉴의 스크린샷.

  27. 실행이 완료되면 페이지 아래쪽에 웹 서비스 배포 단추가 표시됩니다. 웹 서비스를 배포할 준비가 완료되었습니다. 페이지 아래쪽의 메뉴에서 웹 서비스 배포 (클래식)를 클릭합니다.

    웹 서비스 배포 메뉴 단추에서 강조 표시된 웹 서비스 클래식 배포 메뉴 항목을 보여주는 실험 메뉴의 스크린샷.

    배포 페이지가 표시되지 않는 경우 웹 서비스 배포를 다시 눌러야 할 수도 있지만 브라우저에서 허용해야 하는 팝업을 허용하라는 메시지가 표시될 수 있습니다.

  28. 실험이 만들어지면 API 키가 표시되는 대시보드 페이지로 리디렉션됩니다. 잠시 동안 메모장에 복사하면 곧 코드에 필요합니다. API 키를 적어 두면 키 아래의 기본 엔드포인트 섹션에서 요청/응답 단추를 클릭합니다.

    API 키와 강조 표시된 요청 슬래시 응답 링크를 보여 주는 Microsoft Azure Machine Learning Studio 창의 스크린샷

    참고

    이 페이지에서 테스트를 클릭하면 입력 데이터를 입력하고 출력을 볼 수 있습니다. 및 시간을 입력합니다. 제품 항목을 비워 둡니다. 그런 다음 확인 단추를 클릭합니다. 페이지 아래쪽의 출력에는 각 제품이 선택될 가능성을 나타내는 JSON이 표시됩니다.

  29. Machine Learning Studio(클래식)에 필요한 요청 구조에 대한 지침과 몇 가지 예제를 표시하는 새 웹 페이지가 열립니다. 이 페이지에 표시된 요청 URI 를 메모장에 복사합니다.

    강조 표시된 요청  URL을 보여 주는 요청 응답 AP I 설명서 페이지의 스크린샷.

이제 날짜 및 일의 시간과 상관 관계가 있는 기록 구매 데이터를 기반으로 판매될 가능성이 가장 높은 제품을 제공하는 기계 학습 시스템을 구축했습니다.

웹 서비스를 호출하려면 서비스 엔드포인트의 URL과 서비스에 대한 API 키가 필요합니다. 위쪽 메뉴에서 사용 탭을 클릭합니다.

소비 정보 페이지에는 코드에서 웹 서비스를 호출하는 데 필요한 정보가 표시됩니다. 기본 키요청-응답 URL의 복사본을 가져옵니다. 다음 챕터에서 이러한 항목이 필요합니다.

5장 - Unity 프로젝트 설정

Mixed Reality 몰입형 헤드셋을 설정하고 테스트합니다.

참고

이 과정에는 모션 컨트롤러가 필요하지 않습니다 . 몰입형 헤드셋 설정을 지원해야 하는 경우 여기를 클릭하세요.

  1. Unity를 열고 MR_MachineLearning 라는 새 Unity 프로젝트를 만듭니다. 프로젝트 형식이 3D로 설정되어 있는지 확인합니다.

  2. Unity를 열면 기본 스크립트 편집 기가 Visual Studio로 설정되어 있는지 확인할 필요가 있습니다. 기본 설정편집>으로 이동한 다음 새 창에서 외부 도구로 이동합니다. 외부 스크립트 편집기를 Visual Studio 2017로 변경합니다. 기본 설정 창을 닫습니다.

  3. 다음으로, 파일>빌드 설정으로 이동하여 플랫폼 전환 단추를 클릭하여 플랫폼을 유니버설 Windows 플랫폼전환합니다.

  4. 또한 다음을 확인합니다.

    1. 대상 디바이스모든 디바이스로 설정됩니다.

      Microsoft HoloLens 대상 디바이스HoloLens로 설정합니다.

    2. 빌드 유형D3D로 설정됩니다.

    3. SDK최신 설치됨으로 설정됩니다.

    4. Visual Studio 버전최신 설치됨으로 설정됩니다.

    5. 빌드 및 실행로컬 컴퓨터로 설정됩니다.

    6. 나중에 제공되기 때문에 지금 장면을 설정하는 것에 대해 걱정하지 마세요.

    7. 나머지 설정은 현재 기본값으로 남아 있어야 합니다.

      유니버설 Windows 플랫폼 메뉴 항목이 선택된 빌드 설정 대화 상자의 스크린샷

  5. 빌드 설정 창에서 플레이어 설정 단추를 클릭하면 Inspector가 있는 공간에서 관련 패널이 열립니다.

  6. 이 패널에서 몇 가지 설정을 확인해야 합니다.

    1. 기타 설정 탭에서 다음을 수행합니다.

      1. 런타임 버전스크립팅실험적이어야 합니다(.NET 4.6 동등).

      2. 백 엔드 스크립팅.NET이어야 합니다.

      3. API 호환성 수준은.NET 4.6이어야 합니다.

        설명된 단계에 따라 사용하도록 설정된 설정을 보여 주는 기타 설정 탭의 스크린샷.

    2. 게시 설정 탭의 기능에서 다음을 검사.

      • InternetClient

        기능 아래에 인터넷 클라이언트 기능이 사용하도록 설정되어 있는 것을 보여주는 게시 설정 탭의 스크린샷.

    3. 패널 아래쪽의 XR 설정(게시 설정 아래에 있음)에서 Virtual Reality 지원됨을 체크하고 Windows Mixed Reality SDK가 추가되었는지 확인합니다.

      Virtual Reality SDK의 Windows Mixed Reality SDK가 사용하도록 설정되어 있는 것을 보여주는 X R 설정 탭의 스크린샷

  7. 빌드 설정으로 돌아가서 Unity C# 프로젝트는 더 이상 회색으로 표시되지 않습니다. 이 옆에 있는 확인란을 선택합니다.

  8. 빌드 설정 창을 닫습니다.

  9. 프로젝트를 저장합니다(FILE > SAVE PROJECT).

6장 - MLProducts Unity 패키지 가져오기

이 과정에서는 Azure-MR-307.unitypackage라는 Unity 자산 패키지를 다운로드해야 합니다. 이 패키지는 미리 빌드된 모든 개체가 있는 장면으로 완성되므로 모든 작업을 수행하는 데 집중할 수 있습니다. ShelfKeeper 스크립트는 장면 설정 구조를 위해 공용 변수만 보유하지만 제공됩니다. 다른 모든 섹션을 수행해야 합니다.

이 패키지를 가져오려면 다음을 수행합니다.

  1. Unity dashboard 앞에 있는 화면 맨 위에 있는 메뉴에서 자산을 클릭한 다음 패키지 가져오기, 사용자 지정 패키지를 클릭합니다.

    강조 표시된 패키지 가져오기 및 사용자 지정 패키지 메뉴 항목을 보여주는 Unity 대시보드의 스크린샷.

  2. 파일 선택기를 사용하여 Azure-MR-307.unitypackage 패키지를 선택하고 열기를 클릭합니다.

  3. 이 자산의 구성 요소 목록이 표시됩니다. 가져오기를 클릭하여 가져오기를 확인 합니다.

    Azure Machine Learning 패키지를 가져오고 있음을 보여 주는 Unity 패키지 가져오기 대화 상자의 스크린샷.

  4. 가져오기가 완료되면 Unity 프로젝트 패널에 일부 새 폴더가 표시됨을 알 수 있습니다. 이들은 3D 모델과 당신이 작업 할 미리 만들어진 장면의 일부인 각각의 재료입니다. 이 과정에서는 대부분의 코드를 작성합니다.

    Assets 폴더에서 새로 가져온 폴더를 보여주는 Unity 프로젝트 패널의 스크린샷

  5. 프로젝트 패널 폴더 내에서 Scenes 폴더를 클릭하고 내부 장면(MR_MachineLearningScene이라고 함)을 두 번 클릭합니다. 장면이 열립니다(아래 이미지 참조). 빨간색 다이아몬드가 없는 경우 게임 패널의 오른쪽 위에 있는 Gizmos 단추를 클릭하기만 하면 됩니다.

    위쪽 탐색 창에 강조 표시된 Gizmos 메뉴 항목을 보여주는 Unity 장면 창의 스크린샷.

7장 - Unity에서 DLL 확인

JSON 라이브러리(직렬화 및 역직렬화에 사용됨)의 사용을 활용하기 위해 가져온 패키지와 함께 Newtonsoft DLL이 구현되었습니다. 라이브러리에는 올바른 구성이 있어야 하지만 확인할 가치가 있습니다(특히 코드가 작동하지 않는 경우).

그러려면 다음을 수행합니다.

  • 플러그 인 폴더 내의 Newtonsoft 파일을 마우스 왼쪽 단추로 클릭하고 검사기 패널을 확인합니다. 모든 플랫폼이 선택되어 있는지 확인합니다. UWP 탭으로 이동하여 처리 안 됨이 선택되어 있는지 확인합니다.

    Unity에서 DLL 가져오기

8장 - ShelfKeeper 클래스 만들기

ShelfKeeper 클래스는 장면에서 생성된 UI 및 제품을 제어하는 메서드를 호스트합니다.

가져온 패키지의 일부로 불완전하지만 이 클래스가 제공됩니다. 이제 해당 클래스를 완료해야 합니다.

  1. Scripts 폴더 내에서 ShelfKeeper 스크립트를 두 번 클릭하여 Visual Studio 2017에서 엽니다.

  2. 스크립트에 있는 모든 코드를 시간과 날짜를 설정하고 제품을 표시하는 메서드가 있는 다음 코드로 바꿉 있습니다.

    using UnityEngine;
    
    public class ShelfKeeper : MonoBehaviour
    {
        /// <summary>
        /// Provides this class Singleton-like behavior
        /// </summary>
        public static ShelfKeeper instance;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for data
        /// </summary>
        public TextMesh dateText;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for time
        /// </summary>
        public TextMesh timeText;
    
        /// <summary>
        /// Provides references to the spawn locations for the products prefabs
        /// </summary>
        public Transform[] spawnPoint;
    
        private void Awake()
        {
            instance = this;
        }
    
        /// <summary>
        /// Set the text of the date in the scene
        /// </summary>
        public void SetDate(string day, string month)
        {
            dateText.text = day + " " + month;
        }
    
        /// <summary>
        /// Set the text of the time in the scene
        /// </summary>
        public void SetTime(string hour)
        {
            timeText.text = hour + ":00";
        }
    
        /// <summary>
        /// Spawn a product on the shelf by providing the name and selling grade
        /// </summary>
        /// <param name="name"></param>
        /// <param name="sellingGrade">0 being the best seller</param>
        public void SpawnProduct(string name, int sellingGrade)
        {
            Instantiate(Resources.Load(name),
                spawnPoint[sellingGrade].transform.position, spawnPoint[sellingGrade].transform.rotation);
        }
    }
    
  3. Unity로 돌아가기 전에 Visual Studio에서 변경 내용을 저장해야 합니다.

  4. Unity 편집기에서 ShelfKeeper 클래스가 아래와 같이 표시되는지 검사.

    참조 대상이 날짜 텍스트 메시 및 시간 텍스트 메시로 설정되어 있음을 보여 주는 Shelf Keeper 클래스의 스크린샷

    중요

    스크립트에 참조 대상(예: 날짜(텍스트 메시))이 없는 경우 해당 개체를 계층 패널의 대상 필드로 끌어 놓기만 하면 됩니다. 필요한 경우 아래를 참조하세요.

    1. ShelfKeeper 구성 요소 스크립트 내에서 생성 지점 배열을 마우스 왼쪽 단추로 클릭하여 엽니다. 배열의 크기를 나타내는 Size라는 하위 섹션이 나타납니다. 크기 옆에 있는 텍스트 상자에 3을 입력하고 Enter 키를 누르면 아래에 3개의 슬롯이 만들어집니다.

    2. Hierarchy 내에서 시간 표시 개체를 확장합니다(옆에 있는 화살표를 마우스 왼쪽 단추로 클릭). 그런 다음, 관리자가 해당 정보를 표시할 수 있도록 계층 내에서주 카메라를 클릭합니다.

    3. 계층 패널에서 기본 카메라를 선택합니다. Hierarchy PanelDateTime 개체를 ShelfKeeper 구성 요소의 주 카메라검사기 내의 날짜 텍스트시간 텍스트 슬롯으로 끌어옵니다.

    4. 이미지와 같이 계층 구조 패널(Shelf 개체 아래)에서 Spawn Point 배열 아래의 3요소 참조 대상으로 Spawn Points를 끕니다.

      날짜, 시간 및 세 개의 생성 지점 메뉴 항목이 Shelf Keeper 클래스에 있음을 보여 주는 계층 구조 패널의 스크린샷

9장 - ProductPrediction 클래스 만들기

만들려는 다음 클래스는 ProductPrediction 클래스입니다.

이 클래스는 다음을 담당합니다.

  • Machine Learning Service instance 쿼리하여 현재 날짜 및 시간을 제공합니다.

  • JSON 응답을 사용 가능한 데이터로 역직렬화합니다.

  • 데이터를 해석하고 3개의 권장 제품을 검색합니다.

  • ShelfKeeper 클래스 메서드를 호출하여 장면에 데이터를 표시합니다.

이 클래스를 만들려면 다음을 수행합니다.

  1. 프로젝트 패널스크립트 폴더로 이동합니다.

  2. C# 스크립트만들기> 폴더 내부를 마우스 오른쪽 단추로 클릭합니다. ProductPrediction 스크립트를 호출합니다.

  3. ProductPrediction 스크립트를 두 번 클릭하여 Visual Studio 2017에서 엽니다.

  4. 파일 수정이 감지됨 대화 상자가 나타나면 *솔루션 다시 로드를 클릭합니다.

  5. ProductPrediction 클래스의 맨 위에 다음 네임스페이스를 추가합니다.

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;
    using Newtonsoft.Json;
    using UnityEngine.Networking;
    using System.Runtime.Serialization;
    using System.Collections;
    
  6. ProductPrediction 클래스 내에 여러 중첩 클래스로 구성된 다음 두 개체를 삽입합니다. 이러한 클래스는 Machine Learning Service에 대한 JSON을 직렬화하고 역직렬화하는 데 사용됩니다.

        /// <summary>
        /// This object represents the Prediction request
        /// It host the day of the year and hour of the day
        /// The product must be left blank when serialising
        /// </summary>
        public class RootObject
        {
            public Inputs Inputs { get; set; }
        }
    
        public class Inputs
        {
            public Input1 input1 { get; set; }
        }
    
        public class Input1
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
        /// <summary>
        /// This object containing the deserialised Prediction result
        /// It host the list of the products
        /// and the likelihood of them being sold at current date and time
        /// </summary>
        public class Prediction
        {
            public Results Results { get; set; }
        }
    
        public class Results
        {
            public Output1 output1;
        }
    
        public class Output1
        {
            public string type;
            public Value value;
        }
    
        public class Value
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
  7. 그런 다음, 이전 코드 위에 다음 변수를 추가합니다(JSON 관련 코드가 스크립트의 맨 아래에 있고 다른 모든 코드 아래에 있고 방해가 되도록).

        /// <summary>
        /// The 'Primary Key' from your Machine Learning Portal
        /// </summary>
        private string authKey = "-- Insert your service authentication key here --";
    
        /// <summary>
        /// The 'Request-Response' Service Endpoint from your Machine Learning Portal
        /// </summary>
        private string serviceEndpoint = "-- Insert your service endpoint here --";
    
        /// <summary>
        /// The Hour as set in Windows
        /// </summary>
        private string thisHour;
    
        /// <summary>
        /// The Day, as set in Windows
        /// </summary>
        private string thisDay;
    
        /// <summary>
        /// The Month, as set in Windows
        /// </summary>
        private string thisMonth;
    
        /// <summary>
        /// The Numeric Day from current Date Conversion
        /// </summary>
        private string dayOfTheYear;
    
        /// <summary>
        /// Dictionary for holding the first (or default) provided prediction 
        /// from the Machine Learning Experiment
        /// </summary>    
        private Dictionary<string, string> predictionDictionary;
    
        /// <summary>
        /// List for holding product prediction with name and scores
        /// </summary>
        private List<KeyValuePair<string, double>> keyValueList;
    

    중요

    Machine Learning 포털의 기본 키요청-응답 엔드포인트를 여기에 있는 변수에 삽입해야 합니다. 아래 이미지는 키와 엔드포인트를 가져온 위치를 보여 줍니다.

    AP 도움말 페이지 아래에 슬래시 응답 요청 링크를 보여 주는 Microsoft Azure Machine Learning Studio의 스크린샷.

    강조 표시된 POST 요청  URL을 보여 주는 요청 응답 AP I 설명서 페이지의 스크린샷.

  8. Start() 메서드 내에 이 코드를 삽입합니다. Start() 메서드는 클래스가 초기화할 때 호출됩니다.

        void Start()
        {
            // Call to get the current date and time as set in Windows
            GetTodayDateAndTime();
    
            // Call to set the HOUR in the UI
            ShelfKeeper.instance.SetTime(thisHour);
    
            // Call to set the DATE in the UI
            ShelfKeeper.instance.SetDate(thisDay, thisMonth);
    
            // Run the method to Get Predication from Azure Machine Learning
            StartCoroutine(GetPrediction(thisHour, dayOfTheYear));
        }
    
  9. 다음은 Windows에서 날짜와 시간을 수집하고 Machine Learning 실험에서 테이블에 저장된 데이터와 비교하는 데 사용할 수 있는 형식으로 변환하는 방법입니다.

        /// <summary>
        /// Get current date and hour
        /// </summary>
        private void GetTodayDateAndTime()
        {
            // Get today date and time
            DateTime todayDate = DateTime.Now;
    
            // Extrapolate the HOUR
            thisHour = todayDate.Hour.ToString();
    
            // Extrapolate the DATE
            thisDay = todayDate.Day.ToString();
            thisMonth = todayDate.ToString("MMM");
    
            // Extrapolate the day of the year
            dayOfTheYear = todayDate.DayOfYear.ToString();
        }
    
  10. Update() 메서드는 이 클래스에서 사용하지 않으므로 삭제할 수 있습니다.

  11. 현재 날짜와 시간을 Machine Learning 엔드포인트에 전달하고 JSON 형식으로 응답을 수신하는 다음 메서드를 추가합니다.

        private IEnumerator GetPrediction(string timeOfDay, string dayOfYear)
        {
            // Populate the request object 
            // Using current day of the year and hour of the day
            RootObject ro = new RootObject
            {
                Inputs = new Inputs
                {
                    input1 = new Input1
                    {
                        ColumnNames = new List<string>
                        {
                            "day",
                            "hour",
                        "product"
                        },
                        Values = new List<List<string>>()
                    }
                }
            };
    
            List<string> l = new List<string>
            {
                dayOfYear,
                timeOfDay,
                ""
            };
    
            ro.Inputs.input1.Values.Add(l);
    
            Debug.LogFormat("Score request built");
    
            // Serialize the request
            string json = JsonConvert.SerializeObject(ro);
    
            using (UnityWebRequest www = UnityWebRequest.Post(serviceEndpoint, "POST"))
            {
                byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json);
                www.uploadHandler = new UploadHandlerRaw(jsonToSend);
    
                www.downloadHandler = new DownloadHandlerBuffer();
                www.SetRequestHeader("Authorization", "Bearer " + authKey);
                www.SetRequestHeader("Content-Type", "application/json");
                www.SetRequestHeader("Accept", "application/json");
    
                yield return www.SendWebRequest();
                string response = www.downloadHandler.text;
    
                // Deserialize the response
                DataContractSerializer serializer;
                serializer = new DataContractSerializer(typeof(string));
                DeserialiseJsonResponse(response);
            }
        }
    
  12. JSON 응답을 역직렬화하고 역직렬화 결과를 ShelfKeeper 클래스에 전달하는 다음 메서드를 추가합니다. 이 결과는 현재 날짜 및 시간에 가장 많이 판매될 것으로 예측되는 세 항목의 이름이 됩니다. 아래 코드를 이전 메서드 아래의 ProductPrediction 클래스에 삽입합니다.

        /// <summary>
        /// Deserialize the response received from the Machine Learning portal
        /// </summary>
        public void DeserialiseJsonResponse(string jsonResponse)
        {
            // Deserialize JSON
            Prediction prediction = JsonConvert.DeserializeObject<Prediction>(jsonResponse);
            predictionDictionary = new Dictionary<string, string>();
    
            for (int i = 0; i < prediction.Results.output1.value.ColumnNames.Count; i++)
            {
                if (prediction.Results.output1.value.Values[0][i] != null)
                {
                    predictionDictionary.Add(prediction.Results.output1.value.ColumnNames[i], prediction.Results.output1.value.Values[0][i]);
                }
            }
    
            keyValueList = new List<KeyValuePair<string, double>>();
    
            // Strip all non-results, by adding only items of interest to the scoreList
            for (int i = 0; i < predictionDictionary.Count; i++)
            {
                KeyValuePair<string, string> pair = predictionDictionary.ElementAt(i);
                if (pair.Key.StartsWith("Scored Probabilities"))
                {
                    // Parse string as double then simplify the string key so to only have the item name
                    double scorefloat = 0f;
                    double.TryParse(pair.Value, out scorefloat);
                    string simplifiedName =
                        pair.Key.Replace("\"", "").Replace("Scored Probabilities for Class", "").Trim();
                    keyValueList.Add(new KeyValuePair<string, double>(simplifiedName, scorefloat));
                }
            }
    
            // Sort Predictions (results will be lowest to highest)
            keyValueList.Sort((x, y) => y.Value.CompareTo(x.Value));
    
            // Spawn the top three items, from the keyValueList, which we have sorted
            for (int i = 0; i < 3; i++)
            {
                ShelfKeeper.instance.SpawnProduct(keyValueList[i].Key, i);
            }
    
            // Clear lists in case of reuse
            keyValueList.Clear();
            predictionDictionary.Clear();
        }
    
  13. Visual Studio를 저장하고 Unity로 돌아갑니다.

  14. Script 폴더의 ProductPrediction 클래스 스크립트를 Main Camera 개체로 끌어옵니다.

  15. 장면 및 프로젝트 파일>저장 장면/파일>저장 프로젝트를 저장합니다.

10장 - UWP 솔루션 빌드

이제 독립 실행형 애플리케이션으로 실행할 수 있도록 프로젝트를 UWP 솔루션으로 빌드해야 합니다.

빌드하려면 다음을 수행합니다.

  1. 파일> 저장 장면을 클릭하여 현재 장면을저장합니다.

  2. 파일>빌드 설정으로 이동

  3. Unity C# 프로젝트(빌드가 완료된 후 클래스를 편집할 수 있기 때문에 중요함)라는 확인란을 선택합니다.

  4. 열린 장면 추가를 클릭합니다.

  5. 빌드를 클릭한 다음

    유니버설 Windows 플랫폼 메뉴 항목이 강조 표시된 빌드 설정 대화 상자의 스크린샷

  6. 솔루션을 빌드할 폴더를 선택하라는 메시지가 표시됩니다.

  7. BUILDS 폴더를 만들고 해당 폴더 내에 원하는 적절한 이름을 가진 다른 폴더를 만듭니다.

  8. 새 폴더를 클릭한 다음 폴더 선택을 클릭하여 해당 위치에서 빌드를 시작합니다.

    강조 표시된 빌드 폴더를 보여 파일 탐색기 창의 스크린샷

    빌드 폴더의 내용과 강조 표시된 폴더 선택 단추를 보여주는 파일 탐색기 창의 스크린샷

  9. Unity 빌드가 완료되면(다소 시간이 걸릴 수 있음) 빌드 위치에서 파일 탐색기 창이 열립니다(작업 표시줄을 검사 항상 창 위에 표시되지는 않지만 새 창이 추가되었음을 알려 줍니다).

11장 - 애플리케이션 배포

애플리케이션을 배포하려면 다음을 수행합니다.

  1. 새 Unity 빌드( App 폴더)로 이동하여 Visual Studio를 사용하여 솔루션 파일을 엽니다.

  2. Visual Studio가 열려 있으면 솔루션 탐색기(Visual Studio 오른쪽에 있음)에서 MachineLearningLab_Build 솔루션을 마우스 오른쪽 단추로 클릭한 다음 NuGet 패키지 복원을 클릭하여 수행할 수 있는 NuGet 패키지를 복원해야 합니다.

    강조 표시된 Nu 패키지 가져오기 복원 메뉴 항목을 보여주는 Visual Studio 창의 스크린샷.

  3. 솔루션 구성에서 디버그를 선택합니다.

  4. 솔루션 플랫폼에서 x86, 로컬 머신을 선택합니다.

    Microsoft HoloLens 경우 컴퓨터에 연결되지 않도록 원격 컴퓨터로 설정하는 것이 더 쉬울 수 있습니다. 하지만 다음을 수행해야 합니다.

    • 설정 > 네트워크 & 인터넷 >> Wi-Fi 고급 옵션 내에서 찾을 수 있는 HoloLens의 IP 주소를 알고 있습니다. IPv4는 사용해야 하는 주소입니다.
    • 개발자 모드가 켜지도록 합니다. 개발자를 위한 설정 > 업데이트 & 보안 > 에서 찾을 수 있습니다.

    솔루션 플랫폼에서 로컬 머신이 선택되었음을 보여 주는 Microsoft Visual Studio 메뉴의 스크린샷.

  5. 빌드 메뉴로 이동하고 솔루션 배포를 클릭하여 애플리케이션을 PC에 테스트용으로 로드합니다.

  6. 이제 앱이 설치된 앱 목록에 표시되고 시작할 준비가 되었습니다.

Mixed Reality 애플리케이션을 실행하면 Unity 장면에 설정된 벤치가 표시되고 초기화부터 Azure 내에서 설정한 데이터가 페치됩니다. 데이터는 애플리케이션 내에서 역직렬화되며, 현재 날짜 및 시간에 대한 세 가지 상위 결과가 벤치에 있는 세 가지 모델로 시각적으로 제공됩니다.

완성된 Machine Learning 애플리케이션

축하합니다. Azure Machine Learning을 활용하여 데이터 예측을 수행하고 장면에 표시하는 혼합 현실 앱을 빌드했습니다.

3개의 개체가 있는 선반과 2월 23일 15시 텍스트가 있는 카드 보여 주는 Microsoft Visual Studio 창의 스크린샷.

연습

연습 1

애플리케이션의 정렬 순서를 실험하고 이 데이터가 잠재적으로 유용할 수 있으므로 세 가지 아래쪽 예측이 선반에 표시됩니다.

연습 2

Azure 테이블을 사용하면 새 테이블이 날씨 정보로 채워지고 데이터를 사용하여 새 실험을 만듭니다.