Samouczek: wykonywanie klasyfikacji obrazów na urządzeniach brzegowych za pomocą usługi Custom Vision

Dotyczy:Znacznik wyboru usługi IoT Edge 1.5 IoT Edge 1.5 Znacznik wyboru usługi IoT Edge 1.4 IoT Edge 1.4

Ważne

Obsługiwane są wersje usługi IoT Edge 1.5 LTS i IoT Edge 1.4 LTS. Usługa IoT Edge 1.4 LTS kończy się 12 listopada 2024 r. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

Usługa Azure IoT Edge może usprawnić Twoje rozwiązanie IoT przez przeniesienie obciążeń z chmury na urządzenia brzegowe. Ta funkcja dobrze nadaje się do usług, które przetwarzają duże ilości danych, takich jak modele przetwarzania obrazów. Usługa Azure AI Custom Vision umożliwia tworzenie niestandardowych klasyfikatorów obrazów i wdrażanie ich na urządzeniach jako kontenerach. Te dwie usługi połączone razem pozwalają na uzyskiwanie szczegółowych informacji z obrazów lub strumieni wideo bez konieczności wcześniejszego przeniesienia wszystkich danych poza siedzibę firmy. Usługa Custom Vision udostępnia klasyfikator, który porównuje obraz z wyszkolonym modelem w celu wygenerowania szczegółowych informacji.

Na przykład usługa Custom Vision na urządzeniu usługi IoT Edge może określić, czy ruch na autostradzie jest większy, czy mniejszy niż zwykle, albo czy w hali garażowej są dostępne miejsca parkingowe w jednym rzędzie. Te informacje można udostępnić innej usłudze w celu wykonania akcji.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie klasyfikatora obrazów za pomocą usługi Custom Vision.
  • Tworzenie modułu usługi IoT Edge wysyłającego zapytania do serwera internetowego usługi Custom Vision na urządzeniu.
  • Wysyłanie wyników klasyfikatora obrazów do usługi IoT Hub.

Diagram — architektura samouczka, etap i wdrażanie klasyfikatora

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

Napiwek

Ten samouczek jest uproszczoną wersją usługi Custom Vision i usługi Azure IoT Edge w przykładowym projekcie urządzenia Raspberry Pi 3 . Ten samouczek został zaprojektowany do uruchamiania na maszynie wirtualnej w chmurze i używa obrazów statycznych do trenowania i testowania klasyfikatora obrazów, co jest przydatne dla kogoś, kto dopiero zaczyna oceniać usługę Custom Vision w usłudze IoT Edge. Przykładowy projekt używa sprzętu fizycznego i konfiguruje kanał informacyjny kamery na żywo w celu trenowania i testowania klasyfikatora obrazów, co jest przydatne dla kogoś, kto chce wypróbować bardziej szczegółowy, rzeczywisty scenariusz.

Tworzenie klasyfikatora obrazów za pomocą usługi Custom Vision

W celu utworzenia klasyfikatora obrazów musisz utworzyć projekt usługi Custom Vision i dostarczyć obrazy szkoleniowe. Aby uzyskać więcej informacji na temat kroków, które wykonasz w tej sekcji, zobacz Sposób tworzenia klasyfikatora za pomocą usługi Custom Vision.

Po utworzeniu i wyszkoleniu klasyfikatora obrazów możesz wyeksportować go w postaci kontenera platformy Docker i wdrożyć na urządzeniu usługi IoT Edge.

Tworzenie nowego projektu

  1. W przeglądarce internetowej przejdź do strony internetowej usługi Custom Vision.

  2. Wybierz pozycję Sign in (Zaloguj się) i zaloguj się za pomocą tego samego konta, którego używasz, aby uzyskać dostęp do zasobów platformy Azure.

  3. Wybierz pozycję Nowy projekt.

  4. Utwórz projekt z następującymi wartościami:

    Pole Wartość
    Nazwisko Podaj nazwę dla projektu, na przykład EdgeTreeClassifier.
    opis Opcjonalny opis projektu.
    Zasób Wybierz jedną z grup zasobów platformy Azure zawierającą zasób usługi Custom Vision Service lub utwórz nową , jeśli jeszcze jej nie dodano.
    Typy projektów Klasyfikacja
    Typy klasyfikacji Multiclass (single tag per image) (Multiklasa (pojedynczy tag na obrazie))
    Domeny General (compact) (Ogólne (kompaktowe))
    Możliwości eksportowania Platformy podstawowe (Tensorflow, CoreML, ONNX, ...)
  5. Wybierz pozycję Utwórz projekt.

