Kurz: Provádění klasifikace obrázků na hraničních zařízeních s využitím služby Custom VisionTutorial: Perform image classification at the edge with Custom Vision Service

Azure IoT Edge může zvýšit efektivitu vašeho řešení IoT tím, že přesune úlohy z cloudu na hraniční zařízení.Azure IoT Edge can make your IoT solution more efficient by moving workloads out of the cloud and to the edge. Tato funkce je vhodná pro služby, které zpracovávají velké množství dat, jako jsou modely počítačového zpracování obrazu.This capability lends itself well to services that process a lot of data, like computer vision models. Služba Custom Vision umožňuje vytvářet vlastní klasifikátory obrázků a nasazovat je do zařízení jako kontejnery.The Custom Vision Service lets you build custom image classifiers and deploy them to devices as containers. Kombinace těchto dvou služeb umožňuje získávat informace z obrázků a video streamů bez nutnosti nejprve přenášet všechna tato data do jiného umístění.Together, these two services enable you to find insights from images or video streams without having to transfer all of the data off site first. Služba Custom Vision poskytuje klasifikátor, který generuje přehledy porovnáváním obrázků s natrénovaným modelem.Custom Vision provides a classifier that compares an image against a trained model to generate insights.

Služba Custom Vision na zařízení IoT Edge by například mohla určovat, jestli je na dálnici větší nebo menší provoz než normálně nebo jestli jsou v garáži v některé řadě volná parkovací místa.For example, Custom Vision on an IoT Edge device could determine whether a highway is experiencing higher or lower traffic than normal, or whether a parking garage has available parking spots in a row. Tyto přehledy je možné sdílet s jinou službou, která na ně může reagovat.These insights can be shared with another service to take action.

V tomto kurzu se naučíte:In this tutorial, you learn how to:

  • Vytvoření klasifikátoru obrázků s využitím služby Custom VisionBuild an image classifier with Custom Vision.
  • Vytvoření modulu IoT Edge, který dotazuje webový server služby Custom Vision na vašem zařízeníDevelop an IoT Edge module that queries the Custom Vision web server on your device.
  • Odeslání výsledků klasifikátoru obrázků do služby IoT HubSend the results of the image classifier to IoT Hub.

Diagram – architektura kurzu, fáze a klasifikátoru nasazení

Diagram - Tutorial architecture, stage and deploy classifier

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.If you don't have an Azure subscription, create a free account before you begin.

PředpokladyPrerequisites

Tip

Tento kurz je zjednodušenou verzí Custom Vision a Azure IoT Edge v projektu s ukázkovým projektem malin. PI 3.This tutorial is a simplified version of the Custom Vision and Azure IoT Edge on a Raspberry Pi 3 sample project. Tento kurz byl navržený tak, aby se spouštěl v cloudovém virtuálním počítači a pomocí statických imagí dokázal naučit a testovat třídění imagí. to je užitečné pro někoho, co začne hodnotit Custom Vision IoT Edge.This tutorial was designed to run on a cloud VM and uses static images to train and test the image classifier, which is useful for someone just starting to evaluate Custom Vision on IoT Edge. Ukázkový projekt používá fyzický hardware a nastavuje živý kanál kamery ke školení a testování klasifikátoru obrázků, který je užitečný pro někoho, kdo chce vyzkoušet podrobnější scénář pro reálný život.The sample project uses physical hardware and sets up a live camera feed to train and test the image classifier, which is useful for someone who wants to try a more detailed, real-life scenario.

Před zahájením tohoto kurzu byste si měli projít předchozí kurz pro nastavení prostředí pro vývoj kontejnerů pro Linux: vývoj IoT Edgech modulů pro zařízení se systémem Linux.Before beginning this tutorial, you should have gone through the previous tutorial to set up your environment for Linux container development: Develop IoT Edge modules for Linux devices. Po dokončení tohoto kurzu byste měli mít následující požadavky:By completing that tutorial, you should have the following prerequisites in place:

Pokud chcete vytvořit modul IoT Edge se službou Custom Vision, nainstalujte na svém vývojovém počítači následující další požadavky:To develop an IoT Edge module with the Custom Vision service, install the following additional prerequisites on your development machine:

Vytvoření klasifikátoru obrázků s využitím služby Custom VisionBuild an image classifier with Custom Vision

Pokud chcete vytvořit klasifikátor obrázků, je potřeba vytvořit projekt služby Custom Vision a poskytnout trénovací obrázky.To build an image classifier, you need to create a Custom Vision project and provide training images. Další informace o krocích, které provedete v této části, najdete v tématu Postup vytvoření klasifikátoru s využitím služby Custom Vision.For more information about the steps that you take in this section, see How to build a classifier with Custom Vision.

Jakmile bude klasifikátor obrázků vytvořený a natrénovaný, můžete ho exportovat jako kontejner Dockeru a nasadit do zařízení IoT Edge.Once your image classifier is built and trained, you can export it as a Docker container and deploy it to an IoT Edge device.

