Samouczek: używanie usługi Custom Vision z urządzeniem IoT do raportowania stanów wizualizacji

Ta przykładowa aplikacja ilustruje sposób używania usługi Custom Vision do trenowania urządzenia z aparatem w celu wykrywania stanów wizualnych. Ten scenariusz wykrywania można uruchomić na urządzeniu IoT przy użyciu wyeksportowanego modelu ONNX.

Stan wizualizacji opisuje zawartość obrazu: pusty pokój lub pokój z osobami, pustym podjazdem lub podjazdem z ciężarówką itd. Na poniższej ilustracji widać, jak aplikacja wykrywa, kiedy banan lub jabłko znajduje się przed kamerą.

Animation of a UI labeling fruit in front of the camera

Ten samouczek przedstawia sposób wykonania następujących czynności:

  • Skonfiguruj przykładową aplikację do używania własnych zasobów usługi Custom Vision i IoT Hub.
  • Użyj aplikacji, aby wytrenować projekt usługi Custom Vision.
  • Użyj aplikacji, aby ocenić nowe obrazy w czasie rzeczywistym i wysłać wyniki na platformę Azure.

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

Wymagania wstępne

  • Aby korzystać z usługi Custom Vision Service, należy utworzyć zasoby trenowania i przewidywania usługi Custom Vision na platformie Azure. Aby to zrobić w witrynie Azure Portal, wypełnij okno dialogowe na stronie Tworzenie usługi Custom Vision , aby utworzyć zasób trenowania i przewidywania.

    Ważne

    Ten projekt musi być projektem klasyfikacji obrazów Compact , ponieważ będziemy eksportować model do ONNX później.

  • Należy również utworzyć zasób usługi IoT Hub na platformie Azure.
  • Visual Studio 2015 lub nowszy
  • Opcjonalnie urządzenie IoT z systemem Windows 10 IoT Core w wersji 17763 lub nowszej. Aplikację można również uruchomić bezpośrednio z komputera.
    • W przypadku urządzeń Raspberry Pi 2 i 3 można skonfigurować system Windows 10 bezpośrednio z poziomu aplikacji pulpitu nawigacyjnego IoT. W przypadku innych urządzeń, takich jak DrangonBoard, należy go flashować przy użyciu metody eMMC. Jeśli potrzebujesz pomocy przy konfigurowaniu nowego urządzenia, zobacz Konfigurowanie urządzenia w dokumentacji IoT systemu Windows.

Informacje o aplikacji Alerty wizualne

Aplikacja Alerty wizualne IoT działa w pętli ciągłej, przełączając się między czterema różnymi stanami odpowiednio:

  • Brak modelu: stan braku operacji. Aplikacja będzie stale spać przez jedną sekundę i sprawdzić aparat.
  • Przechwytywanie obrazów szkoleniowych: w tym stanie aplikacja przechwytuje obraz i przekazuje go jako obraz szkoleniowy do docelowego projektu usługi Custom Vision. Następnie aplikacja jest w trybie uśpienia przez 500 ms i powtarza operację do momentu przechwycenia ustawionej docelowej liczby obrazów. Następnie wyzwala szkolenie modelu Custom Vision.
  • Oczekiwanie na wytrenowany model: w tym stanie aplikacja wywołuje interfejs API usługi Custom Vision co sekundę, aby sprawdzić, czy projekt docelowy zawiera wytrenowane iterację. Gdy go znajdzie, pobiera odpowiedni model ONNX do pliku lokalnego i przełącza się do stanu oceniania .
  • Ocenianie: W tym stanie aplikacja używa systemu Windows ML do oceny pojedynczej ramki z aparatu względem lokalnego modelu ONNX. Wynikowa klasyfikacja obrazów jest wyświetlana na ekranie i wysyłana jako komunikat do usługi IoT Hub. Następnie aplikacja spa na jedną sekundę przed oceną nowego obrazu.

Badanie struktury kodu

Następujące pliki obsługują główne funkcje aplikacji.

Plik opis
MainPage.xaml Ten plik definiuje interfejs użytkownika XAML. Hostuje kontrolkę aparatu internetowego i zawiera etykiety używane do aktualizacji stanu.
MainPage.xaml.cs Ten kod steruje zachowaniem interfejsu użytkownika XAML. Zawiera kod przetwarzania maszyny stanu.
CustomVision\CustomVisionServiceWrapper.cs Ta klasa jest otoką, która obsługuje integrację z usługą Custom Vision Service.
CustomVision\CustomVisionONNXModel.cs Ta klasa jest otoką, która obsługuje integrację z usługą Windows ML na potrzeby ładowania modelu ONNX i oceniania obrazów względem niego.
IoTHub\IotHubWrapper.cs Ta klasa jest otoką, która obsługuje integrację z usługą IoT Hub w celu przekazywania wyników oceniania na platformę Azure.