Przekazywanie obrazów i szkolenie klasyfikatora

Utworzenie klasyfikatora obrazów wymaga zestawu obrazów szkoleniowych i obrazów testowych.

  1. Sklonuj lub pobierz przykładowe obrazy z repozytorium Cognitive-CustomVision-Windows na lokalnej maszynie deweloperskiej.

    git clone https://github.com/Microsoft/Cognitive-CustomVision-Windows.git
    
  2. Wróć do projektu usługi Custom Vision i wybierz pozycję Add images (Dodaj obrazy).

  3. Przejdź do sklonowanego lokalnie repozytorium git, a następnie przejdź do pierwszego folderu obrazów Cognitive-CustomVision-Windows / Samples / Images / Hemlock. Zaznacz wszystkie 10 obrazów w tym folderze, a następnie wybierz pozycję Open (Otwórz).

  4. Dodaj do tej grupy obrazów tag cykuta, a następnie naciśnij klawisz Enter, aby zastosować ten tag.

  5. Wybierz pozycję Upload 10 files (Przekaż 10 plików).

    Przekazywanie plików oznaczonych tagiem choina do usługi Custom Vision

  6. Po pomyślnym przekazaniu obrazów wybierz pozycję Done (Gotowe).

  7. Wybierz ponownie pozycję Add images (Dodaj obrazy).

  8. Przejdź do drugiego folderu obrazów Cognitive-CustomVision-Windows / Samples / Images / Japanese Cherry. Zaznacz wszystkie 10 obrazów w tym folderze, a następnie wybierz pozycję Open (Otwórz).

  9. Dodaj do tej grupy obrazów tag wiśnia japońska, a następnie naciśnij klawisz Enter, aby zastosować ten tag.

  10. Wybierz pozycję Upload 10 files (Przekaż 10 plików). Po pomyślnym przekazaniu obrazów wybierz pozycję Done (Gotowe).

  11. Po oznakowaniu i przekazaniu obu zestawów obrazów wybierz pozycję Train (Szkolenie), aby wyszkolić klasyfikator.

Eksportowanie klasyfikatora

  1. Po wyszkoleniu klasyfikatora wybierz pozycję Eksport (Eksportuj) na stronie Performance (Wydajność) klasyfikatora.

    Eksportowanie wytrenowanego klasyfikatora obrazów

  2. Jako platformę wybierz DockerFile.

  3. Jako wersję wybierz Linux.

  4. Wybierz Eksportuj.

    Eksportowanie w postaci pliku DockerFile z kontenerami systemu Linux

  5. Po zakończeniu eksportowania wybierz pozycję Download (Pobierz) i zapisz pakiet ZIP lokalnie na komputerze. Wyodrębnij wszystkie pliki z pakietu. Te pliki służą do tworzenia modułu usługi IoT Edge zawierającego serwer klasyfikacji obrazów.

W tym miejscu kończy się tworzenie i szkolenie projektu usługi Custom Vision. Wyeksportowane pliki zostaną użyte w następnej sekcji, ale na stronie internetowej usługi Custom Vision to już wszystko.

Tworzenie rozwiązania usługi IoT Edge

Na maszynie deweloperskiej masz teraz pliki dla wersji kontenera Twojego klasyfikatora obrazów. W tej sekcji skonfigurujesz kontener klasyfikatora obrazów tak, aby był on uruchamiany jako moduł usługi IoT Edge. Utworzysz również drugi moduł, który jest wdrażany wraz z klasyfikatorem obrazów. Drugi moduł publikuje żądania do klasyfikatora i wysyła wyniki jako komunikaty do usługi IoT Hub.

Utwórz nowe rozwiązanie