Vytvoření nového projektuCreate a new project

  1. Ve webovém prohlížeči přejděte na webovou stránku služby Custom Vision.In your web browser, navigate to the Custom Vision web page.

  2. Vyberte Přihlásit se a přihlaste se pomocí stejného účtu, který používáte pro přístup k prostředkům Azure.Select Sign in and sign in with the same account that you use to access Azure resources.

  3. Vyberte Nový projekt.Select New project.

  4. Vytvořte projekt s použitím následujících hodnot:Create your project with the following values:

    PoleField HodnotaValue
    Name (Název)Name Zadejte název projektu, například EdgeTreeClassifier.Provide a name for your project, like EdgeTreeClassifier.
    PopisDescription Volitelný popis projektu.Optional project description.
    ProstředekResource Vyberte jednu ze skupin prostředků Azure, která zahrnuje prostředek Custom Vision Service, nebo vytvořte novou , pokud jste ho ještě nepřidali.Select one of your Azure resource groups that includes a Custom Vision Service resource or create new if you haven't yet added one.
    Typy projektůProject Types KlasifikaceClassification
    Typy klasifikaceClassification Types Více tříd (jedna značka na obrázek)Multiclass (single tag per image)
    DoményDomains Obecné (kompaktní)General (compact)
    Možnosti exportuExport Capabilities Základní platformy (Tensorflow, CoreML, ONNX,...)Basic platforms (Tensorflow, CoreML, ONNX, ...)
  5. Vyberte Vytvořit projekt.Select Create project.

Nahrání obrázků a trénování klasifikátoruUpload images and train your classifier

Při vytváření klasifikátoru obrázků je potřeba sada trénovacích obrázků a také testovací obrázky.Creating an image classifier requires a set of training images, as well as test images.

  1. Na svůj místní vývojový počítač si naklonujte nebo stáhněte ukázkové obrázky z úložiště Cognitive-CustomVision-Windows.Clone or download sample images from the Cognitive-CustomVision-Windows repo onto your local development machine.

    git clone https://github.com/Microsoft/Cognitive-CustomVision-Windows.git
    
  2. Vraťte se ke svému projektu služby Custom Vision a vyberte Přidat obrázky.Return to your Custom Vision project and select Add images.

  3. Přejděte do místního úložiště Git, které jste naklonovali, a pak do první složky s obrázky Cognitive-CustomVision-Windows / Samples / Images / Hemlock.Browse to the git repo that you cloned locally, and navigate to the first image folder, Cognitive-CustomVision-Windows / Samples / Images / Hemlock. Vyberte všech 10 obrázků ve složce a pak vyberte Otevřít.Select all 10 images in the folder and then Open.

  4. Přidejte k této skupině obrázků značku hemlock (Jedlovec) a stiskněte Enter, aby se značka použila.Add the tag hemlock to this group of images and press enter to apply the tag.

  5. Vyberte Nahrát soubory (10) .Select Upload 10 files.

    Nahrání souborů s příznakem Hemlock do Custom Vision

  6. Po úspěšném nahrání obrázků vyberte Hotovo.When the images are uploaded successfully, select Done.

  7. Znovu vyberte Přidat obrázky.Select Add images again.

  8. Přejděte do druhé složky s obrázky Cognitive-CustomVision-Windows / Samples / Images / Japanese Cherry.Browse to the second image folder, Cognitive-CustomVision-Windows / Samples / Images / Japanese Cherry. Vyberte všech 10 obrázků ve složce a pak vyberte Otevřít.Select all 10 images in the folder and then Open.

  9. Přidejte k této skupině obrázků značku japanese cherry (Sakura) a stiskněte Enter, aby se značka použila.Add the tag japanese cherry to this group of images and press enter to apply the tag.

  10. Vyberte Nahrát soubory (10) .Select Upload 10 files. Po úspěšném nahrání obrázků vyberte Hotovo.When the images are uploaded successfully, select Done.

  11. Jakmile budou obě sady obrázků označené a nahrané, vyberte Trénovat a natrénujte klasifikátor.When both sets of images are tagged and uploaded, select Train to train the classifier.

Export klasifikátoruExport your classifier

  1. Po natrénování klasifikátoru na stránce Výkon klasifikátoru vyberte Exportovat.After training your classifier, select Export on the Performance page of the classifier.

    Exportovat klasifikátor vyškolených imagí

  2. Jako platformu vyberte DockerFile.Select DockerFile for the platform.

  3. Jako verzi vyberte Linux.Select Linux for the version.

  4. Vyberte Exportovat.Select Export.

    Export jako soubor DockerFile s kontejnery Linuxu

  5. Po dokončení exportu vyberte Stáhnout a uložte balíček .zip místně do svého počítače.When the export is complete, select Download and save the .zip package locally on your computer. Extrahujte z balíčku všechny soubory.Extract all files from the package. Tyto soubory použijete k vytvoření modulu IoT Edge, který bude obsahovat server klasifikace obrázků.You'll use these files to create an IoT Edge module that contains the image classification server.