Konfigurowanie aplikacji Alerty wizualne

Wykonaj następujące kroki, aby uzyskać aplikację Alerty wizualne IoT uruchomioną na komputerze lub urządzeniu IoT.

  1. Sklonuj lub pobierz przykład IoTVisualAlerts w witrynie GitHub.
  2. Otwieranie IoTVisualAlerts.sln rozwiązania w programie Visual Studio
  3. Integrowanie projektu usługi Custom Vision:
    1. W skryscie CustomVision\CustomVisionServiceWrapper.cs zaktualizuj zmienną ApiKey przy użyciu klucza trenowania.
    2. Następnie zaktualizuj zmienną Endpoint przy użyciu adresu URL punktu końcowego skojarzonego z kluczem.
    3. Zaktualizuj zmienną targetCVSProjectGuid przy użyciu odpowiedniego identyfikatora projektu usługi Custom Vision, którego chcesz użyć.
  4. Skonfiguruj zasób usługi IoT Hub:
    1. W skryscie IoTHub\IotHubWrapper.cs zaktualizuj s_connectionString zmienną przy użyciu odpowiedniego parametry połączenia dla urządzenia.
    2. W witrynie Azure Portal załaduj wystąpienie usługi IoT Hub, wybierz pozycję Urządzenia IoT w obszarze Eksploratory, wybierz urządzenie docelowe (lub utwórz je w razie potrzeby) i znajdź parametry połączenia w obszarze Podstawowy ciąg Połączenie ion. Ciąg będzie zawierać nazwę centrum IoT Hub, identyfikator urządzenia i klucz dostępu współdzielonego; ma następujący format: {your iot hub name}.azure-devices.net;DeviceId={your device id};SharedAccessKey={your access key}.

Uruchom aplikację

Jeśli używasz aplikacji na komputerze, wybierz pozycję Komputer lokalny dla urządzenia docelowego w programie Visual Studio i wybierz pozycję x64 lub x86 dla platformy docelowej. Następnie naciśnij klawisz F5, aby uruchomić program. Aplikacja powinna uruchomić i wyświetlić kanał informacyjny na żywo z aparatu i komunikat o stanie.

Jeśli wdrażasz na urządzeniu IoT z procesorem ARM, musisz wybrać usługę ARM jako platformę docelową i maszynę zdalną jako urządzenie docelowe. Podaj adres IP urządzenia po wyświetleniu monitu (musi znajdować się w tej samej sieci co komputer). Adres IP można uzyskać z domyślnej aplikacji IoT systemu Windows po uruchomieniu urządzenia i połączeniu go z siecią. Naciśnij klawisz F5, aby uruchomić program.

Po pierwszym uruchomieniu aplikacji nie będzie ona miała żadnej wiedzy na temat stanów wizualnych. Zostanie wyświetlony komunikat o stanie, że żaden model nie jest dostępny.

Przechwytywanie obrazów szkoleniowych

Aby skonfigurować model, należy umieścić aplikację w stanie Przechwytywanie obrazów szkoleniowych. Wykonaj jedną z następujących czynności:

  • Jeśli używasz aplikacji na komputerze, użyj przycisku w prawym górnym rogu interfejsu użytkownika.
  • Jeśli używasz aplikacji na urządzeniu IoT, wywołaj EnterLearningMode metodę na urządzeniu za pośrednictwem usługi IoT Hub. Można go wywołać za pomocą wpisu urządzenia w menu usługi IoT Hub w witrynie Azure Portal lub za pomocą narzędzia takiego jak IoT Hub Device Explorer.

Po wprowadzeniu stanu Przechwytywanie obrazów szkoleniowych aplikacja będzie przechwytywała około dwóch obrazów co sekundę, dopóki nie osiągnie docelowej liczby obrazów. Domyślnie element docelowy to 30 obrazów, ale można ustawić ten parametr, przekazując żądaną liczbę jako argument do EnterLearningMode metody usługi IoT Hub.

Podczas przechwytywania obrazów aplikacja musi uwidocznić aparat w typach stanów wizualnych, które chcesz wykryć (na przykład puste pomieszczenie, pokój z osobami, pustym biurkiem, biurkiem z ciężarówką toy itd.).

Trenowanie modelu usługi Custom Vision

Po zakończeniu przechwytywania obrazów aplikacja przekaże je, a następnie przełączy się do stanu Oczekiwanie na wytrenowany model . Na tym etapie należy przejść do witryny internetowej usługi Custom Vision i utworzyć model na podstawie nowych obrazów szkoleniowych. Poniższa animacja przedstawia przykład tego procesu.