Rozwiązanie jest logicznym sposobem tworzenia i organizowania wielu modułów dla pojedynczego wdrożenia usługi IoT Edge. Rozwiązanie zawiera kod dla co najmniej jednego modułu i manifest wdrożenia, który deklaruje sposób ich konfigurowania na urządzeniu usługi IoT Edge.

  1. W programie Visual Studio Code wybierz pozycję Wyświetl>paletę poleceń, aby otworzyć paletę poleceń programu Visual Studio Code.

  2. W palecie poleceń wprowadź i uruchom polecenie Azure IoT Edge: nowe rozwiązanie usługi IoT Edge. W palecie poleceń podaj następujące informacje, aby utworzyć rozwiązanie:

    Pole Wartość
    Wybierz folder Wybierz lokalizację na komputerze deweloperskim dla programu Visual Studio Code, aby utworzyć pliki rozwiązania.
    Podaj nazwę rozwiązania Wprowadź opisową nazwę rozwiązania, na przykład CustomVisionSolution, lub zaakceptuj nazwę domyślną.
    Wybierz szablon modułu Wybierz pozycję Moduł Python.
    Podaj nazwę modułu Nadaj modułowi nazwę classifier.

    Ważne jest, aby nazwa tego modułu była małą literą. Podczas odwoływania się do modułów usługa IoT Edge rozróżnia wielkość liter, a to rozwiązanie korzysta z biblioteki, która formatuje wszystkie żądania małymi literami.
    Podaj repozytorium obrazów platformy Docker dla modułu Repozytorium obrazów zawiera nazwę rejestru kontenerów oraz nazwę obrazu kontenera. Obraz kontenera jest wstępnie wypełniany w ostatnim kroku. Zastąp wartość localhost:5000 wartością serwera logowania z rejestru kontenerów platformy Azure. Serwer logowania można pobrać ze strony Przegląd rejestru kontenerów w witrynie Azure Portal.

    Ostatni ciąg wygląda jak <nazwa> rejestru.azurecr.io/classifier.

    Udostępnianie repozytorium obrazów platformy Docker

W oknie programu Visual Studio Code zostanie załadowany obszar roboczy rozwiązania usługi IoT Edge.

Dodawanie poświadczeń rejestru

W pliku środowiska przechowywane są poświadczenia rejestru kontenerów udostępniane środowisku uruchomieniowemu usługi IoT Edge. Środowisko uruchomieniowe wymaga tych poświadczeń do ściągnięcia prywatnych obrazów na urządzenie usługi IoT Edge.

Rozszerzenie usługi IoT Edge próbuje ściągnąć poświadczenia rejestru kontenerów z platformy Azure i wypełnić je w pliku środowiska. Sprawdź, czy poświadczenia zostały już uwzględnione. Jeśli nie, dodaj je teraz:

  1. W eksploratorze programu Visual Studio Code otwórz plik env.
  2. Zaktualizuj pola, używając nazwy użytkownika i hasła, które zostały skopiowane z usługi Azure Container Registry.
  3. Zapisz ten plik.

Uwaga

W tym samouczku są używane poświadczenia logowania administratora dla usługi Azure Container Registry, które są wygodne w scenariuszach tworzenia i testowania. Gdy wszystko będzie gotowe do scenariuszy produkcyjnych, zalecamy opcję uwierzytelniania z najmniejszymi uprawnieniami, taką jak jednostki usługi. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do rejestru kontenerów.

Wybieranie architektury docelowej

Obecnie program Visual Studio Code może opracowywać moduły dla urządzeń z systemem Linux AMD64 i Linux ARM32v7. Musisz wybrać architekturę docelową dla każdego rozwiązania, ponieważ kontener jest kompilowany i uruchamiany inaczej dla każdego typu architektury. Wartość domyślna to Linux AMD64, która jest używana na potrzeby tego samouczka.

  1. Otwórz paletę poleceń i wyszukaj pozycję Azure IoT Edge: ustaw domyślną platformę docelową rozwiązania Edge lub wybierz ikonę skrótu na pasku bocznym w dolnej części okna.

  2. Na palecie poleceń wybierz architekturę docelową z listy opcji. Na potrzeby tego samouczka używamy maszyny wirtualnej z systemem Ubuntu jako urządzenia usługi IoT Edge, więc zachowaj wartość domyślną amd64.

Dodawanie klasyfikatora obrazów