Až se k tomuto bodu dostanete, budete mít vytvořený a natrénovaný projekt služby Custom Vision.When you reach this point, you've finished creating and training your Custom Vision project. Exportované soubory použijete v další části, ale s webovou stránkou služby Custom Vision jste už skončili.You'll use the exported files in the next section, but you're done with the Custom Vision web page.

Vytvoření zařízení IoT EdgeCreate an IoT Edge solution

Teď máte soubory pro kontejnerovou verzi klasifikátoru obrázků na svém místním vývojovém počítači.Now you have the files for a container version of your image classifier on your development machine. V této části nakonfigurujete kontejner klasifikátoru obrázků tak, aby se spouštěl jako modul IoT Edge.In this section, you configure the image classifier container to run as an IoT Edge module. Také vytvoříte druhý modul, který se nasadí společně s klasifikátorem obrázků.You also create a second module that will be deployed alongside the image classifier. Druhý modul odesílá požadavky do klasifikátoru a výsledky odesílá jako zprávy do služby IoT Hub.The second module posts requests to the classifier and sends the results as messages to IoT Hub.

Vytvoření nového řešeníCreate a new solution

Řešení představuje logický způsob vývoje a uspořádání více modulů pro jedno nasazení IoT Edge.A solution is a logical way of developing and organizing multiple modules for a single IoT Edge deployment. Řešení obsahuje kód jednoho nebo několika modulů a manifest nasazení, který určuje, jak se mají nakonfigurovat na zařízení IoT Edge.A solution contains code for one or more modules as well as the deployment manifest that declares how to configure them on an IoT Edge device.

  1. Výběrem View (Zobrazit) > Command Palette (Paleta příkazů) otevřete paletu příkazů VS Code.Select View > Command Palette to open the VS Code command palette.

  2. Na paletě příkazů zadejte a spusťte příkaz Azure IoT Edge: New IoT Edge solution (Azure IoT Edge: Nové řešení IoT Edge).In the command palette, enter and run the command Azure IoT Edge: New IoT Edge solution. Na paletě příkazů zadejte následující informace k vytvoření řešení:In the command palette, provide the following information to create your solution:

    PoleField HodnotaValue
    Vyberte složkuSelect folder Zvolte umístění na vývojovém počítači, ve kterém VS Code vytvoří soubory řešení.Choose the location on your development machine for VS Code to create the solution files.
    Zadejte název řešeníProvide a solution name Zadejte popisný název řešení, například CustomVisionSolution, nebo přijměte výchozí hodnotu.Enter a descriptive name for your solution, like CustomVisionSolution, or accept the default.
    Vyberte šablonu moduluSelect module template Zvolte Modul Python.Choose Python Module.
    Zadejte název moduluProvide a module name Pojmenujte modul classifier.Name your module classifier.

    Je důležité, aby tento název modulu obsahoval pouze malá písmena.It's important that this module name be lowercase. IoT Edge při odkazování na moduly rozlišuje malá a velká písmena a toto řešení využívá knihovnu, která všechny požadavky formátuje tak, aby obsahovaly pouze malá písmena.IoT Edge is case-sensitive when referring to modules, and this solution uses a library that formats all requests in lowercase.
    Zadejte pro modul úložiště imagí DockeruProvide Docker image repository for the module Úložiště imagí zahrnuje název registru kontejneru a název image kontejneru.An image repository includes the name of your container registry and the name of your container image. Image kontejneru je předem vyplněná z předchozího kroku.Your container image is prepopulated from the last step. Nahraďte localhost:5000 hodnotou přihlašovacího serveru z vašeho registru kontejneru Azure.Replace localhost:5000 with the login server value from your Azure container registry. Přihlašovací server můžete získat na stránce Přehled vašeho registru kontejneru na webu Azure Portal.You can retrieve the login server from the Overview page of your container registry in the Azure portal.

    Výsledný řetězec vypadá jako <název registru>. azurecr.IO/Classifier.The final string looks like <registry name>.azurecr.io/classifier.

    Zadání úložiště imagí Dockeru

V okně Visual Studio Code se načte pracovní prostor řešení IoT Edge.The Visual Studio Code window loads your IoT Edge solution workspace.

Přidání přihlašovacích údajů registruAdd your registry credentials

V souboru prostředí jsou uložené přihlašovací údaje pro registr kontejneru, které soubor sdílí s modulem runtime IoT Edge.The environment file stores the credentials for your container registry and shares them with the IoT Edge runtime. Modul runtime tyto přihlašovací údaje potřebuje k přetažení vašich privátních imagí do zařízení IoT Edge.The runtime needs these credentials to pull your private images onto the IoT Edge device.

  1. V průzkumníku VS Code otevřete soubor .env.In the VS Code explorer, open the .env file.
  2. Aktualizujte pole hodnotami uživatelské jméno a heslo, které jste zkopírovali z registru kontejneru Azure.Update the fields with the username and password values that you copied from your Azure container registry.
  3. Soubor uložte.Save this file.

