Share via


Självstudie: Använda Custom Vision med en IoT-enhet för att rapportera visuella tillstånd

Den här exempelappen visar hur du använder Custom Vision för att träna en enhet med en kamera för att identifiera visuella tillstånd. Du kan köra det här identifieringsscenariot på en IoT-enhet med hjälp av en exporterad ONNX-modell.

Ett visuellt tillstånd beskriver innehållet i en bild: ett tomt rum eller ett rum med personer, en tom uppfart eller en uppfart med en lastbil och så vidare. På bilden nedan kan du se appen identifiera när en banan eller ett äpple placeras framför kameran.

Animation of a UI labeling fruit in front of the camera

De här självstudierna visar hur du:

  • Konfigurera exempelappen så att den använder egna Custom Vision- och IoT Hub-resurser.
  • Använd appen för att träna ditt Custom Vision-projekt.
  • Använd appen för att poängsätta nya bilder i realtid och skicka resultaten till Azure.

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Förutsättningar

  • Om du vill använda Custom Vision Service måste du skapa resurser för Custom Vision Training and Prediction i Azure. Om du vill göra det i Azure-portalen fyller du i dialogrutan på sidan Skapa Custom Vision för att skapa både en tränings- och förutsägelseresurs.

    Viktigt!

    Det här projektet måste vara ett kompakt bildklassificeringsprojekt eftersom vi kommer att exportera modellen till ONNX senare.

  • Du måste också skapa en IoT Hub-resurs i Azure.
  • Visual Studio 2015 eller senare
  • Du kan också använda en IoT-enhet som kör Windows 10 IoT Core version 17763 eller senare. Du kan också köra appen direkt från datorn.
    • För Raspberry Pi 2 och 3 kan du konfigurera Windows 10 direkt från IoT-instrumentpanelsappen. För andra enheter, till exempel DrangonBoard, måste du flasha den med eMMC-metoden. Om du behöver hjälp med att konfigurera en ny enhet kan du läsa Konfigurera enheten i Windows IoT-dokumentationen.

Om appen Visuella aviseringar

Appen IoT Visual Alerts körs i en kontinuerlig loop och växlar mellan fyra olika tillstånd efter behov:

  • Ingen modell: Ett no-op-tillstånd. Appen kommer kontinuerligt att sova i en sekund och kontrollera kameran.
  • Avbilda träningsbilder: I det här tillståndet fångar appen en bild och laddar upp den som en träningsbild till custom vision-målets projekt. Appen ligger sedan i viloläge i 500 ms och upprepar åtgärden tills det angivna målantalet bilder tas. Sedan utlöses träningen av Custom Vision-modellen.
  • Väntar på tränad modell: I det här tillståndet anropar appen Custom Vision-API:et varje sekund för att kontrollera om målprojektet innehåller en tränad iteration. När den hittar en laddar den ned motsvarande ONNX-modell till en lokal fil och växlar till bedömningstillståndet.
  • Bedömning: I det här tillståndet använder appen Windows ML för att utvärdera en enda ram från kameran mot den lokala ONNX-modellen. Den resulterande bildklassificeringen visas på skärmen och skickas som ett meddelande till IoT Hub. Appen ligger sedan i viloläge i en sekund innan den gör en ny bild.

Granska kodstrukturen

Följande filer hanterar appens huvudfunktioner.

Fil beskrivning
MainPage.xaml Den här filen definierar XAML-användargränssnittet. Den är värd för webbkamerakontrollen och innehåller de etiketter som används för statusuppdateringar.
MainPage.xaml.cs Den här koden styr beteendet för XAML-användargränssnittet. Den innehåller tillståndsmaskinens bearbetningskod.
CustomVision\CustomVisionServiceWrapper.cs Den här klassen är en omslutning som hanterar integrering med Custom Vision Service.
CustomVision\CustomVisionONNXModel.cs Den här klassen är en omslutning som hanterar integrering med Windows ML för inläsning av ONNX-modellen och bedömning av bilder mot den.
IoTHub\IotHubWrapper.cs Den här klassen är en omslutning som hanterar integrering med IoT Hub för att ladda upp poängresultat till Azure.

Konfigurera appen Visuella aviseringar

Följ de här stegen för att få IoT Visual Alerts-appen att köras på din dator eller IoT-enhet.

  1. Klona eller ladda ned exemplet IoTVisualAlerts på GitHub.
  2. Öppna lösningen IoTVisualAlerts.sln i Visual Studio
  3. Integrera ditt Custom Vision-projekt:
    1. I skriptet CustomVision\CustomVisionServiceWrapper.cs uppdaterar du variabeln ApiKey med din träningsnyckel.
    2. Uppdatera sedan variabeln Endpoint med den slutpunkts-URL som är associerad med nyckeln.
    3. Uppdatera variabeln targetCVSProjectGuid med motsvarande ID för det Custom Vision-projekt som du vill använda.
  4. Konfigurera IoT Hub-resursen:
    1. I skriptet IoTHub\IotHubWrapper.cs uppdaterar du variabeln s_connectionString med rätt anslutningssträng för enheten.
    2. I Azure-portalen läser du in din IoT Hub-instans, väljer IoT-enheter under Utforskare, väljer på målenheten (eller skapar en om det behövs) och hittar anslutningssträng under Primär Anslut ionssträng. Strängen innehåller ditt IoT Hub-namn, enhets-ID och en delad åtkomstnyckel. det har följande format: {your iot hub name}.azure-devices.net;DeviceId={your device id};SharedAccessKey={your access key}.

Kör appen