Szablon modułu języka Python w programie Visual Studio Code zawiera przykładowy kod, który można uruchomić w celu przetestowania usługi IoT Edge. W tym scenariuszu ten kod nie będzie używany. Zamiast tego wykonaj kroki opisane w tej sekcji, aby zastąpić przykładowy kod wyeksportowanym wcześniej kontenerem klasyfikatora obrazów.

  1. W eksploratorze plików przejdź do pobranego i wyodrębnionego pakietu usługi Custom Vision. Skopiuj całą zawartość z wyodrębnionego pakietu. Powinien on zawierać dwa foldery, app i azureml, oraz dwa pliki, Dockerfile i README.

  2. W eksploratorze plików przejdź do katalogu, w którym program Visual Studio Code miał utworzyć rozwiązanie IoT Edge.

  3. Otwórz folder modułu klasyfikatora. Jeśli w poprzedniej sekcji zostały użyte sugerowane nazwy, struktura folderów wygląda następująco: CustomVisionSolution / modules / classifier.

  4. Wklej pliki do folderu classifier.

  5. Wróć do okna programu Visual Studio Code. W folderze modułu w obszarze roboczym rozwiązania powinny teraz być widoczne pliki klasyfikatora obrazów.

    Obszar roboczy rozwiązania z plikami klasyfikatora obrazów

  6. Otwórz plik module.json w folderze klasyfikatora.

  7. Zaktualizuj parametr platformy, aby wskazać nowy dodany plik Dockerfile i usunąć wszystkie opcje oprócz amd64, która jest jedyną architekturą używaną w tym samouczku.

    "platforms": {
        "amd64": "./Dockerfile"
    }
    
  8. Zapisz zmiany.

Tworzenie modułu symulowanej kamery

W rzeczywistym wdrożeniu usługi Custom Vision istniałaby kamera dostarczająca obrazy na żywo lub strumienie wideo. W tym scenariuszu kamera będzie symulowana za pomocą modułu wysyłającego obraz testowy do klasyfikatora obrazów.

Dodawanie i konfigurowanie nowego modułu

W tej sekcji dodasz nowy moduł do tego samego rozwiązania CustomVisionSolution i podasz kod umożliwiający utworzenie symulowanej kamery.

  1. W tym samym oknie programu Visual Studio Code użyj palety poleceń, aby uruchomić usługę Azure IoT Edge: dodawanie modułu usługi IoT Edge. W palecie poleceń podaj następujące informacje dotyczące nowego modułu:

    Monit Wartość
    Wybierz plik szablonu wdrożenia Wybierz plik deployment.template.json w folderze CustomVisionSolution.
    Wybierz szablon modułu Wybierz pozycję Moduł Python
    Podaj nazwę modułu Nadaj modułowi nazwę cameraCapture
    Podaj repozytorium obrazów platformy Docker dla modułu Zastąp wartość localhost:5000 wartością serwera logowania dla rejestru kontenerów platformy Azure.

    Ostatecznie ciąg będzie wyglądał następująco: <nazwa rejestru>.azurecr.io/cameracapture.

    Okno programu Visual Studio Code ładuje nowy moduł w obszarze roboczym rozwiązania i aktualizuje plik deployment.template.json. Teraz powinny być widoczne dwa foldery modułów: classifier i cameraCapture.

  2. Otwórz plik main.py w folderze modules / cameraCapture.

  3. Zastąp cały plik poniższym kodem. Ten przykładowy kod wysyła żądania POST do usługi przetwarzania obrazów działającej w module klasyfikatora. Ten moduł kontenera udostępniamy z przykładowym obrazem do użycia w żądaniach. Pakuje on następnie odpowiedź jako komunikat usługi IoT Hub i wysyła ją do kolejki wyjściowej.

    # 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("No response from classification service")
                return None
    
        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)
                if classification:
                    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. Zapisz plik main.py.

  5. Otwórz plik requirements.txt.

  6. Dodaj nowy wiersz dotyczący biblioteki, która zostanie uwzględniona w kontenerze.

    requests
    
  7. Zapisz plik requirements.txt.

Dodawanie obrazu testowego do kontenera