Vyberte cílovou architekturu.Select your target architecture

V současné době Visual Studio Code může vyvíjet moduly pro zařízení se systémem Linux AMD64 a Linux ARM32v7.Currently, Visual Studio Code can develop modules for Linux AMD64 and Linux ARM32v7 devices. Musíte vybrat architekturu, kterou cílíte na každé řešení, protože kontejner je sestavený a pro každý typ architektury funguje jinak.You need to select which architecture you're targeting with each solution, because the container is built and run differently for each architecture type. Výchozí hodnota je Linux AMD64, kterou budeme používat pro tento kurz.The default is Linux AMD64, which is what we'll use for this tutorial.

  1. Otevřete paletu příkazů a vyhledejte Azure IoT Edge: Nastavte výchozí cílovou platformu pro řešení Edgenebo vyberte ikonu zástupce na bočním panelu v dolní části okna.Open the command palette and search for Azure IoT Edge: Set Default Target Platform for Edge Solution, or select the shortcut icon in the side bar at the bottom of the window.

  2. V paletě příkazů vyberte v seznamu možností cílovou architekturu.In the command palette, select the target architecture from the list of options. Pro tento kurz používáme virtuální počítač s Ubuntu jako zařízení IoT Edge, takže se zachová výchozí hodnota amd64.For this tutorial, we're using an Ubuntu virtual machine as the IoT Edge device, so will keep the default amd64.

Přidání klasifikátoru obrázkůAdd your image classifier

Šablona modulu Python ve Visual Studio Code obsahuje vzorový kód, jehož spuštěním můžete otestovat IoT Edge.The Python module template in Visual Studio code contains some sample code that you can run to test IoT Edge. V tomto scénáři tento kód nevyužijete.You won't use that code in this scenario. Místo toho pomocí postupu v této části nahraďte vzorový kód kontejnerem klasifikátoru obrázků, který jste exportovali dříve.Instead, use the steps in this section to replace the sample code with the image classifier container that you exported previously.

  1. V Průzkumníku souborů přejděte k balíčku služby Custom Vision, který jste stáhli a extrahovali.In your file explorer, browse to the Custom Vision package that you downloaded and extracted. Zkopírujte veškerý obsah extrahovaného balíčku.Copy all the contents from the extracted package. Mělo by se jednat o dvě složky (app a azureml) a dva soubory (Dockerfile a README).It should be two folders, app and azureml, and two files, Dockerfile and README.

  2. V Průzkumníku řešení přejděte do adresáře, který jste ve Visual Studio Code nastavili pro vytvoření řešení IoT Edge.In your file explorer, browse to the directory where you told Visual Studio Code to create your IoT Edge solution.

  3. Otevřete složku modulu classifier.Open the classifier module folder. Pokud jste v předchozí části použili navrhované názvy, vypadá struktura složek takto: CustomVisionSolution / modules / classifier.If you used the suggested names in the previous section, the folder structure looks like CustomVisionSolution / modules / classifier.

  4. Vložte soubory do složky classifier.Paste the files into the classifier folder.

  5. Vraťte se do okna Visual Studio Code.Return to the Visual Studio Code window. Ve vašem pracovním prostoru řešení by se teď ve složce modulu měly zobrazit soubory klasifikátoru obrázků.Your solution workspace should now show the image classifier files in the module folder.

    Pracovní prostor řešení se soubory klasifikátoru obrázků

  6. Otevřete soubor module.json ve složce classifier.Open the module.json file in the classifier folder.

  7. Aktualizujte parametr Platforms tak, aby odkazoval na nový souboru Dockerfile, který jste přidali, a odeberte všechny možnosti kromě AMD64, což je jediná architektura, kterou používáme pro tento kurz.Update the platforms parameter to point to the new Dockerfile that you added, and remove all the options besides AMD64, which is the only architecture we're using for this tutorial.

    "platforms": {
        "amd64": "./Dockerfile"
    }
    
  8. Uložte provedené změny.Save your changes.

Vytvoření modulu simulované kameryCreate a simulated camera module

Ve skutečném nasazení služby Custom Vision byste měli kameru poskytující živé obrázky nebo streamy videa.In a real Custom Vision deployment, you would have a camera providing live images or video streams. V tomto scénáři budete simulovat kameru tím, že vytvoříte modul, který do klasifikátoru obrázků odešle testovací obrázek.For this scenario, you simulate the camera by building a module that sends a test image to the image classifier.

Přidání a konfigurace nového moduluAdd and configure a new module