Om du kör appen på datorn väljer du Lokal dator för målenheten i Visual Studio och väljer x64 eller x86 för målplattformen. Tryck sedan på F5 för att köra programmet. Appen bör starta och visa live-flödet från kameran och ett statusmeddelande.

Om du distribuerar till en IoT-enhet med en ARM-processor måste du välja ARM som målplattform och Fjärrdator som målenhet. Ange IP-adressen för din enhet när du uppmanas att göra det (den måste finnas i samma nätverk som datorn). Du kan hämta IP-adressen från Windows IoT-standardappen när du startar enheten och ansluter den till nätverket. Tryck på F5 för att köra programmet.

När du kör appen för första gången har den ingen kunskap om visuella tillstånd. Det visar ett statusmeddelande om att ingen modell är tillgänglig.

Avbilda träningsbilder

Om du vill konfigurera en modell måste du placera appen i tillståndet Fånga träningsbilder . Utför något av följande steg:

  • Om du kör appen på datorn använder du knappen i det övre högra hörnet i användargränssnittet.
  • Om du kör appen på en IoT-enhet anropar EnterLearningMode du metoden på enheten via IoT Hub. Du kan anropa den via enhetsposten i IoT Hub-menyn på Azure-portalen eller med ett verktyg som IoT Hub Device Explorer.

När appen går in i avbildningstillståndet avbildas ungefär två bilder varje sekund tills den har nått målantalet bilder. Som standard är målet 30 bilder, men du kan ange den här parametern genom att skicka önskat tal som ett argument till EnterLearningMode IoT Hub-metoden.

När appen tar bilder måste du exponera kameran för de typer av visuella tillstånd som du vill identifiera (till exempel ett tomt rum, ett rum med personer, ett tomt skrivbord, ett skrivbord med en leksaksbil och så vidare).

Träna Custom Vision-modellen

När appen har hämtat bilder laddar den upp dem och växlar sedan till tillståndet Väntar på tränad modell . Nu måste du gå till Custom Vision-webbplatsen och skapa en modell baserat på de nya träningsbilderna. Följande animering visar ett exempel på den här processen.

Animation: tagging multiple images of bananas

Så här upprepar du den här processen med ditt eget scenario:

  1. Logga in på Custom Vision-webbplatsen.
  2. Hitta målprojektet, som nu ska ha alla träningsbilder som appen har laddat upp.
  3. För varje visuellt tillstånd som du vill identifiera väljer du lämpliga bilder och tillämpar taggen manuellt.
    • Om ditt mål till exempel är att skilja mellan ett tomt rum och ett rum med personer i det rekommenderar vi att du taggar fem eller fler bilder med personer som en ny klass, Personer och taggar fem eller fler bilder utan personer som negativ tagg. Detta hjälper modellen att skilja mellan de två tillstånden.
    • Ett annat exempel är att om målet är att beräkna hur full en hylla är kan du använda taggar som EmptyShelf, PartiallyFullShelf och FullShelf.
  4. När du är klar väljer du knappen Träna .
  5. När träningen är klar identifierar appen att en tränad iteration är tillgänglig. Den startar processen med att exportera den tränade modellen till ONNX och ladda ned den till enheten.

Använda den tränade modellen

När appen laddar ned den tränade modellen växlar den till bedömningstillståndet och börjar bedöma bilder från kameran i en kontinuerlig loop.

För varje avbildad bild visar appen den översta taggen på skärmen. Om den inte känner igen det visuella tillståndet visas inga matchningar. Appen skickar också dessa meddelanden till IoT Hub, och om det finns en klass som identifieras kommer meddelandet att innehålla etiketten, konfidenspoängen och en egenskap som heter detectedClassAlert, som kan användas av IoT Hub-klienter som är intresserade av att utföra snabb meddelanderoutning baserat på egenskaper.

Dessutom använder exemplet ett Sense HAT-bibliotek för att identifiera när det körs på en Raspberry Pi med en Sense HAT-enhet, så att det kan använda det som utdatavisning genom att ställa in alla visningsljus på rött när den identifierar en klass och tom när den inte identifierar något.

Återanvänd appen

Om du vill återställa appen till dess ursprungliga tillstånd kan du göra det genom att klicka på knappen i det övre högra hörnet av användargränssnittet eller genom att anropa metoden DeleteCurrentModel via IoT Hub.

När som helst kan du upprepa steget för att ladda upp träningsbilder genom att klicka på den övre högra användargränssnittsknappen eller anropa EnterLearningMode metoden igen.

Om du kör appen på en enhet och behöver hämta IP-adressen igen (till exempel för att upprätta en fjärranslutning via Windows IoT Remote Client) kan du anropa GetIpAddress metoden via IoT Hub.

Rensa resurser

Ta bort ditt Custom Vision-projekt om du inte längre vill underhålla det. Gå till ProjektCustom Vision-webbplatsen och välj papperskorgsikonen under det nya projektet.

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

Nästa steg

I den här självstudien konfigurerar och kör du ett program som identifierar information om visuellt tillstånd på en IoT-enhet och skickar resultatet till IoT Hub. Utforska sedan källkoden ytterligare eller gör någon av de föreslagna ändringarna nedan.

  • Lägg till en IoT Hub-metod för att växla appen direkt till tillståndet Väntar på tränad modell . På så sätt kan du träna modellen med bilder som inte fångas av själva enheten och sedan push-överföra den nya modellen till enheten med kommandot .
  • Följ självstudien Visualisera sensordata i realtid för att skapa en Power BI-instrumentpanel för att visualisera IoT Hub-aviseringarna som skickas av exemplet.
  • Följ självstudiekursen för IoT-fjärrövervakning för att skapa en logikapp som svarar på IoT Hub-aviseringarna när visuella tillstånd identifieras.