Animation: tagging multiple images of bananas

Aby powtórzyć ten proces przy użyciu własnego scenariusza:

  1. Zaloguj się do witryny internetowej usługi Custom Vision.
  2. Znajdź projekt docelowy, który powinien teraz zawierać wszystkie obrazy szkoleniowe przekazane przez aplikację.
  3. Dla każdego stanu wizualizacji, który chcesz zidentyfikować, wybierz odpowiednie obrazy i ręcznie zastosuj tag.
    • Jeśli na przykład twoim celem jest rozróżnienie między pustym pokojem a pokojem z osobami w nim, zalecamy tagowanie pięciu lub większej liczby obrazów z osobami jako nową klasą, Osoby i oznaczanie pięciu lub większej liczby obrazów bez osób jako tag ujemny. Ułatwi to modelowi rozróżnienie między dwoma stanami.
    • W innym przykładzie, jeśli twoim celem jest przybliżona pełna półka, możesz użyć tagów, takich jak EmptyShelf, PartiallyFullShelf i FullShelf.
  4. Po zakończeniu wybierz przycisk Trenuj .
  5. Po zakończeniu trenowania aplikacja wykryje, że dostępna jest wytrenowana iteracja. Rozpocznie on proces eksportowania wytrenowanego modelu do środowiska ONNX i pobierania go na urządzenie.

Używanie wytrenowanego modelu

Po pobraniu wytrenowanego modelu aplikacja przejdzie do stanu oceniania i zacznie oceniać obrazy z aparatu w pętli ciągłej.

Dla każdego przechwyconego obrazu aplikacja wyświetli górny tag na ekranie. Jeśli stan wizualizacji nie zostanie rozpoznany, zostanie wyświetlony brak dopasowań. Aplikacja wysyła również te komunikaty do usługi IoT Hub, a jeśli wykryto klasę, komunikat będzie zawierać etykietę, współczynnik ufności i właściwość o nazwie detectedClassAlert, która może być używana przez klientów usługi IoT Hub zainteresowanych szybkim routingiem komunikatów na podstawie właściwości.

Ponadto w przykładzie użyto biblioteki Sense HAT do wykrywania, kiedy jest ona uruchomiona na urządzeniu Raspberry Pi z jednostką Sense HAT, dzięki czemu może używać jej jako wyświetlacza wyjściowego, ustawiając wszystkie światła wyświetlane na czerwono za każdym razem, gdy wykryje klasę i nie wykryje niczego.

Ponowne używanie aplikacji

Jeśli chcesz zresetować aplikację z powrotem do pierwotnego stanu, możesz to zrobić, klikając przycisk w prawym górnym rogu interfejsu użytkownika lub wywołując metodę DeleteCurrentModel za pośrednictwem usługi IoT Hub.

W dowolnym momencie możesz powtórzyć krok przekazywania obrazów szkoleniowych, klikając przycisk interfejsu użytkownika w prawym górnym rogu lub ponownie wywołując metodę EnterLearningMode .

Jeśli używasz aplikacji na urządzeniu i musisz ponownie pobrać adres IP (aby nawiązać połączenie zdalne za pośrednictwem klienta zdalnego IoT systemu Windows, na przykład), możesz wywołać GetIpAddress metodę za pośrednictwem usługi IoT Hub.

Czyszczenie zasobów

Usuń projekt usługi Custom Vision, jeśli nie chcesz już go obsługiwać. W witrynie internetowej usługi Custom Vision przejdź do obszaru Projekty i wybierz ikonę kosza w obszarze nowego projektu.

Screenshot of a panel labeled My New Project with a trash can icon

Następne kroki

W tym samouczku skonfigurowano i uruchomiono aplikację, która wykrywa informacje o stanie wizualizacji na urządzeniu IoT i wysyła wyniki do usługi IoT Hub. Następnie zapoznaj się z kodem źródłowym dalej lub wprowadź jedną z sugerowanych modyfikacji poniżej.

  • Dodaj metodę usługi IoT Hub, aby przełączyć aplikację bezpośrednio do stanu Oczekiwanie na wytrenowany model . W ten sposób można wytrenować model przy użyciu obrazów, które nie są przechwytywane przez samo urządzenie, a następnie wypchnąć nowy model do urządzenia na polecenie.
  • Postępuj zgodnie z samouczkiem Wizualizacja danych czujników w czasie rzeczywistym, aby utworzyć pulpit nawigacyjny usługi Power BI w celu wizualizacji alertów usługi IoT Hub wysyłanych przez przykład.
  • Postępuj zgodnie z samouczkiem monitorowania zdalnego IoT, aby utworzyć aplikację logiki, która odpowiada na alerty usługi IoT Hub po wykryciu stanów wizualizacji.