Zamiast dostarczać źródło obrazów dla tego scenariusza przy użyciu prawdziwej kamery, użyjemy pojedynczego obrazu testowego. Obraz testowy znajduje się w repozytorium GitHub, które zostało pobrane na potrzeby obrazów szkoleniowych we wcześniejszej części tego samouczka.

  1. Przejdź do obrazu testowego znajdującego się w folderze Cognitive-CustomVision-Windows / Samples / Images / Test.

  2. Skopiuj plik test_image.jpg

  3. Przejdź do katalogu rozwiązania usługi IoT Edge i wklej obraz testowy w folderze modules / cameraCapture. Obraz powinien znajdować się w tym samym folderze co plik main.py, który był edytowany w poprzedniej sekcji.

  4. W programie Visual Studio Code otwórz plik Dockerfile.amd64 modułu cameraCapture.

  5. Po wierszu określającym katalog roboczy WORKDIR /app dodaj następujący wiersz kodu:

    ADD ./test_image.jpg .
    
  6. Zapisz plik Dockerfile.

Przygotowanie manifestu wdrożenia

Do tej pory w ramach tego samouczka wyszkoliliśmy model usługi Custom Vision służący do klasyfikowania obrazów drzew oraz spakowaliśmy go jako moduł usługi IoT Edge. Następnie utworzyliśmy drugi moduł, który może wysyłać zapytania do serwera klasyfikacji obrazów i raportować wyniki do usługi IoT Hub. Teraz możesz przystąpić do tworzenia manifestu wdrożenia, który poinformuje urządzenie usługi IoT Edge, jak uruchamiać te dwa moduły razem.

Rozszerzenie usługi IoT Edge dla programu Visual Studio Code zawiera w każdym rozwiązaniu IoT Edge szablon ułatwiający tworzenie manifestu wdrożenia.

  1. Otwórz plik deployment.template.json w folderze rozwiązania.

  2. Znajdź sekcję modułów , która powinna zawierać trzy moduły: te dwa, które zostały utworzone, klasyfikator i aparatCapture, oraz trzeci dołączony domyślnie element SimulatedTemperatureSensor.

  3. Usuń moduł SimulatedTemperatureSensor ze wszystkimi jego parametrami. Ten moduł jest dołączany w celu dostarczenia przykładowych danych do obsługi scenariuszy testowych, ale w tym wdrożeniu nie jest potrzebny.

  4. Jeśli moduł klasyfikacji obrazów został nazwany inaczej niż classifier, sprawdź teraz tę nazwę i upewnij się, że zawiera tylko małe litery. Moduł cameraCapture wywołuje moduł klasyfikatora, używając biblioteki żądań, która formatuje wszystkie żądania małymi literami, a w usłudze IoT Edge jest uwzględniana wielkość liter.

  5. Zaktualizuj parametr createOptions modułu cameraCapture za pomocą poniższego kodu JSON. Te informacje tworzą w kontenerze modułu zmienne środowiskowe, które są pobierane w procesie main.py. Umieszczając te informacje w manifeście wdrożenia, możesz zmienić obraz lub punkt końcowy bez konieczności ponownego tworzenia obrazu modułu.

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

    Jeśli moduł usługi Custom Vision został nazwany inaczej niż classifier, zaktualizuj odpowiednio wartość punktu końcowego przetwarzania obrazów.

  6. W dolnej części pliku zaktualizuj parametr routes modułu $edgeHub. Chcesz rozesłać wyniki prognozowania z modułu cameraCapture do usługi IoT Hub.

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

    Jeśli drugi moduł został nazwany inaczej niż cameraCapture, zaktualizuj odpowiednio wartość trasy.

  7. Zapisz plik deployment.template.json.

Kompilowanie i wypychanie rozwiązania usługi IoT Edge

Mając utworzone oba moduły i skonfigurowany szablon manifestu wdrożenia, możesz przystąpić do tworzenia obrazów kontenerów i wypychania ich do rejestru kontenerów.

Gdy obrazy znajdą się w rejestrze, możesz wdrożyć rozwiązanie na urządzeniu usługi IoT Edge. Moduły można ustawić na urządzeniu za pomocą usługi IoT Hub, ale dostęp do usługi IoT Hub i urządzeń można również uzyskać za pomocą programu Visual Studio Code. W tej sekcji skonfigurujesz dostęp do usługi IoT Hub, a następnie użyjesz programu Visual Studio Code do wdrożenia rozwiązania na urządzeniu usługi IoT Edge.