V této části do stejného řešení CustomVisionSolution přidáte nový modul a zadáte kód pro vytvoření simulované kamery.In this section, you add a new module to the same CustomVisionSolution and provide code to create the simulated camera.

  1. Ve stejném okně Visual Studio Code pomocí palety příkazů spusťte Azure IoT Edge:Přidání modulu IoT Edge.In the same Visual Studio Code window, use the command palette to run Azure IoT Edge: Add IoT Edge Module. Na paletě příkazů zadejte následující informace o novém modulu:In the command palette, provide the following information for your new module:

    VýzvaPrompt HodnotaValue
    Vyberte soubor šablony nasazeníSelect deployment template file Vyberte soubor deployment.template.json ve složce CustomVisionSolution.Select the deployment.template.json file in the CustomVisionSolution folder.
    Vyberte šablonu moduluSelect module template Vyberte Modul Python.Select Python Module
    Zadejte název moduluProvide a module name Pojmenujte modul cameraCapture.Name your module cameraCapture
    Zadejte pro modul úložiště imagí DockeruProvide Docker image repository for the module Nahraďte localhost:5000 hodnotou přihlašovacího serveru pro váš registr kontejneru Azure.Replace localhost:5000 with the login server value for your Azure container registry.

    Konečný řetězec vypadá takto: <název_registru>.azurecr.io/cameracapture.The final string looks like <registryname>.azurecr.io/cameracapture.

    V okně VS Code se nový modul načte do pracovního prostoru řešení a aktualizuje se soubor deployment.template.json.The VS Code window loads your new module in the solution workspace, and updates the deployment.template.json file. Teď by se měly zobrazit dvě složky modulu: classifier a cameraCapture.Now you should see two module folders: classifier and cameraCapture.

  2. Otevřete soubor main.py ve složce modules / cameraCapture.Open the main.py file in the modules / cameraCapture folder.

  3. Celý soubor nahraďte následujícím kódem.Replace the entire file with the following code. Tento vzorový kód odesílá požadavky POST do služby pro zpracování obrázků spuštěné v modulu classifier.This sample code sends POST requests to the image-processing service running in the classifier module. Pro tento kontejner modulu zadáme ukázkový obrázek, který se použije v požadavcích.We provide this module container with a sample image to use in the requests. Kód pak zabalí odpověď do zprávy pro službu IoT Hub a odešle ji do výstupní fronty.It then packages the response as an IoT Hub message and sends it to an output queue.

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license. See LICENSE file in the project root for
    # full license information.
    
    import time
    import sys
    import os
    import requests
    import json
    from azure.iot.device import IoTHubModuleClient, Message
    
    # global counters
    SENT_IMAGES = 0
    
    # global client
    CLIENT = None
    
    # Send a message to IoT Hub
    # Route output1 to $upstream in deployment.template.json
    def send_to_hub(strMessage):
        message = Message(bytearray(strMessage, 'utf8'))
        CLIENT.send_message_to_output(message, "output1")
        global SENT_IMAGES
        SENT_IMAGES += 1
        print( "Total images sent: {}".format(SENT_IMAGES) )
    
    # Send an image to the image classifying server
    # Return the JSON response from the server with the prediction result
    def sendFrameForProcessing(imagePath, imageProcessingEndpoint):
        headers = {'Content-Type': 'application/octet-stream'}
    
        with open(imagePath, mode="rb") as test_image:
            try:
                response = requests.post(imageProcessingEndpoint, headers = headers, data = test_image)
                print("Response from classification service: (" + str(response.status_code) + ") " + json.dumps(response.json()) + "\n")
            except Exception as e:
                print(e)
                print("Response from classification service: (" + str(response.status_code))
    
        return json.dumps(response.json())
    
    def main(imagePath, imageProcessingEndpoint):
        try:
            print ( "Simulated camera module for Azure IoT Edge. Press Ctrl-C to exit." )
    
            try:
                global CLIENT
                CLIENT = IoTHubModuleClient.create_from_edge_environment()
            except Exception as iothub_error:
                print ( "Unexpected error {} from IoTHub".format(iothub_error) )
                return
    
            print ( "The sample is now sending images for processing and will indefinitely.")
    
            while True:
                classification = sendFrameForProcessing(imagePath, imageProcessingEndpoint)
                send_to_hub(classification)
                time.sleep(10)
    
        except KeyboardInterrupt:
            print ( "IoT Edge module sample stopped" )
    
    if __name__ == '__main__':
        try:
            # Retrieve the image location and image classifying server endpoint from container environment
            IMAGE_PATH = os.getenv('IMAGE_PATH', "")
            IMAGE_PROCESSING_ENDPOINT = os.getenv('IMAGE_PROCESSING_ENDPOINT', "")
        except ValueError as error:
            print ( error )
            sys.exit(1)
    
        if ((IMAGE_PATH and IMAGE_PROCESSING_ENDPOINT) != ""):
            main(IMAGE_PATH, IMAGE_PROCESSING_ENDPOINT)
        else: 
            print ( "Error: Image path or image-processing endpoint missing" )
    
  4. Uložte soubor main.py.Save the main.py file.

  5. Otevřete soubor requrements.txt.Open the requrements.txt file.

  6. Přidejte nový řádek pro knihovnu, která se zahrne do kontejneru.Add a new line for a library to include in the container.

    requests
    
  7. Uložte soubor requirements.txt.Save the requirements.txt file.

