注意

Mixed Reality Academy チュートリアルは、HoloLens (第1世代) と Mixed Reality イマーシブヘッドセットを念頭に置いて設計されています。The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. そのため、これらのデバイスの開発に関するガイダンスをまだ探している開発者には、これらのチュートリアルを残しておくことが重要です。As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. これらのチュートリアルは いない 最新のツールセットや相互作用が使用されている HoloLens 2 で更新されます。These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. サポートされているデバイスでの作業を続行するために管理されます。They will be maintained to continue working on the supported devices. 今後、HoloLens 2 向けの開発方法を示す新しい一連のチュートリアルが掲載されています。There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. この通知は、これらのチュートリアルが投稿されたときのリンクと共に更新されます。This notice will be updated with a link to those tutorials when they are posted.

MR と Azure 313:IoT Hub サービスMR and Azure 313: IoT Hub Service

コースの結果

このコースでは、Ubuntu 16.4 オペレーティングシステムを実行している仮想マシンにAzure IoT Hub サービスを実装する方法について説明します。In this course, you will learn how to implement an Azure IoT Hub Service on a virtual machine running the Ubuntu 16.4 operating system. Azure Function Appは、Ubuntu VM からメッセージを受信するために使用され、その結果をazure Table Service内に格納します。An Azure Function App will then be used to receive messages from your Ubuntu VM, and store the result within an Azure Table Service. その後、Microsoft HoloLens またはイマーシブ (VR) ヘッドセットのPower BIを使用して、このデータを表示できるようになります。You will then be able to view this data using Power BI on Microsoft HoloLens or immersive (VR) headset.

このコースの内容は IoT Edge デバイスに適用されますが、このコースでは、物理エッジデバイスへのアクセスを必要としないように、仮想マシン環境に焦点が当てはまります。The content of this course is applicable to IoT Edge devices, though for the purpose of this course, the focus will be on a virtual machine environment, so that access to a physical Edge device is not necessary.

このコースを完了すると、次のことを学習できます。By completing this course, you will learn to:

  • IoT Edge モジュールを仮想マシン (UBUNTU 16 OS) にデプロイします。これは、IoT デバイスを表します。Deploy an IoT Edge module to a Virtual Machine (Ubuntu 16 OS), which will represent your IoT device.
  • コンテナーに格納されているイメージを分析するコードを使用して、 Azure Custom Vision の Azure Azure の "Azure" Azure "のモデルを Edge モジュールに追加します。Add an Azure Custom Vision Tensorflow Model to the Edge module, with code that will analyze images stored in the container.
  • 分析結果メッセージをIoT Hub サービスに返すようにモジュールを設定します。Set up the module to send the analysis result message back to your IoT Hub Service.
  • Azure Function Appを使用して、 azure テーブル内にメッセージを格納します。Use an Azure Function App to store the message within an Azure Table.
  • 保存されたメッセージを収集してレポートを作成するようにPower BIを設定します。Set up Power BI to collect the stored message and create a report.
  • Power BI内で IoT メッセージデータを視覚化します。Visualize your IoT message data within Power BI.

使用するサービスには次のものがあります。The Services you will use include:

  • Azure IoT Hubは、開発者が IoT 資産の接続、監視、管理を行うことができるようにする Microsoft Azure サービスです。Azure IoT Hub is a Microsoft Azure Service which allows developers to connect, monitor, and manage, IoT assets. 詳細については、 Azure IoT Hub サービスに関するページを参照してください。For more information, visit the Azure IoT Hub Service page.

  • Azure Container Registryは、さまざまな種類のコンテナーについて、開発者がコンテナーイメージを格納できるようにする、Microsoft Azure サービスです。Azure Container Registry is a Microsoft Azure Service which allows developers to store container images, for various types of containers. 詳細については、 Azure Container Registry サービスに関するページを参照してください。For more information, visit the Azure Container Registry Service page.

  • Azure Function Appは Microsoft Azure サービスであり、開発者は azure で小さなコードである "functions" を実行できます。Azure Function App is a Microsoft Azure Service, which allows developers to run small pieces of code, 'functions', in Azure. これにより、ローカルアプリケーションではなく、クラウドに作業を委任することができます。これには多くのメリットがあります。This provides a way to delegate work to the cloud, rather than your local application, which can have many benefits. Azure Functionsは、C#、F#、node.js、Java、PHP など、いくつかの開発言語をサポートしています。Azure Functions supports several development languages, including C#, F#, Node.js, Java, and PHP. 詳細については、 Azure Functionsのページを参照してください。For more information, visit the Azure Functions page.

  • Azure Storage:テーブルは、開発者が構造化された SQL 以外のデータをクラウドに格納し、どこからでも簡単にアクセスできるようにする Microsoft Azure サービスです。Azure Storage: Tables is a Microsoft Azure Service, which allows developers to store structured, non-SQL, data in the cloud, making it easily accessible anywhere. このサービスでは、スキーマのない設計が非常に優れているため、必要に応じてテーブルを進化させることができるため、非常に柔軟性があります。The Service boasts a schema-less design, allowing for the evolution of tables as needed, and thus is very flexible. 詳細については、 Azure のテーブルに関するページを参照してください。For more information, visit the Azure Tables page

このコースでは、IoT Hub サービスを設定して使用する方法と、デバイスによって提供される応答を視覚化する方法について説明します。This course will teach you how to setup and use the IoT Hub Service, and then visualize a response provided by a device. これらの概念は、作成するカスタム IoT Hub サービスのセットアップに適用する必要があります。It will be up to you to apply these concepts to a custom IoT Hub Service setup, which you might be building.

デバイスのサポートDevice support

までCourse HoloLensHoloLens イマーシブ ヘッドセットImmersive headsets
MR と Azure 313:IoT Hub サービスMR and Azure 313: IoT Hub Service ✔️✔️ ✔️✔️

必須コンポーネントPrerequisites

Microsoft HoloLens など、mixed reality を使用した開発に関する最新の前提条件については、ツールのインストールに関する記事をご覧ください。For the most up-to-date prerequisites for developing with mixed reality, including with the Microsoft HoloLens, visit the Install the tools article.

注意

このチュートリアルは、Python の基本的な経験がある開発者向けに設計されています。This tutorial is designed for developers who have basic experience with Python. また、このドキュメントに記載されている前提条件と記述に記載されている手順は、作成時にテストおよび検証された内容 (2018 年7月) を表しています。Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (July 2018). ツールのインストール」の記事に記載されているように、最新のソフトウェアを自由に使用できます。ただし、このコースの情報は、以下に示したソフトウェアより新しいソフトウェアでは完全に一致するとは限りません。You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you will find in newer software than that listed below.