Najpierw skompiluj swoje rozwiązanie i wypchnij je do rejestru kontenerów.

  1. Otwórz zintegrowany terminal programu Visual Studio Code, wybierając pozycję Wyświetl>terminal.

  2. Zaloguj się do platformy Docker, wprowadzając następujące polecenie w terminalu. Zaloguj się przy użyciu nazwy użytkownika, hasła i serwera logowania z rejestru kontenerów platformy Azure. Te wartości można pobrać z sekcji Klucze dostępu rejestru w witrynie Azure Portal.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    Może zostać wyświetlone ostrzeżenie o zabezpieczeniach, które zaleca użycie polecenia --password-stdin. Chociaż najlepsze rozwiązanie jest zalecane w przypadku scenariuszy produkcyjnych, wykracza poza zakres tego samouczka. Aby uzyskać więcej informacji, zobacz dokumentację logowania platformy Docker.

  3. W eksploratorze programu Visual Studio Code kliknij prawym przyciskiem myszy plik deployment.template.json i wybierz pozycję Kompiluj i wypychaj rozwiązanie usługi IoT Edge.

    Polecenie kompilacji i wypychania uruchamia trzy operacje. Najpierw tworzy nowy folder w rozwiązaniu o nazwie config , który zawiera pełny manifest wdrożenia, który jest zbudowany z informacji w szablonie wdrożenia i innych plikach rozwiązań. Po drugie uruchamia docker build polecenie w celu skompilowania obrazu kontenera na podstawie odpowiedniego pliku dockerfile dla architektury docelowej. Następnie zostanie uruchomione polecenie docker push , aby wypchnąć repozytorium obrazów do rejestru kontenerów.

    Ten proces może potrwać kilka minut po raz pierwszy, ale jest szybszy przy następnym uruchomieniu poleceń.

Wdrażanie modułów na urządzeniu

Użyj eksploratora programu Visual Studio Code i rozszerzenia usługi Azure IoT Edge, aby wdrożyć projekt modułu na urządzeniu usługi IoT Edge. Masz już manifest wdrożenia przygotowany dla danego scenariusza— plik deployment.amd64.json w folderze config. Teraz wystarczy wybrać urządzenie, które ma otrzymać wdrożenie.

Upewnij się, że urządzenie usługi IoT Edge jest uruchomione.

  1. W eksploratorze programu Visual Studio Code w sekcji Azure IoT Hub rozwiń węzeł Urządzenia , aby wyświetlić listę urządzeń IoT.

  2. Kliknij prawym przyciskiem myszy nazwę urządzenia usługi IoT Edge, a następnie wybierz pozycję Utwórz wdrożenie dla pojedynczego urządzenia.

  3. Wybierz plik deployment.amd64.json w folderze config, a następnie wybierz pozycję Manifest wdrożenia przeglądarki Edge. Nie używaj pliku deployment.template.json.

  4. W obszarze urządzenia rozwiń węzeł Moduły , aby wyświetlić listę wdrożonych i uruchomionych modułów. Wybierz przycisk odświeżenia. Powinny zostać wyświetlone nowe moduły klasyfikatora i cameraCapture uruchomione wraz z $edgeAgent i $edgeHub.

Możesz również sprawdzić, czy wszystkie moduły są wdrożone i uruchomione na samym urządzeniu. Na urządzeniu usługi IoT Edge uruchom następujące polecenie, aby wyświetlić stan modułów.

iotedge list

Uruchomienie modułów może potrwać kilka minut. Środowisko uruchomieniowe usługi IoT Edge musi otrzymać nowy manifest wdrożenia, ściągnąć obrazy modułów ze środowiska uruchomieniowego kontenera, a następnie uruchomić każdy nowy moduł.

Wyświetlanie wyników klasyfikacji

Istnieją dwa sposoby wyświetlania wyników modułów: na samym urządzeniu podczas generowania i wysłania komunikatów lub z poziomu programu Visual Studio Code podczas docierania komunikatów do usługi IoT Hub.

Na urządzeniu możesz wyświetlać dzienniki modułu cameraCapture, aby zobaczyć wysyłane komunikaty i potwierdzenie, że zostały one odebrane przez usługę IoT Hub.