Přidání testovacího obrázku do kontejneruAdd a test image to the container

Místo toho, abychom k poskytování kanálu obrázků pro tento scénář použili skutečnou kameru, použijeme jeden testovací obrázek.Instead of using a real camera to provide an image feed for this scenario, we're going to use a single test image. Testovací obrázek je součástí úložiště GitHub s trénovacími obrázky, které jste stáhli dříve v tomto kurzu.A test image is included in the GitHub repo that you downloaded for the training images earlier in this tutorial.

  1. Přejděte k testovacímu obrázku, který se nachází v umístění Cognitive-CustomVision-Windows / Samples / Images / Test.Navigate to the test image, located at Cognitive-CustomVision-Windows / Samples / Images / Test.

  2. Zkopírujte soubor test_image.jpg.Copy test_image.jpg

  3. Přejděte do adresáře řešení IoT Edge a vložte testovací obrázek do složky modules / cameraCapture.Browse to your IoT Edge solution directory and paste the test image in the modules / cameraCapture folder. Obrázek musí být ve stejné složce jako soubor main.py, který jste upravovali v předchozí části.The image should be in the same folder as the main.py file that you edited in the previous section.

  4. Ve Visual Studio Code otevřete soubor Dockerfile.amd64 s modulem cameraCapture.In Visual Studio Code, open the Dockerfile.amd64 file for the cameraCapture module.

  5. Za řádek, který určuje pracovní adresář (WORKDIR /app) přidejte následující řádek kódu:After the line that establishes the working directory, WORKDIR /app, add the following line of code:

    ADD ./test_image.jpg .
    
  6. Uložte soubor Dockerfile.Save the Dockerfile.

Příprava manifestu nasazeníPrepare a deployment manifest

Zatím jste v tomto kurzu natrénovali model služby Custom Vision pro klasifikaci obrázků stromů a tento model jste zabalili do modulu IoT Edge.So far in this tutorial you've trained a Custom Vision model to classify images of trees, and packaged that model up as an IoT Edge module. Potom jste vytvořili druhý modul, který může odesílat dotazy na server klasifikace obrázků a hlásit jeho výsledky zpět do služby IoT Hub.Then, you created a second module that can query the image classification server and report its results back to IoT Hub. Teď jste připraveni vytvořit manifest nasazení, který informuje zařízení IoT Edge, jak tyto dva moduly společně spustit a provozovat.Now, you're ready to create the deployment manifest that will tell an IoT Edge device how to start and run these two modules together.

Rozšíření IoT Edge pro Visual Studio Code poskytuje v každém řešení IoT Edge šablonu, která vám pomůže vytvořit manifest nasazení.The IoT Edge extension for Visual Studio Code provides a template in each IoT Edge solution to help you create a deployment manifest.

  1. Otevřete soubor deployment.template.json ve složce řešení.Open the deployment.template.json file in the solution folder.

  2. Vyhledejte oddíl moduly , který by měl obsahovat tři moduly: dvě, které jste vytvořili, třídění a cameraCapture, a třetí, který je součástí výchozího nastavení SimulatedTemperatureSensor.Find the modules section, which should contain three modules: the two that you created, classifier and cameraCapture, and a third that's included by default, SimulatedTemperatureSensor.

  3. Odstraňte modul SimulatedTemperatureSensor se všemi jeho parametry.Delete the SimulatedTemperatureSensor module with all of its parameters. Tento modul je zahrnutý za účelem poskytování ukázkových dat pro testovací scénáře, ale v tomto nasazení ho nepotřebujeme.This module is included to provide sample data for test scenarios, but we don't need it in this deployment.

  4. Pokud jste modul klasifikace obrázků pojmenovali jinak než classifier, zkontrolujte teď název a ujistěte se, že obsahuje pouze malá písmena.If you named the image classification module something other than classifier, check the name now and ensure that it's all lowercase. Modul cameraCapture k volání modulu classifier používá knihovnu requests, která všechny požadavky formátuje tak, aby obsahovaly pouze malá písmena, a IoT Edge rozlišuje malá a velká písmena.The cameraCapture module calls the classifier module using a requests library that formats all requests in lowercase, and IoT Edge is case-sensitive.

  5. Aktualizujte parametr createOptions pro modul cameraCapture s použitím následujícího kódu JSON.Update the createOptions parameter for the cameraCapture module with the following JSON. S použitím těchto informací se v kontejneru modulu vytvoří proměnné prostředí, které se načítají v procesu main.py.This information creates environment variables in the module container that are retrieved in the main.py process. Díky zahrnutí těchto informací do manifestu nasazení může změnit obrázek nebo koncový bod, aniž byste museli znovu sestavovat image modulu.By including this information in the deployment manifest, you can change the image or endpoint without having to rebuild the module image.

    "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
    

    Pokud jste modul služby Custom Vision pojmenovali jinak než classifier, aktualizujte odpovídajícím způsobem hodnotu koncového bodu pro zpracování obrázků.If you named your Custom Vision module something other than classifier, update the image-processing endpoint value to match.

  6. V dolní části souboru aktualizujte parametr routes pro modul $edgeHub.At the bottom of the file, update the routes parameter for the $edgeHub module. Výsledky předpovědí z modulu cameraCapture chcete směrovat do služby IoT Hub.You want to route the prediction results from cameraCapture to IoT Hub.

        "routes": {
          "CameraCaptureToIoTHub": "FROM /messages/modules/cameraCapture/outputs/* INTO $upstream"
        },
    

    Pokud jste druhý modul pojmenovali jinak než cameraCapture, aktualizujte odpovídajícím způsobem hodnotu trasy.If you named your second module something other than cameraCapture, update the route value to match.

  7. Uložte soubor deployment.template.json.Save the deployment.template.json file.