次のハードウェアとソフトウェアが必要です。The following hardware and software is required:

  • Windows 10 の作成者の更新プログラム (またはそれ以降)、開発者モードが有効Windows 10 Fall Creators Update (or later), Developer Mode enabled

    警告

    Windows 10 Home Edition で Hyper-v を使用して仮想マシンを実行することはできません。You cannot run a Virtual Machine using Hyper-V on Windows 10 Home Edition.

  • Windows 10 SDK (最新バージョン)Windows 10 SDK (latest version)

  • HoloLens、開発者モードが有効A HoloLens, Developer Mode enabled

  • Visual Studio 2017.15.4 (Azure Cloud Explorer へのアクセスにのみ使用)Visual Studio 2017.15.4 (Only used to access the Azure Cloud Explorer)

  • Azure および IoT Hub サービス用のインターネットアクセス。Internet Access for Azure, and for IoT Hub Service. 詳細については、こちらのIoT Hub サービスへのリンクに関するページを参照してください。For more information, please follow this link to IoT Hub Service page

  • 機械学習モデル。A machine learning model. 独自のモデルを使用する準備ができていない場合は、このコースで提供されているモデルを使用できます。If you do not have your own ready to use model, you can use the model provided with this course.

  • Windows 10 開発用コンピューターでhyper-vソフトウェアが有効になっています。Hyper-V software enabled on your Windows 10 development machine.

  • Ubuntu (16.4 または 18.4) を実行している仮想マシンを開発用コンピューターで実行するか、または Linux を実行する別のコンピューター (Ubuntu 16.4 または 18.4) を使用することができます。A Virtual Machine running Ubuntu (16.4 or 18.4), running on your development machine or alternatively you can use a separate computer running Linux (Ubuntu 16.4 or 18.4). Hyper-v を使用して Windows 上で VM を作成する方法の詳細については、 「開始する前に」の章を参照してください。(https://docs.microsoft.com/virtualization/hyper-v-on-windows/quick-start/quick-create-virtual-machine).You can find more information on how to create a VM on Windows using Hyper-V in the "Before you Start" chapter.(https://docs.microsoft.com/virtualization/hyper-v-on-windows/quick-start/quick-create-virtual-machine).

開始前の準備Before you start

  1. HoloLens をセットアップしてテストします。Set up and test your HoloLens. HoloLens のセットアップをサポートする必要がある場合は、 hololens セットアップに関する記事にアクセスしてください。If you need support setting up your HoloLens, make sure to visit the HoloLens setup article.
  2. 新しい HoloLens アプリの開発を開始するときは、調整センサーのチューニングを実行することをお勧めします (ユーザーごとにこれらのタスクを実行するのに役立つ場合があります)。It is a good idea to perform Calibration and Sensor Tuning when beginning developing a new HoloLens app (sometimes it can help to perform those tasks for each user).

調整の詳細については、 「HoloLens の調整に関する記事へのリンク」を参照してください。For help on Calibration, please follow this link to the HoloLens Calibration article.

センサーチューニングの詳細については、 HoloLens センサーチューニングに関する記事へのリンクを参照してください。For help on Sensor Tuning, please follow this link to the HoloLens Sensor Tuning article.

  1. Hyper-vを使用してUbuntu 仮想マシンをセットアップします。Set up your Ubuntu Virtual Machine using Hyper-V. このプロセスには、次のリソースが役立ちます。The following resources will help you with the process.

    1. まず、このリンクに従って Ubuntu 16.04.4 LTS (Xenial Xerus) ISO をダウンロードします。First, follow this link to download the Ubuntu 16.04.4 LTS (Xenial Xerus) ISO. 64ビットPC (AMD64) デスクトップイメージを選択します。Select the 64-bit PC (AMD64) desktop image.
    2. Windows 10 コンピューターでhyper-vが有効になっていることを確認します。Make sure Hyper-V is enabled on your Windows 10 machine. Windows 10 で hyper-v をインストールして有効にする方法については、こちらのリンクを参照してください。You can follow this link for guidance on installing and enabling Hyper-V on Windows 10.
    3. Hyper-v を起動し、新しい Ubuntu VM を作成します。Start Hyper-V and create a new Ubuntu VM. Hyper-v を使用して VM を作成する手順については、こちらのリンクを参照してください。You can follow this link for a step by step guide on how to create a VM with Hyper-V. [起動可能なイメージファイルからオペレーティングシステムをインストールする] に要求された場合は、前の手順でダウンロードしたUbuntu ISOを選択します。When requested to "Install an operating system from a bootable image file", select the Ubuntu ISO you have download earlier.

    注意

    Hyper-v の簡易作成を使用することは推奨されません。Using Hyper-V Quick Create is not suggested.

第1章: Custom Vision モデルを取得するChapter 1 - Retrieve the Custom Vision model

このコースでは、イメージからキーボードとマウスを検出する既成のCustom Vision モデルにアクセスできます。With this course you will have access to a pre-built Custom Vision model that detects keyboards and mice from images. これを使用する場合は、第2章に進みます。If you use this, proceed to Chapter 2.

ただし、独自の Custom Vision モデルを使用する場合は、次の手順に従うことができます。However, you can follow these steps if you wish to use your own Custom Vision model:

  1. Custom Vision プロジェクトで、 [パフォーマンス] タブにアクセスします。In your Custom Vision Project go to the Performance tab.

    警告

    モデルをエクスポートするには、モデルでコンパクトドメインを使用する必要があります。Your model must use a compact domain, to export the model. モデルドメインは、プロジェクトの設定で変更できます。You can change your models domain in the settings for your project.

    [パフォーマンス] タブ

  2. エクスポートするイテレーションを選択し、 [エクスポート] をクリックします。Select the Iteration you want to export and click on Export. ブレードが表示されます。A blade will appear.

    ブレードのエクスポート

  3. ブレードで [Docker File] をクリックします。In the blade click Docker File.

    docker の選択

  4. ドロップダウンメニューの [Linux] をクリックし、 [ダウンロード] をクリックします。Click Linux in the drop-down menu and then click on Download.

    [ダウンロード] をクリック

  5. コンテンツを解凍します。Unzip the content. このコースは、このコースの後半で使用します。You will use it later in this course.

Chapter 2-Container Registry サービスChapter 2 - The Container Registry Service

Container Registry サービスは、コンテナーをホストするために使用されるリポジトリです。The Container Registry Service is the repository used to host your containers.

このコースで構築して使用するIoT Hub サービスは、 Container Registry サービスを参照して、エッジデバイスにデプロイするコンテナーを取得します。The IoT Hub Service that you will build and use in this course, refers to Container Registry Service to obtain the containers to deploy in your Edge Device.

  1. 最初に、 Azure Portal へのリンクに従って、資格情報でログインします。First, follow this link to the Azure Portal, and login with your credentials.

  2. リソースの作成」に進んで、 Container Registryを探します。Go to Create a resource and look for Container Registry.

    コンテナーレジストリ

  3. [作成] をクリックします。Click on Create.

  4. サービスセットアップパラメーターを設定します。Set the Service setup parameters:

    1. プロジェクトの名前を挿入します。この例では、 IoTCRegistryという名前です。Insert a name for your project, In this example its called IoTCRegistry.

    2. リソースグループを選択するか、新しいリソースグループを作成します。Choose a Resource Group or create a new one. リソースグループを使用すると、Azure 資産のコレクションの監視、アクセスの制御、プロビジョニング、管理を行うことができます。A resource group provides a way to monitor, control access, provision, and manage, billing for a collection of Azure assets. 1つのプロジェクトに関連付けられているすべての Azure サービス (たとえば、これらのコースなど) を共通のリソースグループに保持することをお勧めします。It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

    3. サービスの場所を設定します。Set the location of the Service.

    4. 有効にするには、管理者ユーザーを設定します。Set Admin user to Enable.

    5. SKUBasicに設定します。Set SKU to Basic.

  5. [作成] をクリックし、サービスが作成されるまで待ちます。Click Create and wait for the Services to be created.

  6. Container Registryが正常に作成されたことを知らせる通知が表示されたら、 [リソースへのアクセス] をクリックして、サービスページにリダイレクトします。Once the notification pops up informing you of the successful creation of the Container Registry, click on Go to resource to be redirected to your Service page.

  7. [サービスのContainer Registry ] ページで、 [アクセスキー] をクリックします。In the Container Registry Service page, click on Access keys.

  8. 次のパラメーターのメモを控えておきます (メモ帳を使用できます)。Take note (you could use your Notepad) of the following parameters:

    1. ログインサーバーLogin Server
    2. UsernameUsername
    3. PasswordPassword

第3章-IoT Hub サービスChapter 3 - The IoT Hub Service

次に、 IoT Hub サービスの作成とセットアップを開始します。Now you will begin the creation and setup of your IoT Hub Service.

  1. まだサインインしていない場合は、 Azure Portalにログインします。If not already signed in, log into the Azure Portal.

  2. ログインしたら、左上隅にある [リソースの作成] をクリックし、 IoT Hubを検索して、 Enter キーを押します。Once logged in, click on Create a resource in the top left corner, and search for IoT Hub, and click Enter.

ストレージアカウントの検索

  1. 新しいページには、ストレージアカウントサービスの説明が表示されます。The new page will provide a description of the Storage account Service. このプロンプトの左下にある [作成] ボタンをクリックして、このサービスのインスタンスを作成します。At the bottom left of this prompt, click the Create button, to create an instance of this Service.

    ストレージインスタンスの作成

  2. [作成] をクリックすると、パネルが表示されます。Once you have clicked on Create, a panel will appear:

    1. リソースグループを選択するか、新しいリソースグループを作成します。Choose a Resource Group or create a new one. リソースグループは、Azure 資産のコレクションの課金を監視、制御する方法を提供します。A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. 1つのプロジェクトに関連付けられているすべての Azure サービス (たとえば、これらのコースなど) を共通のリソースグループに保持することをお勧めします。It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

      Azure リソースグループの詳細については、リソースグループの管理方法に関するリンクを参照してください。If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    2. 適切な場所を選択します (このコースで作成するすべてのサービスで同じ場所を使用します)。Select an appropriate Location (Use the same location across all the Services you create in this course).

    3. このサービスインスタンスに必要な名前を挿入します。Insert your desired Name for this Service instance.

  3. ページの下部にある [次へ ] をクリックします。サイズとスケールOn the bottom of the page click on Next: Size and scale.

    ストレージインスタンスの作成

  4. このページで、価格とスケールレベルを選択します (これが初めての IoT Hub サービスインスタンスの場合は、free レベルをご利用いただけます)。In this page, select your Pricing and scale tier (if this is your first IoT Hub Service instance, a free tier should be available to you).

  5. [レビューと作成] をクリックします。Click on Review + Create.

    ストレージインスタンスの作成

  6. 設定を確認し、 [作成] をクリックします。Review your settings and click on Create.

    ストレージインスタンスの作成

  7. IoT Hubサービスが正常に作成されたことを知らせる通知が表示されたら、 [リソースへのアクセス] をクリックして、サービスページにリダイレクトします。Once the notification pops up informing you of the successful creation of the IoT Hub Service, click on Go to resource to be redirected to your Service page.

    ストレージインスタンスの作成

  8. [デバイスの自動管理] が表示されるまで左側のサイドパネルをスクロールし、 IoT Edgeをクリックします。Scroll the side panel on the left until you see Automatic Device Management, the click on IoT Edge.

    ストレージインスタンスの作成

  9. 右側に表示されるウィンドウで、 [IoT Edge デバイスの追加] をクリックします。In the window that appears to the right, click on Add IoT Edge Device. ブレードが右側に表示されます。A blade will appear to the right.

  10. ブレードで、新しいデバイスにデバイス ID (任意の名前) を入力します。In the blade, provide your new device a Device ID (a name of your choice). 次に、 [保存] をクリックします。Then, click Save. 自動生成が行われた場合、プライマリ キーとセカンダリキーは自動的に生成されます。The Primary and Secondary Keys will auto generate, if you have Auto Generate ticked.

    ストレージインスタンスの作成

  11. 新しいデバイスが一覧表示される [ IoT Edge デバイス] セクションに戻ります。You will navigate back to the IoT Edge Devices section, where your new device will be listed. 新しいデバイス (下の図の赤で囲まれています) をクリックします。Click on your new device (outlined in red in the below image).

    ストレージインスタンスの作成

  12. 表示される [デバイスの詳細] ページで、接続文字列(主キー) のコピーを取得します。On the Device Details page that appears, take a copy of the Connection String (primary key).

    ストレージインスタンスの作成

  13. 左側のパネルに戻り、[共有アクセスポリシー] をクリックして開きます。Go back to the panel on the left, and click Shared access policies, to open it.

  14. 表示されるページで [iothubowner] をクリックすると、画面の右側にブレードが表示されます。On the page that appears, click iothubowner, and a blade will appear to the right of the screen.

  15. 接続文字列 (主キー) のメモ (メモ帳) を書き留めておきます。後でデバイスに接続文字列を設定するときに使用します。Take note (on your Notepad) of the Connection string (primary key), for later use when setting the Connection String to your device.

    ストレージインスタンスの作成

章 4-開発環境の設定Chapter 4 - Setting up the development environment

IoT Hub Edgeのモジュールを作成してデプロイするには、Windows 10 を実行する開発用コンピューターに次のコンポーネントがインストールされている必要があります。In order to create and deploy modules for IoT Hub Edge, you will require the following components installed on your development machine running Windows 10:

  1. Docker for Windows、ダウンロードできるアカウントを作成するように求められます。Docker for Windows, it will ask you to create an account to be able to download.

    docker for windows のダウンロードdownload docker for windows

    重要

    Docker を実行するには、 windows 10 PROEnterprise 14393、またはwindows Server 2016 RTMが必要です。Docker requires Windows 10 PRO, Enterprise 14393, or Windows Server 2016 RTM, to run. 他のバージョンの Windows 10 を実行している場合は、 Docker ツールボックスを使用して docker をインストールできます。If you are running other versions of Windows 10, you can try installing Docker using the Docker Toolbox.

  2. Python 3.6Python 3.6.

    python 3.6 のダウンロードdownload python 3.6

  3. Visual Studio Code (VS Code とも呼ばれます)。Visual Studio Code (also known as VS Code).

    ダウンロード VS Codedownload VS Code

前述のソフトウェアをインストールしたら、コンピューターを再起動する必要があります。After installing the software mentioned above, you will need to restart your machine.

章 5-Ubuntu 環境のセットアップChapter 5 - Setting up the Ubuntu environment

これで、 UBUNTU OS を実行しているデバイスのセットアップに進むことができます。Now you can move on to setting up your device running Ubuntu OS. 次の手順に従って、ボードにコンテナーをデプロイするために必要なソフトウェアをインストールします。Follow the steps below, to install the necessary software, to deploy your containers on your board:

重要

管理者ユーザーとして実行するには、ターミナルコマンドの前に常にsudoを使用する必要があります。You should always precede the terminal commands with sudo to run as admin user. :i.e:

sudo docker \<option> \<command> \<argument>
  1. Ubuntu ターミナルを開き、次のコマンドを使用してpipをインストールします。Open the Ubuntu Terminal, and use the following command to install pip:

    [!ヒント] キーボードショートカットを使用すると、ターミナルを簡単に開くことができます。Ctrl + Alt + T You can open Terminal very easily through using the keyboard shortcut: Ctrl + Alt + T.

        sudo apt-get install python-pip
    
  2. この章では、デバイスのストレージを使用するためのアクセス許可をターミナルで確認するメッセージが表示される場合があります。また、 y/n (yes または no) を入力するには「 y」 と入力し、 enter キーを押して同意します。Throughout this Chapter, you may be prompted, by Terminal, for permission to use your device storage, and for you to input y/n (yes or no), type 'y', and then press the Enter key, to accept.

  3. コマンドが完了したら、次のコマンドを使用してcurlをインストールします。Once that command has completed, use the following command to install curl:

        sudo apt install curl
    
  4. Pipおよびcurlがインストールされたら、次のコマンドを使用してIoT Edge ランタイムをインストールします。これは、ボードにモジュールをデプロイおよび制御するために必要です。Once pip and curl are installed, use the following command to install the IoT Edge runtime, this is necessary to deploy and control the modules on your board:

        curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > ./microsoft-prod.list
    
        sudo cp ./microsoft-prod.list /etc/apt/sources.list.d/
    
        curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    
        sudo cp ./microsoft.gpg /etc/apt/trusted.gpg.d/
    
        sudo apt-get update
    
        sudo apt-get install moby-engine
    
        sudo apt-get install moby-cli
    
        sudo apt-get update
    
        sudo apt-get install iotedge
    
  5. この時点で、 IoT Hub サービスを作成するときにメモしておいた (メモ帳でメモしておいた)デバイス接続文字列を挿入するために、ランタイム構成ファイルを開くように求められます (手順14の章 3)。At this point you will be prompted to open up the runtime config file, to insert the Device Connection String, that you noted down (in your Notepad), when creating the IoT Hub Service (at step 14, of Chapter 3). ターミナルで次の行を実行して、そのファイルを開きます。Run the following line on the terminal to open that file:

        sudo nano /etc/iotedge/config.yaml
    
  6. 次のように、構成の yamlファイルが表示され、編集できるようになります。The config.yaml file will be displayed, ready for you to edit:

    警告

    このファイルが開いたときに、多少紛らわしいことがあります。When this file opens, it may be somewhat confusing. このファイルをターミナル内で編集するテキストが表示されます。You will be text editing this file, within the Terminal itself.

    1. キーボードの方向キーを使用して下にスクロールします (少し下にスクロールして、次の行に移動する必要があります)。Use the arrow keys on your keyboard to scroll down (you will need to scroll down a little way), to reach the line containing":

      「デバイス接続文字列をここに追加>」を参照してください<"<ADD DEVICE CONNECTION STRING HERE>".

    2. 前にメモしたデバイス接続文字列を使用して、角かっこを含めた代替行を指定します。Substitute line, including the brackets, with the Device Connection String you have noted earlier.

  7. 接続文字列を設定した状態で、キーボードのCtrl + Xキーを押してファイルを保存します。With your Connection String in place, on your keyboard, press the Ctrl-X keys to save the file. Y」と入力すると、確認を求めるメッセージが表示されます。次に、 enterキーを押して確認します。It will ask you to confirm by typing Y. Then, press the Enter key, to confirm. 通常のターミナルに戻ります。You will go back to the regular Terminal.

  8. これらのコマンドがすべて正常に実行されると、 IoT Edge ランタイムがインストールされます。Once these commands have all run successfully, you will have installed the IoT Edge Runtime. 初期化されると、デバイスの電源が入るたびにランタイムが自動的に起動し、バックグラウンドで実行され、モジュールがIoT Hub サービスからデプロイされるのを待ちます。Once initialized, the runtime will start on its own every time the device is powered up, and will sit in the background, waiting for modules to be deployed from the IoT Hub Service.

  9. 次のコマンドラインを実行して、 IoT Edge ランタイムを初期化します。Run the following command line to initialize the IoT Edge Runtime:

        sudo systemctl restart iotedge
    

    重要

    Yaml ファイルまたは上記のセットアップに変更を加える場合は、ターミナル内で上記の再起動行をもう一度実行する必要があります。If you make changes to your .yaml file, or the above setup, you will need to run the above restart line again, within Terminal.

  10. 次のコマンドラインを実行して、 IoT Edge ランタイムの状態を確認します。Check the IoT Edge Runtime status by running the following command line. ランタイムは、状態が [アクティブ] (実行中) の緑色のテキストで表示されます。The runtime should appear with the status active (running) in green text.

        sudo systemctl status iotedge
    
  11. Ctrl + Cキーを押して、[状態] ページを終了します。Press the Ctrl-C keys, to exit the status page. 次のコマンドを入力して、 IoT Edge ランタイムがコンテナーを正しくプルしていることを確認できます。You can verify that the IoT Edge Runtime is pulling the containers correctly by typing the following command:

        sudo docker ps
    
  12. 2つのコンテナーを含むリストが表示されます。A list with two (2) containers should appear. これらは、IoT Hub サービス (edgeAgent および edgeHub) によって自動的に作成される既定のモジュールです。These are the default modules that are automatically created by the IoT Hub Service (edgeAgent and edgeHub). 独自のモジュールを作成してデプロイすると、既定のモジュールの下にこの一覧に表示されます。Once you create and deploy your own modules, they will appear in this list, underneath the default ones.

Chapter 6-拡張機能のインストールChapter 6 - Install the extensions

重要

Windows 10 コンピューターでは、次のいくつかの章 (6-9) が実行されます。The next few Chapters (6-9) are to be performed on your Windows 10 machine.

  1. VS Codeを開きます。Open VS Code.

  2. VS Code の左側のバーにある [拡張機能(四角)] ボタンをクリックして、[拡張機能] パネルを開きます。Click on the Extensions (square) button on the left bar of VS Code, to open the Extensions panel.

  3. 次の図に示すように、次の拡張機能を検索してインストールします。Search for, and install, the following extensions (as shown in the image below):

    1. Azure IoT EdgeAzure IoT Edge
    2. Azure IoT ToolkitAzure IoT Toolkit
    3. DockerDocker

    コンテナーを作成する

  4. 拡張機能がインストールされたら、VS Code を閉じてから開き直します。Once the extensions are installed, close and re-open VS Code.

  5. さらに VS Code 開いて、[統合ターミナル表示 > ] に移動します。With VS Code open once more, navigate to View > Integrated terminal.

  6. 次に、 Cookiecutterをインストールします。You will now install Cookiecutter. ターミナルで、次の bash コマンドを実行します。In the terminal run the following bash command:

        pip install --upgrade --user cookiecutter
    

    [!ヒント] このコマンドで問題が発生した場合は、次のようになります。 If you have trouble with this command:

    1. VS Code、またはコンピューターを再起動します。Restart VS Code, and/ or your computer.
    2. VS Code ターミナルを、python のインストールに使用しているもの (特に、python 環境がコンピューターに既にインストールされている場合) に切り替える必要がある場合があります。It might be necessary to switch the VS Code Terminal to the one you have been using to install Python, i.e. Powershell (especially in case the Python environment was already installed on your machine). ターミナルを開いた状態で、ターミナルの右側にドロップダウンメニューが表示されます。With the Terminal open, you will find the drop down menu on the right side of the Terminal. コンテナーを作成するCreate your container
    3. Pythonインストールパスが環境変数としてコンピューターに追加されていることを確認します。Make sure the Python installation path is added as Environment Variable on your machine. Cookiecutter は同じ場所のパスの一部にする必要があります。Cookiecutter should be part of the same location path. 環境変数の詳細については、このリンクに従ってください。Please follow this link for more information on Environment Variables,
  7. Cookiecutterのインストールが完了したら、コンピューターを再起動して、 Cookiecutterがシステムの環境内でコマンドとして認識されるようにします。Once Cookiecutter has finished installing, you should restart your machine, so that Cookiecutter is recognized as a command, within your System's environment.

第7章-コンテナーソリューションを作成するChapter 7 - Create your container solution

この時点で、モジュールを使用してコンテナーを作成し、 Container Registryにプッシュする必要があります。At this point, you need to create the container, with the module, to be pushed into the Container Registry. コンテナーをプッシュしたら、 IoT Hub Edgeサービスを使用して、 IoT Edge ランタイムを実行しているデバイスにデプロイします。Once you have pushed your container, you will use the IoT Hub Edge Service to deploy it to your device, which is running the IoT Edge runtime.

  1. VS Code で、[コマンドパレット表示 > ] をクリックします。From VS Code, click View > Command palette.

  2. パレットで、Azure IoT Edge を検索して実行します。新しい Iot Edge ソリューションIn the palette, search and run Azure IoT Edge: New Iot Edge Solution.

  3. ソリューションを作成する場所を参照します。Browse into a location where you want to create your solution. 場所を受け入れるには、 enterキーを押します。Press the Enter key, to accept the location.

  4. ソリューションに名前を付けます。Give a name to your solution. 入力した名前を確認するには、 enterキーを押します。Press the Enter key, to confirm your provided name.

  5. これで、ソリューションのテンプレートフレームワークを選択するように求められます。Now you will be prompted to choose the template framework for your solution. [Python モジュール] をクリックします。Click Python Module. この選択を確定するには、 enterキーを押します。Press the Enter key, to confirm this choice.

  6. モジュールに名前を付けます。Give a name to your module. Enterキーを押して、モジュールの名前を確認します。Press the Enter key, to confirm the name of your module. 後で使用するため、モジュール名のメモ (メモ帳を使用) を必ず実行してください。Make sure to take a note (with your Notepad) of the module name, as it is used later.

  7. 作成済みのDocker イメージリポジトリアドレスがパレットに表示されます。You will notice a pre-built Docker Image Repository address will appear on the palette. 次のようになります。It will look like:

    localhost: 5000/-モジュールの名前-localhost:5000/-THE NAME OF YOUR MODULE-.

  8. 削除localhost:5000、およびその場所の挿入、Container Registry ログイン サーバーアドレスで、作成するときにメモしておいた、コンテナーレジストリ サービス(手順 8、第 2 章の)。Delete localhost:5000, and in its place insert the Container Registry Login Server address, which you noted when creating the Container Registry Service (in step 8, of Chapter 2). アドレスを確認するには、 enterキーを押します。Press the Enter key, to confirm the address.

  9. この時点で、Python モジュールのテンプレートを含むソリューションが作成され、その構造が画面の左側の [探索] タブ(VS Code) に表示されます。At this point, the solution containing the template for your Python module will be created and its structure will be displayed in the Explore Tab, of VS Code, on the left side of the screen. [探索] タブが開いていない場合は、左側のバーの一番上にあるボタンをクリックして開くことができます。If the Explore Tab is not open, you can open it by clicking the top-most button, in the bar on the left.

    コンテナーを作成する

  10. この章の最後の手順は、をクリックして開く、 .env ファイル、内から、 タブの調査、追加、 Container Registry ユーザー名パスワードします。The last step for this Chapter, is to click and open the .env file, from within the Explore Tab, and add your Container Registry username and password. このファイルは git によって無視されますが、コンテナーを構築すると、 Container Registry サービスにアクセスするための資格情報が設定されます。This file is ignored by git, but on building the container, will set the credentials to access the Container Registry Service.

    コンテナーを作成する

章 8-コンテナーソリューションの編集Chapter 8 - Editing your container solution

次のファイルを更新して、コンテナーソリューションを完成させます。You will now complete the container solution, by updating the following files:

  • .py python スクリプト。 main.py python script.
  • test.txtrequirements.txt.
  • 配置. template. json.deployment.template.json.
  • Dockerfile. amd64Dockerfile.amd64

次に、python スクリプトによって使用されるimagesフォルダーを作成し、 Custom Vision モデルと照合するイメージを確認します。You will then create the images folder, used by the python script to check for images to match against your Custom Vision model. 最後に、モデルを読みやすくするために、ラベル .txtファイルを追加し、モデルとしてモデルのpbファイルを追加します。Lastly, you will add the labels.txt file, to help read your model, and the model.pb file, which is your model.

  1. VS Code 開いた状態で、モジュールフォルダーに移動し、 .py という名前のスクリプトを探します。With VS Code open, navigate to your module folder, and look for the script called main.py. ダブルクリックして開きます。Double-click to open it.

  2. ファイルの内容を削除し、次のコードを挿入します。Delete the content of the file and insert the following code:

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license. See LICENSE file in the project root for
    # full license information.
    
    import random
    import sched, time
    import sys
    import iothub_client
    from iothub_client import IoTHubModuleClient, IoTHubClientError, IoTHubTransportProvider
    from iothub_client import IoTHubMessage, IoTHubMessageDispositionResult, IoTHubError
    import json
    import os
    import tensorflow as tf
    import os
    from PIL import Image
    import numpy as np
    import cv2
    
    # messageTimeout - the maximum time in milliseconds until a message times out.
    # The timeout period starts at IoTHubModuleClient.send_event_async.
    # By default, messages do not expire.
    MESSAGE_TIMEOUT = 10000
    
    # global counters
    RECEIVE_CALLBACKS = 0
    SEND_CALLBACKS = 0
    
    TEMPERATURE_THRESHOLD = 25
    TWIN_CALLBACKS = 0
    
    # Choose HTTP, AMQP or MQTT as transport protocol.  Currently only MQTT is supported.
    PROTOCOL = IoTHubTransportProvider.MQTT
    
    
    # Callback received when the message that we're forwarding is processed.
    def send_confirmation_callback(message, result, user_context):
        global SEND_CALLBACKS
        print ( "Confirmation[%d] received for message with result = %s" % (user_context, result) )
        map_properties = message.properties()
        key_value_pair = map_properties.get_internals()
        print ( "    Properties: %s" % key_value_pair )
        SEND_CALLBACKS += 1
        print ( "    Total calls confirmed: %d" % SEND_CALLBACKS )
    
    
    def convert_to_opencv(image):
        # RGB -> BGR conversion is performed as well.
        r,g,b = np.array(image).T
        opencv_image = np.array([b,g,r]).transpose()
        return opencv_image
    
    def crop_center(img,cropx,cropy):
        h, w = img.shape[:2]
        startx = w//2-(cropx//2)
        starty = h//2-(cropy//2)
        return img[starty:starty+cropy, startx:startx+cropx]
    
    def resize_down_to_1600_max_dim(image):
        h, w = image.shape[:2]
        if (h < 1600 and w < 1600):
            return image
    
        new_size = (1600 * w // h, 1600) if (h > w) else (1600, 1600 * h // w)
        return cv2.resize(image, new_size, interpolation = cv2.INTER_LINEAR)
    
    def resize_to_256_square(image):
        h, w = image.shape[:2]
        return cv2.resize(image, (256, 256), interpolation = cv2.INTER_LINEAR)
    
    def update_orientation(image):
        exif_orientation_tag = 0x0112
        if hasattr(image, '_getexif'):
            exif = image._getexif()
            if (exif != None and exif_orientation_tag in exif):
                orientation = exif.get(exif_orientation_tag, 1)
                # orientation is 1 based, shift to zero based and flip/transpose based on 0-based values
                orientation -= 1
                if orientation >= 4:
                    image = image.transpose(Image.TRANSPOSE)
                if orientation == 2 or orientation == 3 or orientation == 6 or orientation == 7:
                    image = image.transpose(Image.FLIP_TOP_BOTTOM)
                if orientation == 1 or orientation == 2 or orientation == 5 or orientation == 6:
                    image = image.transpose(Image.FLIP_LEFT_RIGHT)
        return image
    
    
    def analyse(hubManager):
    
        messages_sent = 0;
    
        while True:
            #def send_message():
            print ("Load the model into the project")
            # These names are part of the model and cannot be changed.
            output_layer = 'loss:0'
            input_node = 'Placeholder:0'
    
            graph_def = tf.GraphDef()
            labels = []
    
            labels_filename = "labels.txt"
            filename = "model.pb"
    
            # Import the TF graph
            with tf.gfile.FastGFile(filename, 'rb') as f:
                graph_def.ParseFromString(f.read())
                tf.import_graph_def(graph_def, name='')
    
            # Create a list of labels
            with open(labels_filename, 'rt') as lf:
                for l in lf:
                    labels.append(l.strip())
            print ("Model loaded into the project")
    
            results_dic = dict()
    
            # create the JSON to be sent as a message
            json_message = ''
    
            # Iterate through images 
            print ("List of images to analyse:")
            for file in os.listdir('images'):
                print(file)
    
                image = Image.open("images/" + file)
    
                # Update orientation based on EXIF tags, if the file has orientation info.
                image = update_orientation(image)
    
                # Convert to OpenCV format
                image = convert_to_opencv(image)
    
                # If the image has either w or h greater than 1600 we resize it down respecting
                # aspect ratio such that the largest dimension is 1600
                image = resize_down_to_1600_max_dim(image)
    
                # We next get the largest center square
                h, w = image.shape[:2]
                min_dim = min(w,h)
                max_square_image = crop_center(image, min_dim, min_dim)
    
                # Resize that square down to 256x256
                augmented_image = resize_to_256_square(max_square_image)
    
                # The compact models have a network size of 227x227, the model requires this size.
                network_input_size = 227
    
                # Crop the center for the specified network_input_Size
                augmented_image = crop_center(augmented_image, network_input_size, network_input_size)
    
                try:
                    with tf.Session() as sess:     
                        prob_tensor = sess.graph.get_tensor_by_name(output_layer)
                        predictions, = sess.run(prob_tensor, {input_node: [augmented_image] })
                except Exception as identifier:
                    print ("Identifier error: ", identifier)
    
                print ("Print the highest probability label")
                highest_probability_index = np.argmax(predictions)
                print('FINAL RESULT! Classified as: ' + labels[highest_probability_index])
    
                l = labels[highest_probability_index]
    
                results_dic[file] = l
    
                # Or you can print out all of the results mapping labels to probabilities.
                label_index = 0
                for p in predictions:
                    truncated_probablity = np.float64(round(p,8))
                    print (labels[label_index], truncated_probablity)
                    label_index += 1
    
            print("Results dictionary")
            print(results_dic)
    
            json_message = json.dumps(results_dic)
            print("Json result")
            print(json_message)
    
            # Initialize a new message
            message = IoTHubMessage(bytearray(json_message, 'utf8'))
    
            hubManager.send_event_to_output("output1", message, 0)
    
            messages_sent += 1
            print("Message sent! - Total: " + str(messages_sent))      
            print('----------------------------')
    
            # This is the wait time before repeating the analysis
            # Currently set to 10 seconds
            time.sleep(10)
    
    
    class HubManager(object):
    
        def __init__(
                self,
                protocol=IoTHubTransportProvider.MQTT):
            self.client_protocol = protocol
            self.client = IoTHubModuleClient()
            self.client.create_from_environment(protocol)
    
            # set the time until a message times out
            self.client.set_option("messageTimeout", MESSAGE_TIMEOUT)
    
        # Forwards the message received onto the next stage in the process.
        def forward_event_to_output(self, outputQueueName, event, send_context):
            self.client.send_event_async(
                outputQueueName, event, send_confirmation_callback, send_context)
    
        def send_event_to_output(self, outputQueueName, event, send_context):
            self.client.send_event_async(outputQueueName, event, send_confirmation_callback, send_context)
    
    def main(protocol):
        try:
            hub_manager = HubManager(protocol)
            analyse(hub_manager)
            while True:
                time.sleep(1)
    
        except IoTHubError as iothub_error:
            print ( "Unexpected error %s from IoTHub" % iothub_error )
            return
        except KeyboardInterrupt:
            print ( "IoTHubModuleClient sample stopped" )
    
    if __name__ == '__main__':
        main(PROTOCOL)
    
  3. Test.txt」という名前のファイルを開き、その内容を次のように置き換えます。Open the file called requirements.txt, and substitute its content with the following:

    azure-iothub-device-client==1.4.0.0b3
    opencv-python==3.3.1.11
    tensorflow==1.8.0
    pillow==5.1.0
    
  4. 次のガイドラインに従って、 deployment. template. jsonという名前のファイルを開き、その内容を置き換えます。Open the file called deployment.template.json, and substitute its content following the below guideline:

    1. 独自の一意の JSON 構造があるため、(例をコピーするのではなく) 手作業で編集する必要があります。Because you will have your own, unique, JSON structure, you will need to edit it by hand (rather than copying an example). これを簡単に行うには、次の図をガイドとして使用します。To make this easy, use the below image as a guide.

    2. 異なる領域が表示されますが、変更すべきではない領域は黄色で強調表示されます。Areas which will look different to yours, but which you should NOT change are highlighted yellow.

    3. 削除する必要があるセクションは、赤で強調表示されています。Sections which you need to delete, are a highlighted red.

    4. 正しい角かっこを削除し、コンマも削除するように注意してください。Be careful to delete the correct brackets, and also remove the commas.

      コンテナーを作成する

    5. 完成した JSON は次の図のようになります (ただし、独自の違いがあります。ユーザー名/パスワード/モジュール名/モジュール参照)。The completed JSON should look like the following image (though, with your unique differences: username/password/module name/module references):

      コンテナーを作成する

  5. Dockerfile. amd64という名前のファイルを開き、その内容を次のように置き換えます。Open the file called Dockerfile.amd64, and substitute its content with the following:

    FROM ubuntu:xenial
    
    WORKDIR /app
    
    RUN apt-get update && \
        apt-get install -y --no-install-recommends libcurl4-openssl-dev python-pip libboost-python-dev && \
        rm -rf /var/lib/apt/lists/* 
    RUN pip install --upgrade pip
    RUN pip install setuptools
    
    COPY requirements.txt ./
    RUN pip install -r requirements.txt
    
    RUN pip install pillow
    RUN pip install numpy
    
    RUN apt-get update && apt-get install -y \ 
        pkg-config \
        python-dev \ 
        python-opencv \ 
        libopencv-dev \ 
        libav-tools  \ 
        libjpeg-dev \ 
        libpng-dev \ 
        libtiff-dev \ 
        libjasper-dev \ 
        python-numpy \ 
        python-pycurl \ 
        python-opencv
    
    
    RUN pip install opencv-python
    RUN pip install tensorflow
    RUN pip install --upgrade tensorflow
    
    COPY . .
    
    RUN useradd -ms /bin/bash moduleuser
    USER moduleuser
    
    CMD [ "python", "-u", "./main.py" ]
    
    
  6. [モジュール] の下にあるフォルダー (前の例で指定した名前が付いています。さらに下の例では、 python モジュールと呼ばれます) を右クリックし、 [新しいフォルダー] をクリックします。Right-click on the folder beneath modules (it will have the name you provided previously; in the example further down, it is called pythonmodule), and click on New Folder. フォルダーに画像の名前を指定します。Name the folder images.

  7. フォルダー内に、マウスまたはキーボードを含むいくつかのイメージを追加します。Inside the folder, add some images containing mouse or keyboard. これらの画像は、このモデルによって分析されるイメージになります。Those will be the images that will be analyzed by the Tensorflow model.

    警告

    独自のモデルを使用している場合は、独自のモデルデータを反映するように変更する必要があります。If you are using your own model, you will need to change this to reflect your own models data.

  8. 次に、第1章で、以前にダウンロードした (または独自のCustom Vision Serviceから作成した) モデルフォルダーから、ラベル .txtおよびモデルの pbファイルを取得する必要があります。You will now need to retrieve the labels.txt and model.pb files from the model folder, which you previous downloaded (or created from your own Custom Vision Service), in Chapter 1. ファイルを作成したら、他のファイルと共にソリューション内に配置します。Once you have the files, place them within your solution, alongside the other files. 最終的な結果は次の図のようになります。The final result should look like the image below:

    コンテナーを作成する

第9章-ソリューションをコンテナーとしてパッケージ化するChapter 9 - Package the solution as a container

  1. これで、ファイルをコンテナーとして "パッケージ化" し、 Azure Container Registryにプッシュできるようになりました。You are now ready to "package" your files as a container and push it to your Azure Container Registry. VS Code で、統合ターミナル( ` View > integrated terminalまたはCtrl+) を開き、次の行を使用してDockerにログインします (を使用して、コマンドと Azure Container Registry の資格情報 (ACR) ):Within VS Code, open the Integrated Terminal (View > Integrated Terminal or Ctrl+`), and use the following line to login to Docker (substitute the values of the command with the credentials of your Azure Container Registry (ACR)):

        docker login -u <ACR username> -p <ACR password> <ACR login server>
    
  2. ファイルの配置テンプレートを右クリックし、 [ビルド IoT Edge ソリューション] をクリックします。Right-click on the file deployment.template.json, and click Build IoT Edge Solution. このビルドプロセスは、(デバイスによっては) かなりの時間がかかります。そのため、待機する準備を整えてください。This build process takes quite some time (depending on your device), so be prepared to wait. ビルドプロセスが完了すると、 configという名前の新しいフォルダー内に配置の jsonファイルが作成されます。After the build process finishes, a deployment.json file will have been created inside a new folder called config.

    デプロイの作成

  3. コマンドパレットをもう一度開き、Azure を検索します。 サインインします。Open the Command Palette again, and search for Azure: Sign In. Azure アカウントの資格情報を使用して、画面の指示に従います。VS Code には、コピーして開くオプションが用意されています。これにより、すぐに必要なデバイスコードがコピーされ、既定の web ブラウザーが開きます。Follow the prompts using your Azure Account credentials; VS Code will provide you with an option to Copy and Open, which will copy the device code you will soon need, and open your default web browser. プロンプトが表示されたら、デバイスコードを貼り付けて、コンピューターを認証します。When asked, paste the device code, to authenticate your machine.

    コピーして開く

  4. サインインすると、[探索] パネルの下部に [Azure IoT Hub デバイス] という新しいセクションが表示されます。Once signed in you will notice, on the bottom side of the Explore panel, a new section called Azure IoT Hub Devices. 展開するには、このセクションをクリックします。Click this section to expand it.

    エッジデバイス

  5. デバイスがここではない場合を右クリックする必要があります。 Azure IoT Hub デバイス、をクリックし、 IoT Hub 接続文字列の設定します。If your device is not here, you will need to right-click Azure IoT Hub Devices, and then click Set IoT Hub Connection String. コマンドパレット(VS Code の上部) で、接続文字列を入力するように求められます。You will then see that the Command Palette (at the top of VS Code), will prompt you to input your Connection String. これは、章 3の最後にメモした接続文字列です。This is the Connection String you noted down at the end of Chapter 3. で文字列をコピーしたら、 enter キーを押します。Press the Enter key, once you have copied the string in.

  6. デバイスが読み込まれ、表示されます。Your device should load, and appear. デバイス名を右クリックし、 [単一デバイスの展開の作成] をクリックします。Right-click on the device name, and then click, Create Deployment for Single Device.

    デプロイの作成

  7. ファイルエクスプローラーのプロンプトが表示されます。ここで、 configフォルダーに移動して、そのファイルを選択します。You will get a File Explorer prompt, where you can navigate to the config folder, and then select the deployment.json file. そのファイルを選択した状態で、 [エッジ配置マニフェストの選択] ボタンをクリックします。With that file selected, click the Select Edge Deployment Manifest button.

    デプロイの作成

  8. この時点で、 Azure Container Registryからコンテナーをモジュールとしてデプロイし、実際にデバイスにデプロイするためのマニフェストをIoT Hub サービスに提供しました。At this point you have provided your IoT Hub Service with the manifest for it to deploy your container, as a module, from your Azure Container Registry, effectively deploying it to your device.

  9. デバイスから IoT Hub に送信されたメッセージを表示するには、 [エクスプローラー] パネルの [Azure IoT Hub デバイス] セクションでデバイス名をもう一度右クリックし、 [監視 D2C メッセージの開始] をクリックします。To view the messages sent from your device to the IoT Hub, right-click again on your device name in the Azure IoT Hub Devices section, in the Explorer panel, and click on Start Monitoring D2C Message. デバイスから送信されたメッセージが VS ターミナルに表示されます。The messages sent from your device should appear in the VS Terminal. しばらく時間がかかることがあります。Be patient, as this may take some time. デバッグについては、次の章を参照してください。配置が成功したかどうかを確認してください。See the next Chapter for debugging, and checking if deployment was successful.

このモジュールは、各イテレーションでimagesフォルダー内のイメージを反復処理し、それらを分析します。This module will now iterate between the images in the images folder and analyze them, with each iteration. これは明らかに、基本的な機械学習モデルを使用して IoT Edge デバイス環境で動作させる方法のデモにすぎません。This is obviously just a demonstration of how to get the basic machine learning model to work in an IoT Edge device environment.

この例の機能を拡張するには、いくつかの方法を実行します。To expand the functionality of this example, you could proceed in several ways. 1つの方法として、コンテナーにいくつかのコードを含め、デバイスに接続されている web カメラから写真をキャプチャして、images フォルダーに保存する方法があります。One way could be including some code in the container, that captures photos from a webcam that is connected to the device, and saves the images in the images folder.

別の方法として、IoT デバイスからコンテナーにイメージをコピーすることもできます。Another way could be copying the images from the IoT device into the container. これを行う実際の方法として、IoT デバイスターミナルで次のコマンドを実行します (たとえば、プロセスを自動化する場合は、小規模なアプリでジョブを実行できます)。A practical way to do that is to run the following command in the IoT device Terminal (perhaps a small app could do the job, if you wished to automate the process). このコマンドは、ファイルが格納されているフォルダーの場所から手動で実行することでテストできます。You can test this command by running it manually from the folder location where your files are stored:

    sudo docker cp <filename> <modulename>:/app/images/<a name of your choice>

第10章-IoT Edge ランタイムのデバッグChapter 10 - Debugging the IoT Edge Runtime

次に示すのは、 Ubuntu デバイスからIoT Edge ランタイムのメッセージングアクティビティを監視およびデバッグするのに役立つコマンドラインとヒントの一覧です。The following are a list of command lines, and tips, to help you monitor and debug the messaging activity of the IoT Edge Runtime, from your Ubuntu device.

  • 次のコマンドラインを実行して、 IoT Edge ランタイムの状態を確認します。Check the IoT Edge Runtime status by running the following command line:

        sudo systemctl status iotedge
    

    注意

    ステータスの表示を完了するには、 Ctrl + Cキーを押してください。Remember to press Ctrl + C, to finish viewing the status.

  • 現在展開されているコンテナーを一覧表示します。List the containers that are currently deployed. IoT Hub サービスがコンテナーを正常にデプロイした場合は、次のコマンドラインを実行すると表示されます。If the IoT Hub Service has deployed the containers successfully, they will be displayed by running the following command line:

        sudo iotedge list
    

    またはOr

        sudo docker ps
    

    注意

    上記は、モジュールが正常にデプロイされているかどうかを確認するための優れた方法であり、一覧に表示されます。それ以外の場合は、 edgeHubedgeAgent のみ が表示されます。The above is a good way to check whether your module has been deployed successfully, as it will appear in the list; you will otherwise only see the edgeHub and edgeAgent.

  • コンテナーのコードログを表示するには、次のコマンドラインを実行します。To display the code logs of a container, run the following command line:

        journalctl -u iotedge
    

IoT Edge ランタイムを管理するための便利なコマンド:Useful commands to manage the IoT Edge Runtime:

  • ホスト内のすべてのコンテナーを削除するには、次のようにします。To delete all containers in the host:

        sudo docker rm -f $(sudo docker ps -aq)
    
  • IoT Edge ランタイムを停止するには:To stop the IoT Edge Runtime:

        sudo systemctl stop iotedge
    

第11章-Create Table ServiceChapter 11 - Create Table Service

Azure Portal に戻ります。ここでは、ストレージリソースを作成して、Azure Tables サービスを作成します。Navigate back to your Azure Portal, where you will create an Azure Tables Service, by creating a Storage resource.

  1. まだサインインしていない場合は、 Azure Portalにログインします。If not already signed in, log into the Azure Portal.

  2. ログインしたら、左上隅にある [リソースの作成] をクリックし、 [ストレージアカウント] を検索して、 enterキーを押して検索を開始します。Once logged in, click on Create a resource, in the top left corner, and search for Storage account, and press the Enter key, to start the search.

  3. 表示されたら、一覧から [ストレージアカウント-blob、file、table、queue] をクリックします。Once it has appeared, click Storage account - blob, file, table, queue from the list.

    ストレージアカウントの検索

  4. 新しいページには、ストレージアカウントサービスの説明が表示されます。The new page will provide a description of the Storage account Service. このプロンプトの左下にある [作成] ボタンをクリックして、このサービスのインスタンスを作成します。At the bottom left of this prompt, click the Create button, to create an instance of this Service.

    ストレージインスタンスの作成

  5. [作成] をクリックすると、パネルが表示されます。Once you have clicked on Create, a panel will appear:

    1. このサービスインスタンスに必要な名前を挿入します (すべて小文字にする必要があります)。Insert your desired Name for this Service instance (must be all lowercase).

    2. [デプロイモデル] で、 [リソースマネージャー] をクリックします。For Deployment model, click Resource manager.

    3. [アカウントの種類] で、ドロップダウンメニューを使用して、 [ストレージ (汎用 v1)] をクリックします。For Account kind, using the dropdown menu, click Storage (general purpose v1).

    4. 適切な場所をクリックします。Click an appropriate Location.

    5. [レプリケーション] ドロップダウンメニューで、 [読み取りアクセス-geo 冗長ストレージ (RA-GRS)] をクリックします。For the Replication dropdown menu, click Read-access-geo-redundant storage (RA-GRS).

    6. [パフォーマンス][標準] をクリックします。For Performance, click Standard.

    7. [安全な転送が必要] セクションで、 [無効] をクリックします。Within the Secure transfer required section, click Disabled.

    8. [サブスクリプション] ドロップダウンメニューから、適切なサブスクリプションをクリックします。From the Subscription dropdown menu, click an appropriate subscription.

    9. リソースグループを選択するか、新しいリソースグループを作成します。Choose a Resource Group or create a new one. リソースグループを使用すると、Azure 資産のコレクションの監視、アクセスの制御、プロビジョニング、管理を行うことができます。A resource group provides a way to monitor, control access, provision, and manage, billing for a collection of Azure assets. 1つのプロジェクトに関連付けられているすべての Azure サービス (たとえば、これらのコースなど) を共通のリソースグループに保持することをお勧めします。It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

      Azure リソースグループの詳細については、リソースグループの管理方法に関するリンクを参照してください。If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    10. このオプションが選択されている場合は、 [仮想ネットワーク][無効] のままにします。Leave Virtual networks as Disabled, if this is an option for you.

    11. [作成] をクリックします。Click Create.

      ストレージの詳細の入力

  6. [作成] をクリックした後、サービスが作成されるまで待機する必要があります。これには1分かかることがあります。Once you have clicked on Create, you will have to wait for the Service to be created, this might take a minute.

  7. サービスインスタンスが作成されると、ポータルに通知が表示されます。A notification will appear in the Portal once the Service instance is created. 通知をクリックして、新しいサービスインスタンスを探索します。Click on the notifications to explore your new Service instance.

    新しいストレージ通知

  8. 通知の [リソースに移動] ボタンをクリックすると、新しいストレージサービスインスタンスの概要ページが表示されます。Click the Go to resource button in the notification, and you will be taken to your new Storage Service instance overview page.

    リソースにアクセス

  9. 概要 ページで、右側にある テーブル をクリックします。From the overview page, to the right-hand side, click Tables.

    tables

  10. 右側のパネルが変更され、テーブルサービス情報が表示されます。新しいテーブルを追加する必要があります。The panel on the right will change to show the Table Service information, wherein you need to add a new table. これを行うには、左上隅にある [+ テーブル] ボタンをクリックします。Do this by clicking the + Table button to the top-left corner.

    テーブルを開く

  11. 新しいページが表示されます。ここには、テーブル名を入力する必要があります。A new page will be shown, wherein you need to enter a Table name. これは、後の章で (Function App を作成し、Power BI)、アプリケーション内のデータを参照するために使用する名前です。This is the name you will use to refer to the data in your application in later Chapters (creating Function App, and Power BI). 名前としてIotmessagesを挿入し (このドキュメントで後ほど使用する場合はそのままにしておきます)、[ OK] をクリックします。Insert IoTMessages as the name (you can choose your own, just remember it when used later in this document) and click OK.

  12. 新しいテーブルが作成されると、テーブルサービスのページ (下部) に表示されるようになります。Once the new table has been created, you will be able to see it within the Table Service page (at the bottom).

    新しいテーブルが作成されました

  13. 次に、 [アクセスキー] をクリックし、ストレージアカウント名キーのコピーを作成します (メモ帳を使用)。 Azure Function Appを作成するときに、このコースの後半でこれらの値を使用します。Now click on Access keys and take a copy of the Storage account name and Key (using your Notepad), you will use these values later in this course, when creating the Azure Function App.

    新しいテーブルが作成されました

  14. 左側のパネルを再び使用して、[ Table Service ] \ (テーブルサービス ) セクションまでスクロールし、[ tables (または新しいポータルでのテーブルの参照)] をクリックして、テーブルのURL (メモ帳を使用) のコピーを作成します。Using the panel on the left again, scroll to the Table Service section, and click Tables (or Browse Tables, in newer Portals) and take a copy of the Table URL (using your Notepad). この値は、テーブルをPower BIアプリケーションにリンクするときに、このコースの後半で使用します。You will use this value later in this course, when linking your table to your Power BI application.

    新しいテーブルが作成されました

第12章-Azure テーブルの完成Chapter 12 - Completing the Azure Table

Table Serviceストレージアカウントのセットアップが完了したので、それにデータを追加します。これは、情報の格納と取得に使用されます。Now that your Table Service storage account has been setup, it is time to add data to it, which will be used to store and retrieve information. テーブルの編集は、 Visual Studioを使用して行うことができます。The editing of your Tables can be done through Visual Studio.

  1. (Visual Studio Code ではなく) Visual Studioを開きます。Open Visual Studio (not Visual Studio Code).

  2. メニューの [Cloud Explorer表示 > ] をクリックします。From the menu, click View > Cloud Explorer.

    cloud explorer を開く

  3. Cloud Explorerがドッキングされたアイテムとして開きます (読み込みに時間がかかる場合があります)。The Cloud Explorer will open as a docked item (be patient, as loading may take time).

    警告

    ストレージアカウントの作成に使用したサブスクリプションが表示されない場合は、次のことを確認してください。If the subscription you used to create your Storage Accounts is not visible, ensure that you have:

    • Azure Portal で使用したものと同じアカウントにログインします。Logged in to the same account as the one you used for the Azure Portal.

    • [アカウント管理] ページからサブスクリプションを選択しました (アカウントの設定からフィルターを適用する必要がある場合があります)。Selected your subscription from the Account Management page (you may need to apply a filter from your account settings):

      サブスクリプションの検索

  4. Azure cloud Services が表示されます。Your Azure cloud Services will be shown. ストレージアカウントを検索し、左側の矢印をクリックしてアカウントを展開します。Find Storage Accounts and click the arrow to the left of that to expand your accounts.

    ストレージアカウントを開く

  5. 展開されると、新しく作成されたストレージアカウントを使用できるようになります。Once expanded, your newly created Storage account should be available. ストレージの左側にある矢印をクリックし、展開された後、 [テーブル] を見つけて、その横にある矢印をクリックし、最後の章で作成したテーブルを表示します。Click the arrow to the left of your storage, and then once that is expanded, find Tables and click the arrow next to that, to reveal the Table you created in the last Chapter. テーブルをダブルクリックします。Double-click your Table.

  6. テーブルが Visual Studio ウィンドウの中央に開きます。Your table will be opened in the center of your Visual Studio window. [テーブル] アイコン + をクリックします。Click the table icon with the + (plus) on it.

    新しいテーブルの追加

  7. エンティティの追加を求めるウィンドウが表示されます。A window will appear prompting for you to Add Entity. エンティティは1つだけ作成しますが、3つのプロパティがあります。You will create only one entity, though it will have three properties. PartitionkeyRowKeyは既に提供されています。これは、テーブルがデータを検索するために使用されるためです。You will notice that PartitionKey and RowKey are already provided, as these are used by the table to find your data.

    パーティションキーと行キー

  8. 次の値を更新します。Update the following values:

    • 名前:Partitionkey、値:PK_IoTMessagesName: PartitionKey, Value: PK_IoTMessages

    • 名前:RowKey、値:RK_1_IoTMessagesName: RowKey, Value: RK_1_IoTMessages

  9. 次に、[エンティティの追加] ウィンドウの左下にある [プロパティの追加] をクリックし、次のプロパティを追加します。Then, click Add property (to the lower left of the Add Entity window) and add the following property:

    • Messagecontent 文字列 として使用する場合は、値を空のままにします。MessageContent, as a string, leave the Value empty.
  10. テーブルは、次の図に示すものと一致している必要があります。Your table should match the one in the image below:

    正しい値の追加

    注意

    このエンティティの行キーの番号が1である理由は、さらに多くのメッセージを追加することが必要になる可能性があるためです。このコースをさらに試してみることをお勧めします。The reason why the entity has the number 1 in the row key, is because you might want to add more messages, should you desire to experiment further with this course.

  11. 完了したら [ OK] をクリックします。Click OK when you are finished. これで、テーブルを使用する準備ができました。Your table is now ready to be used.

第13章-Azure Function App の作成Chapter 13 - Create an Azure Function App

ここでは、 Azure Function Appを作成します。これは、前の章で作成したTable service にIoT Edgeデバイスメッセージを格納するために、 IoT Hub サービスによって呼び出されます。It is now time to create an Azure Function App, which will be called by the IoT Hub Service to store the IoT Edge device messages in the Table Service, which you created in the previous Chapter.

まず、必要なライブラリを Azure 関数で読み込むことができるファイルを作成する必要があります。First, you need to create a file that will allow your Azure Function to load the libraries you need.

  1. メモ帳を開きます ( Windows キーを押して、メモ帳を入力します)。Open Notepad (press the Windows Key, and type notepad).

    メモ帳を開く

  2. メモ帳を開いた状態で、次の JSON 構造を挿入します。With Notepad open, insert the JSON structure below into it. その作業が完了したら、それをデスクトップにプロジェクトの jsonとして保存します。Once you have done that, save it on your desktop as project.json. このファイルは、関数が使用するライブラリを定義します。This file defines the libraries your function will use. NuGet を使用している場合は、見慣れた外観になります。If you have used NuGet, it will look familiar.

    警告

    名前が正しいことが重要です。ファイル拡張子 .txt が付いていないことを確認します。It is important that the naming is correct; ensure it does NOT have a .txt file extension. 参照については、以下を参照してください。See below for reference:

    JSON 保存

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "WindowsAzure.Storage": "9.2.0"
        }
        }
    }
    }
    
  3. Azure ポータル にログインします。Log in to the Azure Portal.

  4. ログインしたら、左上隅にある [リソースの作成] をクリックし、 Function Appを検索して、 enterキーを押して検索します。Once you are logged in, click on Create a resource in the top left corner, and search for Function App, and press the Enter key, to search. 結果の [ Function App ] をクリックして、新しいパネルを開きます。Click Function App from the results, to open a new panel.

    function app の検索

  5. 新しいパネルには、 Function Appサービスの説明が表示されます。The new panel will provide a description of the Function App Service. このパネルの左下にある [作成] ボタンをクリックして、このサービスとの関連付けを作成します。At the bottom left of this panel, click the Create button, to create an association with this Service.

    function app インスタンス

  6. [作成] をクリックしたら、次のように入力します。Once you have clicked on Create, fill in the following:

    1. [アプリ名] に、このサービスインスタンスに必要な名前を挿入します。For App name, insert your desired name for this Service instance.

    2. サブスクリプションを選択します。Select a Subscription.

    3. 適切な価格レベルを選択してください。 Function App サービスを初めて作成する場合は、free レベルをご利用いただけます。Select the pricing tier appropriate for you, if this is the first time creating a Function App Service, a free tier should be available to you.

    4. リソースグループを選択するか、新しいリソースグループを作成します。Choose a Resource Group or create a new one. リソースグループを使用すると、Azure 資産のコレクションの監視、アクセスの制御、プロビジョニング、管理を行うことができます。A resource group provides a way to monitor, control access, provision, and manage, billing for a collection of Azure assets. 1つのプロジェクトに関連付けられているすべての Azure サービス (たとえば、これらのコースなど) を共通のリソースグループに保持することをお勧めします。It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

      Azure リソースグループの詳細については、リソースグループの管理方法に関するリンクを参照してください。If you wish to read more about Azure Resource Groups, please follow this link on how to manage a Resource Group.

    5. OSの場合は、[Windows] をクリックします。これは目的のプラットフォームです。For OS, click Windows, as that is the intended platform.

    6. ホスティングプランを選択します (このチュートリアルでは、従量課金プランを使用しています。Select a Hosting Plan (this tutorial is using a Consumption Plan.

    7. 場所を選択します (前の手順で作成したストレージと同じ場所を選択します)。Select a Location (choose the same location as the storage you have built in the previous step)

    8. [ストレージ] セクションでは、前の手順で作成したストレージサービスを選択する必要があります。For the Storage section, you must select the Storage Service you created in the previous step.

    9. このアプリでApplication Insightsは必要ありません。そのままにしておいてもかまいません。You will not need Application Insights in this app, so feel free to leave it Off.

    10. [作成] をクリックします。Click Create.

      新しいインスタンスの作成

  7. [作成] をクリックした後、サービスが作成されるまで待機する必要があります。これには1分かかることがあります。Once you have clicked on Create, you will have to wait for the Service to be created, this might take a minute.

  8. サービスインスタンスが作成されると、ポータルに通知が表示されます。A notification will appear in the Portal once the Service instance is created.

    新しい通知

  9. デプロイが正常に完了したら (完了した)、通知をクリックします。Click on the notification, once deployment is successful (has finished).

  10. 通知の [リソースへのジャンプ] ボタンをクリックして、新しいサービスインスタンスを探索します。Click the Go to resource button in the notification to explore your new Service instance.

    リソースにアクセス

  11. 新しいパネルの左側で、[関数] の横 + にある (プラス記号) アイコンをクリックして、新しい関数を作成します。In the left side of the new panel, click the + (plus) icon next to Functions, to create a new function.

    新しい関数の追加

  12. 中央のパネル内に [関数の作成] ウィンドウが表示されます。Within the central panel, the Function creation window will appear. さらに下にスクロールし、 [カスタム関数] をクリックします。Scroll down further, and click on Custom function.

    カスタム関数

  13. 次のページを下にスクロールして、 IoT Hub (イベントハブ) を見つけ、クリックします。Scroll down the next page, until you find IoT Hub (Event Hub), then click on it.

    カスタム関数

  14. [IoT Hub (イベントハブ)] ブレードで、言語をにC# 設定し、 [新規] をクリックします。In the IoT Hub (Event Hub) blade, set the Language to C# and then click on new.

    カスタム関数

  15. 表示されるウィンドウで、 IoT Hubが選択されていることを確認し、 IoT Hubフィールドの名前が、前に作成したIoT Hub サービスの名前と一致することを確認します (手順8の第3章を参照)。In the window that will appear, make sure that IoT Hub is selected and the name of the IoT Hub field corresponds with the name of your IoT Hub Service that you have created previously (in step 8, of Chapter 3). 次に、 [選択] ボタンをクリックします。Then click the Select button.

    カスタム関数

  16. [IoT Hub (イベントハブ)] ブレードに戻り、 [作成] をクリックします。Back on the IoT Hub (Event Hub) blade, click on Create.

    カスタム関数

  17. 関数エディターにリダイレクトされます。You will be redirected to the function editor.

    カスタム関数

  18. その中のすべてのコードを削除し、次のコードに置き換えます。Delete all the code in it and replace it with the following:

    #r "Microsoft.WindowsAzure.Storage"
    #r "NewtonSoft.Json"
    
    using System;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Table;
    using Newtonsoft.Json;
    using System.Threading.Tasks;
    
    public static async Task Run(string myIoTHubMessage, TraceWriter log)
    {
        log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");
    
        //RowKey of the table object to be changed
        string tableName = "IoTMessages";
        string tableURL = "https://iothubmrstorage.table.core.windows.net/IoTMessages";
    
        // If you did not name your Storage Service as suggested in the course, change the name here with the one you chose.
        string storageAccountName = "iotedgestor"; 
    
        string storageAccountKey = "<Insert your Storage Key here>";   
    
        string partitionKey = "PK_IoTMessages";
        string rowKey = "RK_1_IoTMessages";
    
        Microsoft.WindowsAzure.Storage.Auth.StorageCredentials storageCredentials =
            new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(storageAccountName, storageAccountKey);
    
        CloudStorageAccount storageAccount = new CloudStorageAccount(storageCredentials, true);
    
        // Create the table client.
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
    
        // Get a reference to a table named "IoTMessages"
        CloudTable messageTable = tableClient.GetTableReference(tableName);
    
        //Retrieve the table object by its RowKey
        TableOperation operation = TableOperation.Retrieve<MessageEntity>(partitionKey, rowKey);
        TableResult result = await messageTable.ExecuteAsync(operation);
    
        //Create a MessageEntity so to set its parameters
        MessageEntity messageEntity = (MessageEntity)result.Result;
    
        messageEntity.MessageContent = myIoTHubMessage;
        messageEntity.PartitionKey = partitionKey;
        messageEntity.RowKey = rowKey;
    
        //Replace the table appropriate table Entity with the value of the MessageEntity Ccass structure.
        operation = TableOperation.Replace(messageEntity);
    
        // Execute the insert operation.
        await messageTable.ExecuteAsync(operation);
    }
    
    // This MessageEntity structure which will represent a Table Entity
    public class MessageEntity : TableEntity
    {
        public string Type { get; set; }
        public string MessageContent { get; set; }   
    }
    
  19. 次の変数を変更して、ストレージアカウントに含まれる適切な値 (手順 11. および 13. のテーブルストレージの値) に対応するようにします。Change the following variables, so that they correspond to the appropriate values (Table and Storage values, from step 11 and 13, respectively, of Chapter 11), that you will find in your Storage Account:

    • tableNameストレージアカウント内にあるテーブルの名前を使用します。tableName, with the name of your Table located in your Storage Account.
    • tableurlストレージアカウント内にあるテーブルの url を使用します。tableURL, with the URL of your Table located in your Storage Account.
    • Storageaccountnameストレージアカウント名に対応する値の名前を指定します。storageAccountName, with the name of the value corresponding with the name of your Storage Account name.
    • storageAccountKeyには、前に作成したストレージサービスで取得したキーを使用します。storageAccountKey, with the Key you have obtained in the Storage Service you have created previously.

    カスタム関数

  20. コードを配置したら、 [保存] をクリックします。With the code in place, click Save.

  21. 次に、ページ < の右側にある (矢印) アイコンをクリックします。Next, click the < (arrow) icon, on the right-hand side of the page.

    カスタム関数

  22. パネルが右側からスライドします。A panel will slide in from the right. そのパネルで [アップロード] をクリックすると、ファイルブラウザーが表示されます。In that panel, click Upload, and a File Browser will appear.

  23. 前のメモ帳で作成したプロジェクトの jsonファイルに移動し、 [開く] ボタンをクリックします。Navigate to, and click, the project.json file, which you created in Notepad previously, and then click the Open button. このファイルは、関数が使用するライブラリを定義します。This file defines the libraries that your function will use.

    カスタム関数

  24. ファイルがアップロードされると、右側のパネルに表示されます。When the file has uploaded, it will appear in the panel on the right. このボタンをクリックすると、関数エディター内で開かれます。Clicking it will open it within the Function editor. 次の画像とまったく同じ外観にする必要があります。It must look exactly the same as the next image.

    カスタム関数

  25. この時点で、テーブルにメッセージを格納する関数の機能をテストすることをお勧めします。At this point it would be good to test the capability of your Function to store the message on your Table. ウィンドウの右上にある [テスト] をクリックします。On the top right side of the window, click on Test.

    カスタム関数

  26. 上の図に示されているように、要求本文にメッセージを挿入し、 [実行] をクリックします。Insert a message on the Request body, as shown in the image above, and click on Run.

  27. 関数が実行され、結果の状態が表示されます ([出力] ウィンドウの上に緑の状態 202が表示されます。これは成功した呼び出しであることを意味します)。The function will run, displaying the result status (you will notice the green Status 202 Accepted, above the Output window, which means it was a successful call):

    出力結果

第14章-アクティブなメッセージの表示Chapter 14 - View active messages

(Visual Studio Code ではなく) Visual Studio を開いた場合、テストメッセージの結果は messagecontent 文字列領域に格納されるため、視覚化することができます。If you now open Visual Studio (not Visual Studio Code), you can visualize your test message result, as it will be stored in the MessageContent string area.

カスタム関数

Table Service と Function App が配置されていると、Ubuntu デバイスのメッセージがIotmessagesテーブルに表示されます。With the Table Service and Function App in place, your Ubuntu device messages will appear in your IoTMessages Table. まだ実行されていない場合は、デバイスをもう一度起動すると、Visual Studio Cloud Explorerを使用して、デバイスとモジュールの結果メッセージをテーブル内に表示できるようになります。If not already running, start your device again, and you will be able to see the result messages from your device, and module, within your Table, through using Visual Studio Cloud Explorer.

データの視覚化

第15章-Power BI セットアップChapter 15 - Power BI Setup

IOT デバイスからデータを視覚化するにはPower BI (デスクトップバージョン) をセットアップし、先ほど作成したテーブルサービスからデータを収集します。To visualize the data from your IOT device you will setup Power BI (desktop version), to collect the data from the Table Service, which you just created. Power BI のHoloLensバージョンでは、そのデータを使用して結果が視覚化されます。The HoloLens version of Power BI will then use that data to visualize the result.

  1. Windows 10 で Microsoft Store を開き、 Power BI Desktopを検索します。Open the Microsoft Store on Windows 10 and search for Power BI Desktop.

    Power BI

  2. アプリケーションをダウンロードします。Download the application. ダウンロードが完了したら、それを開きます。Once it has finished downloading, open it.

  3. Microsoft 365 アカウントを使用してPower BIにログインします。Log into Power BI with your Microsoft 365 account. サインアップするには、ブラウザーにリダイレクトすることができます。You may be redirected to a browser, to sign up. サインアップしたら、Power BI アプリに戻り、もう一度サインインします。Once you are signed up, go back to the Power BI app, and sign in again.

  4. [データの取得] をクリックし、 [詳細] をクリックします。Click on Get Data and then click on More....

    Power BI

  5. [Azure][azure Table Storage] の順にクリックし、 [接続] をクリックします。Click Azure, Azure Table Storage, then click on Connect.

    Power BI

  6. テーブルサービスの作成時に、先ほど収集したテーブル URL (第11章の手順 13) を挿入するように求められます。You will be prompted to insert the Table URL that you collected earlier (in step 13 of Chapter 11), while creating your Table Service. URL を挿入した後、テーブル "サブフォルダー" (このコースでは IoTMessages) を参照するパスの部分を削除します。After inserting the URL, delete the portion of the path referring to the Table "sub-folder" (which was IoTMessages, in this course). 最終的な結果は、次の図のように表示されます。The final result should be as displayed in the image below. [ OK] をクリックします。Then click on OK.

    Power BI

  7. Table Storage の作成時に、メモしたストレージキー (第11章の手順 11) を挿入するように求められます。You will be prompted to insert the Storage Key that you noted (in step 11 of Chapter 11) earlier while creating your Table Storage. [接続] をクリックします。Then click on Connect.

    Power BI

  8. [ナビゲーター] パネルが表示されたら、テーブルの横にあるボックスをオンにして、 [読み込み] をクリックします。A Navigator Panel will be displayed, tick the box next to your Table and click on Load.

    Power BI

  9. 現在、テーブルは Power BI に読み込まれていますが、その値を表示するクエリが必要です。Your table has now been loaded on Power BI, but it requires a query to display the values in it. これを行うには、画面の右側にある [フィールド] パネルにあるテーブル名を右クリックします。To do so, right-click on the table name located in the FIELDS panel at the right side of the screen. 次に、 [クエリの編集] をクリックします。Then click on Edit Query.

    Power BI

  10. 新しいウィンドウとしてPower Query エディターが開き、テーブルが表示されます。A Power Query Editor will open up as a new window, displaying your table. テーブルの [コンテンツ] 列の "レコード" をクリックして、保存されているコンテンツを視覚化します。Click on the word Record within the Content column of the table, to visualize your stored content.

    Power BI

  11. ウィンドウの左上にある [テーブルに移動] をクリックします。Click on Into Table, at the top-left of the window.

    Power BI

  12. [閉じる & 適用] をクリックします。Click on Close & Apply.

    Power BI

  13. クエリの読み込みが完了したら、[フィールド] パネルの画面の右側で、パラメーターの名前に対応するボックスをオンにして、messagecontent列の内容を視覚化します。Once it has finished loading the query, within the FIELDS panel, on the right side of the screen, tick the boxes corresponding to the parameters Name and Value, to visualize the MessageContent column content.

    Power BI

  14. ウィンドウの左上にある青いディスクアイコンをクリックして、選択したフォルダーに作業内容を保存します。Click on the blue disk icon at the top left of the window to save your work in a folder of your choice.

    Power BI

  15. [発行] ボタンをクリックして、ワークスペースにテーブルをアップロードできるようになりました。You can now click on the Publish button to upload your table to your Workspace. メッセージが表示されたら、 [マイワークスペース] をクリックし、[選択] をクリックしますWhen prompted, click My workspace and click Select. 送信の成功した結果が表示されるまで待ちます。Wait for it to display the successful result of the submission.

    Power BI

    Power BI

警告

次の章は HoloLens 固有です。The following Chapter is HoloLens specific. Power BI は現在イマーシブアプリケーションとして利用できませんが、デスクトップアプリを使用して Windows Mixed Reality ポータル (崖家) でデスクトップバージョンを実行することはできます。Power BI is not currently availble as an immersive application, however you can run the desktop version in the Windows Mixed Reality Portal (aka Cliff House), through the Desktop app.

Chapter 16-HoloLens で Power BI データを表示するChapter 16 - Display Power BI data on HoloLens

  1. HoloLens で、アプリケーションの一覧のアイコンをタップして、 Microsoft Storeにログインします。On your HoloLens, log in to the Microsoft Store, by tapping on its icon in the applications list.

    Power BI HL

  2. Power BIアプリケーションを検索してダウンロードします。Search and then download the Power BI application.

    Power BI HL

  3. アプリケーションの一覧からPower BIを開始します。Start Power BI from your applications list.

  4. Power BIによって、 Microsoft 365 アカウントへのログインが要求される場合があります。Power BI might ask you to login to your Microsoft 365 account.

  5. アプリの内部では、次の図に示すように、既定でワークスペースが表示されます。Once inside the app, the workspace should display by default as shown in the image below. この問題が発生しない場合は、ウィンドウの左側にあるワークスペースアイコンをクリックします。If that does not happen, simply click on the workspace icon on the left side of the window.

    Power BI HL

IoT Hub アプリケーションが完成しましたYour finished your IoT Hub application

これで、シミュレートされた仮想マシンのエッジデバイスを使用して、IoT Hub サービスを正常に作成できました。Congratulations, you have successfully created an IoT Hub Service, with a simulated Virtual Machine Edge device. デバイスは、azure Function App によって容易に machine learning モデルの結果を Azure Table サービスに伝達できます。このサービスは、Power BI に読み込まれ、Microsoft HoloLens 内で視覚化されます。Your device can communicate the results of a machine learning model to an Azure Table Service, facilitated by an Azure Function App, which is read into Power BI, and visualized within a Microsoft HoloLens.

Power BI

ボーナスの演習Bonus exercises

演習1Exercise 1

テーブルに格納されているメッセージング構造を展開し、グラフとして表示します。Expand the messaging structure stored in the table and display it as a graph. 後で表示するために、さらに多くのデータを収集し、同じテーブルに格納することができます。You might want to collect more data and store it in the same table, to be later displayed.

演習2Exercise 2

IoT ボードにデプロイする追加の "カメラキャプチャ" モジュールを作成して、分析対象のカメラを通じてイメージをキャプチャできるようにします。Create an additional "camera capture" module to be deployed on the IoT board, so that it can capture images through the camera to be analyzed.