iotedge logs cameraCapture

Na przykład powinny zostać wyświetlone dane wyjściowe podobne do następujących:

admin@vm:~$ iotedge logs cameraCapture
Simulated camera module for Azure IoT Edge. Press Ctrl-C to exit.
The sample is now sending images for processing and will indefinitely.
Response from classification service: (200) {"created": "2023-07-13T17:38:42.940878", "id": "", "iteration": "", "predictions": [{"boundingBox": null, "probability": 1.0, "tagId": "", "tagName": "hemlock"}], "project": ""}

Total images sent: 1
Response from classification service: (200) {"created": "2023-07-13T17:38:53.444884", "id": "", "iteration": "", "predictions": [{"boundingBox": null, "probability": 1.0, "tagId": "", "tagName": "hemlock"}], "project": ""}

Możesz również wyświetlać komunikaty z poziomu programu Visual Studio Code. Kliknij prawym przyciskiem myszy nazwę urządzenia usługi IoT Edge i wybierz pozycję Rozpocznij monitorowanie wbudowanego punktu końcowego zdarzeń.

[IoTHubMonitor] [2:43:36 PM] Message received from [vision-device/cameraCapture]:
{
  "created": "2023-07-13T21:43:35.697782",
  "id": "",
  "iteration": "",
  "predictions": [
    {
      "boundingBox": null,
      "probability": 1,
      "tagId": "",
      "tagName": "hemlock"
    }
  ],
  "project": ""
}

Uwaga

Początkowo w danych wyjściowych modułu cameraCapture mogą pojawić się błędy połączenia. Jest to spowodowane opóźnieniem między wdrażaniem i uruchamianiem modułów.

Moduł cameraCapture automatycznie ponownie odbiera połączenie do momentu pomyślnego zakończenia. Po pomyślnym nawiązaniu połączenia zobaczysz oczekiwane komunikaty klasyfikacji obrazów.

Wyniki z modułu Custom Vision, które są wysyłane jako komunikaty z modułu cameraCapture, obejmują prawdopodobieństwo, że obraz pochodzi z drzewa szesnasowego lub wiśniowego. Ponieważ obraz przedstawia cykutę, powinno być widoczne prawdopodobieństwo 1.0.

Czyszczenie zasobów

Jeśli zamierzasz przejść do kolejnego zalecanego artykułu, możesz zachować utworzone zasoby oraz konfiguracje i użyć ich ponownie. Możesz także nadal używać tego samego urządzenia usługi IoT Edge jako urządzenia testowego.

W przeciwnym razie możesz usunąć konfiguracje lokalne i zasoby platformy Azure użyte w tym artykule, aby uniknąć naliczania opłat.

Usuwanie zasobów platformy Azure

Usuwanie zasobów i grup zasobów platformy Azure jest nieodwracalne. Uważaj, aby nie usunąć przypadkowo niewłaściwych zasobów lub niewłaściwej grupy zasobów. Jeśli centrum IoT zostało utworzone w istniejącej grupie zasobów zawierającej zasoby, które chcesz zachować, usuń tylko sam zasób centrum IoT, a nie grupę zasobów.

Aby usunąć zasoby:

  1. Zaloguj się do witryny Azure Portal, a następnie wybierz pozycję Grupy zasobów.

  2. Wybierz nazwę grupy zasobów, która zawiera zasoby testowe usługi IoT Edge.

  3. Przejrzyj listę zasobów zawartych w grupie zasobów. Jeśli chcesz usunąć je wszystkie, możesz wybrać pozycję Usuń grupę zasobów. Jeśli chcesz usunąć tylko niektóre z nich, możesz kliknąć poszczególne zasoby, aby usunąć je pojedynczo.

Następne kroki

W tym samouczku wyszkoliliśmy model usługi Custom Vision i wdrożyliśmy go jako moduł na urządzeniu usługi IoT Edge. Następnie skompilowaliśmy moduł, który może wysyłać zapytania do usługi klasyfikacji obrazów i raportować wyniki do usługi IoT Hub.

Przejdź do następnych samouczków, aby dowiedzieć się więcej o innych sposobach, które usługa Azure IoT Edge może pomóc w przekształcaniu danych w szczegółowe informacje biznesowe na urządzeniach brzegowych.