Vytvoření a nasazení řešení IoT EdgeBuild and deploy your IoT Edge solution

Když máte vytvořené oba moduly a nakonfigurovanou šablonu manifestu nasazení, jste připraveni sestavit image kontejneru a odeslat je do registru kontejneru.With both modules created and the deployment manifest template configured, you're ready to build the container images and push them to your container registry.

Jakmile budou image ve vašem registru, můžete řešení nasadit do zařízení IoT Edge.Once the images are in your registry, you can deploy the solution to an IoT Edge device. Moduly na zařízení můžete nastavit prostřednictvím služby IoT Hub, ale přistupovat ke službě IoT Hub a zařízením můžete také přes Visual Studio Code.You can set modules on a device through the IoT Hub, but you can also access your IoT Hub and devices through Visual Studio Code. V této části nastavíte přístup ke službě IoT Hub a pak pomocí VS Code nasadíte své řešení do zařízení IoT Edge.In this section, you set up access to your IoT Hub then use VS Code to deploy your solution to your IoT Edge device.

Nejprve sestavte řešení a odešlete ho do registru kontejneru.First, build and push your solution to your container registry.

  1. V průzkumníku VS Code klikněte pravým tlačítkem na soubor deployment.template.json a vyberte Vytvořit a odeslat řešení IoT Edge.In the VS Code explorer, right-click the deployment.template.json file and select Build and push IoT Edge solution. Průběh této operace můžete sledovat v integrovaném terminálu VS Code.You can watch the progress of this operation in the integrated terminal in VS Code.
  2. Všimněte si, že do vašeho řešení, configbylo přidáno nové složky. Rozbalte tuto složku a otevřete soubor Deployment. JSON v části.Notice that a new folder was added to your solution, config. Expand this folder and open the deployment.json file inside.
  3. Zkontrolujte informace v souboru deployment.json.Review the information in the deployment.json file. Soubor deployment.json se vytvoří (nebo aktualizuje) automaticky na základě souboru šablony nasazení, který jste nakonfigurovali, a informací z řešení, včetně souboru .env a souborů module.json.The deployment.json file is created (or updated) automatically based on the deployment template file that you configured and information from the solution, including the .env file and the module.json files.

Pak vyberte své zařízení a nasaďte své řešení.Next, select your device and deploy your solution.

  1. V průzkumníku VS Code rozbalte oddíl Azure IoT Hub Devices (Zařízení Azure IoT Hub).In the VS Code explorer, expand the Azure IoT Hub Devices section.
  2. Klikněte pravým tlačítkem na zařízení, na které chcete cílit nasazení, a vyberte Create deployment for single device (Vytvořit nasazení pro jedno zařízení).Right-click on the device that you want to target with your deployment and select Create deployment for single device.
  3. V Průzkumníku souborů přejděte do složky config uvnitř vašeho řešení a zvolte soubor deployment.json.In the file explorer, navigate to the config folder inside your solution and choose deployment.json. Klikněte na Select Edge deployment manifest (Vybrat manifest nasazení Edge).Click Select Edge deployment manifest.

Pokud nasazení proběhne úspěšně, ve výstupu VS Code se zobrazí potvrzovací zpráva.If the deployment is successful, a confirmation message is printed in the VS Code output. V průzkumníku VS Code rozbalte podrobnosti o zařízení IoT Edge, které jste použili pro toto nasazení.In the VS Code explorer, expand the details about the IoT Edge device that you used for this deployment. Pokud se moduly hned nezobrazí, najeďte kurzorem na nadpis Zařízení Azure IoT Hub, aby se aktivovalo tlačítko pro aktualizaci.Hover your cursor on the Azure IoT Hub Devices header to enable the refresh button if the modules don't show up right away. Spuštění modulů a jejich ohlášení zpět do služby IoT Hub může chvíli trvat.It may take a few moments for the modules to start and report back to IoT Hub.

Můžete také zkontrolovat, jestli jsou na vašem zařízení zprovozněné všechny moduly.You can also check to see that all the modules are up and running on your device itself. Spuštěním následujícího příkazu na vašem zařízení IoT Edge zobrazte stav modulů.On your IoT Edge device, run the following command to see the status of the modules. Spuštění modulů může chvíli trvat.It may take a few moments for the modules to start.

iotedge list

Zobrazení výsledků klasifikaceView classification results

Výsledky modulů můžete zobrazit dvěma způsoby – buď na samotném zařízení během generování a odesílání zpráv, nebo ve Visual Studio Code při příjmu zpráv ve službě IoT Hub.There are two ways to view the results of your modules, either on the device itself as the messages are generated and sent, or from Visual Studio Code as the messages arrive at IoT Hub.

Na svém zařízení si prohlédněte protokoly modulu cameraCapture, kde uvidíte odesílané zprávy a potvrzení jejich příjmu službou IoT Hub.From your device, view the logs of the cameraCapture module to see the messages being sent and the confirmation that they were received by IoT Hub.

iotedge logs cameraCapture

V Visual Studio Code klikněte pravým tlačítkem myši na název vašeho zařízení IoT Edge a vyberte Spustit sledování integrovaného koncového bodu události.From Visual Studio Code, right-click on the name of your IoT Edge device and select Start Monitoring Built-in Event Endpoint.

Výsledky z modulu služby Custom Vision, které se odesílají jako zprávy z modulu cameraCapture, zahrnují pravděpodobnost, s jakou se jedná o obrázek jedlovce nebo sakury.The results from the Custom Vision module, which are sent as messages from the cameraCapture module, include the probability that the image is of either a hemlock or cherry tree. Vzhledem k tomu, že se jedná o obrázek jedlovce, měla by se zobrazit pravděpodobnost 1.0.Since the image is hemlock, you should see the probability as 1.0.

Vyčištění prostředkůClean up resources

Pokud máte v plánu pokračovat k dalšímu doporučenému článku, můžete si vytvořené prostředky a konfigurace uschovat a znovu je použít.If you plan to continue to the next recommended article, you can keep the resources and configurations that you created and reuse them. Také můžete dál používat stejné zařízení IoT Edge jako testovací zařízení.You can also keep using the same IoT Edge device as a test device.

V opačném případě můžete odstranit místní konfigurace a prostředky Azure, které jste použili v tomto článku, abyste se vyhnuli poplatkům.Otherwise, you can delete the local configurations and the Azure resources that you used in this article to avoid charges.

Odstranění prostředků AzureDelete Azure resources

Odstranění prostředků Azure a skupin prostředků je nevratná akce.Deleting Azure resources and resource groups is irreversible. Ujistěte se, že nechtěně neodstraníte nesprávnou skupinu prostředků nebo prostředky.Make sure that you don't accidentally delete the wrong resource group or resources. Pokud jste službu IoT Hub vytvořili uvnitř existující skupiny prostředků obsahující prostředky, které chcete zachovat, odstraňte místo skupiny prostředků pouze samotný prostředek služby IoT Hub.If you created the IoT hub inside an existing resource group that has resources that you want to keep, delete only the IoT hub resource itself, instead of deleting the resource group.

Odstranění prostředků:To delete the resources:

  1. Přihlaste se k webu Azure Portal a potom vyberte Skupiny prostředků.Sign in to the Azure portal and select Resource groups.

  2. Vyberte název skupiny prostředků, která obsahuje vaše testovací prostředky služby IoT Edge.Select the name of the resource group that contains your IoT Edge test resources.

  3. Projděte si seznam prostředků ve vaší skupině prostředků.Review the list of resources contained in your resource group. Pokud chcete odstranit všechny prostředky, můžete vybrat možnost Odstranit skupinu prostředků.If you want to delete all of them, you can select Delete resource group. Pokud chcete odstranit pouze některé prostředky, můžete na ně kliknout a odstranit je jednotlivě.If you want to delete only some of them, you can click into each resource to delete them individually.

Další krokyNext steps

V tomto kurzu jste natrénovali model služby Custom Vision a nasadili jste ho jako modul do zařízení IoT Edge.In this tutorial, you trained a Custom Vision model and deployed it as a module onto an IoT Edge device. Potom jste vytvořili modul, který může odesílat dotazy do služby klasifikace obrázků a hlásit její výsledky zpět do služby IoT Hub.Then you built a module that can query the image classification service and report its results back to IoT Hub.

Pokud chcete vyzkoušet podrobnější verzi tohoto scénáře s živým kanálem z kamery, podívejte si projekt Custom Vision a Azure IoT Edge na Raspberry Pi 3 na GitHubu.If you want to try a more in-depth version of this scenario with a live camera feed, see the Custom Vision and Azure IoT Edge on a Raspberry Pi 3 GitHub project.

Pokračujte dalšími kurzy, ve kterých se seznámíte s dalšími způsoby, jak vám může Azure IoT Edge pomoct přeměnit data na obchodní informace na hraničním zařízení.Continue on to the next tutorials to learn about other ways that Azure IoT Edge can help you turn data into business insights at the edge.