Kurz: Použití služby Custom Vision se zařízením IoT k hlášení stavů vizuálů

Tato ukázková aplikace ukazuje, jak pomocí služby Custom Vision vytrénovat zařízení fotoaparátem k detekci vizuálních stavů. Tento scénář detekce můžete spustit na zařízení IoT pomocí exportovaného modelu ONNX.

Vizuální stav popisuje obsah obrázku: prázdná místnost nebo místnost s lidmi, prázdná cesta nebo příjezdová cesta s nákladním vozem atd. Na následujícím obrázku uvidíte aplikaci, která zjistí, kdy je banán nebo jablko umístěné před fotoaparátem.

Animation of a UI labeling fruit in front of the camera

V tomto kurzu se dozvíte, jak:

  • Nakonfigurujte ukázkovou aplikaci tak, aby používala vlastní prostředky služby Custom Vision a IoT Hub.
  • Pomocí aplikace můžete vytrénovat projekt Custom Vision.
  • Pomocí aplikace můžete ohodnocet nové obrázky v reálném čase a odeslat výsledky do Azure.

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Požadavky

  • Pokud chcete použít službu Custom Vision Service, budete muset v Azure vytvořit prostředky pro trénování a predikce služby Custom Vision. Uděláte to tak, že na webu Azure Portal vyplníte dialogové okno na stránce Vytvořit vlastní zpracování obrazu a vytvoříte prostředek trénování i predikce.

    Důležité

    Tento projekt musí být kompaktním projektem klasifikace obrázků, protože model budeme exportovat do ONNX později.

  • Budete také muset vytvořit prostředek IoT Hubu v Azure.
  • Visual Studio 2015 nebo novější
  • Volitelně můžete zařízení IoT se systémem Windows 10 IoT Core verze 17763 nebo vyšší. Aplikaci můžete spustit také přímo z počítače.
    • Pro Raspberry Pi 2 a 3 můžete nastavit Windows 10 přímo z aplikace IoT Dashboard. U jiných zařízení, jako je DrangonBoard, budete ho muset bliknout pomocí metody eMMC. Pokud potřebujete pomoc s nastavením nového zařízení, přečtěte si téma Nastavení zařízení v dokumentaci k Windows IoT.

Informace o aplikaci Vizuální upozornění

Aplikace IoT Visual Alerts běží v průběžné smyčce a podle potřeby přepíná mezi čtyřmi různými stavy:

  • Žádný model: Stav no-op. Aplikace bude nepřetržitě spát po dobu jedné sekundy a zkontroluje kameru.
  • Zachycení trénovacích obrázků: V tomto stavu aplikace zachytí obrázek a nahraje ho jako trénovací obrázek do cílového projektu Custom Vision. Aplikace pak přejde do režimu spánku po dobu 500 ms a zopakuje operaci, dokud nebude zachycen cílový počet obrázků. Pak aktivuje trénování modelu Custom Vision.
  • Čekání na natrénovaný model: V tomto stavu aplikace volá rozhraní API služby Custom Vision každou sekundu, aby zkontrolovala, jestli cílový projekt obsahuje vytrénovanou iteraci. Když ho najde, stáhne odpovídající model ONNX do místního souboru a přepne do stavu bodování .
  • Bodování: V tomto stavu aplikace používá Windows ML k vyhodnocení jednoho snímku z fotoaparátu proti místnímu modelu ONNX. Výsledná klasifikace obrázků se zobrazí na obrazovce a odešle se jako zpráva do IoT Hubu. Aplikace pak po dobu jedné sekundy přejde do režimu spánku před bodováním nového obrázku.

Prozkoumání struktury kódu

Následující soubory zpracovávají hlavní funkce aplikace.

Soubor Popis
MainPage.xaml Tento soubor definuje uživatelské rozhraní XAML. Hostuje ovládací prvek webové kamery a obsahuje popisky používané pro aktualizace stavu.
MainPage.xaml.cs Tento kód řídí chování uživatelského rozhraní XAML. Obsahuje kód pro zpracování stavového počítače.
CustomVision\CustomVisionServiceWrapper.cs Tato třída je obálka, která zpracovává integraci se službou Custom Vision Service.
CustomVision\CustomVisionONNXModel.cs Tato třída je obálka, která zpracovává integraci s Windows ML pro načítání modelu ONNX a bodování obrázků do něj.
IoTHub\IotHubWrapper.cs Tato třída je obálka, která zpracovává integraci se službou IoT Hub pro nahrávání výsledků vyhodnocování do Azure.

Nastavení aplikace Vizuální upozornění

Pomocí těchto kroků získáte aplikaci IoT Visual Alerts spuštěnou na počítači nebo zařízení IoT.

  1. Naklonujte nebo stáhněte ukázku IoTVisualAlerts na GitHubu.
  2. Otevření řešení IoTVisualAlerts.sln v sadě Visual Studio
  3. Integrace projektu Custom Vision:
    1. Ve skriptu CustomVision\CustomVisionServiceWrapper.cs aktualizujte proměnnou ApiKey pomocí trénovacího klíče.
    2. Potom aktualizujte proměnnou Endpoint adresou URL koncového bodu přidruženou k vašemu klíči.
    3. Aktualizujte proměnnou targetCVSProjectGuid odpovídajícím ID projektu Custom Vision, který chcete použít.
  4. Nastavte prostředek IoT Hubu:
    1. Ve skriptu IoTHub\IotHubWrapper.cs aktualizujte s_connectionString proměnnou správnými připojovací řetězec pro vaše zařízení.
    2. Na webu Azure Portal načtěte instanci ioT Hubu, v průzkumníkech vyberte zařízení IoT, vyberte cílové zařízení (nebo ji v případě potřeby vytvořte) a vyhledejte připojovací řetězec v části Primární řetězec Připojení ionu. Řetězec bude obsahovat název služby IoT Hub, ID zařízení a sdílený přístupový klíč; má následující formát: {your iot hub name}.azure-devices.net;DeviceId={your device id};SharedAccessKey={your access key}.

Spustit aplikaci

Pokud aplikaci spouštíte na počítači, vyberte místní počítač pro cílové zařízení v sadě Visual Studio a jako cílovou platformu vyberte x64 nebo x86 . Potom program spusťte stisknutím klávesy F5. Aplikace by měla spustit a zobrazit živý informační kanál z fotoaparátu a stavové zprávy.

Pokud nasazujete na zařízení IoT s procesorem ARM, musíte jako cílové zařízení vybrat ARM a jako cílové zařízení vzdálený počítač . Po zobrazení výzvy zadejte IP adresu vašeho zařízení (musí být ve stejné síti jako váš počítač). IP adresu můžete získat z výchozí aplikace Windows IoT, jakmile zařízení spustíte a připojíte ji k síti. Stisknutím klávesy F5 program spusťte.

Když aplikaci spustíte poprvé, nebude mít žádné znalosti o vizuálních stavech. Zobrazí se stavová zpráva, že není k dispozici žádný model.

Zachycení trénovacích obrázků

Pokud chcete nastavit model, musíte aplikaci umístit do stavu Zachytávání trénovacích obrázků . Proveďte jeden z následujících kroků:

  • Pokud aplikaci spouštíte na počítači PC, použijte tlačítko v pravém horním rohu uživatelského rozhraní.
  • Pokud aplikaci spouštíte na zařízení IoT, zavolejte EnterLearningMode metodu na zařízení prostřednictvím IoT Hubu. Můžete ho volat prostřednictvím položky zařízení v nabídce IoT Hubu na webu Azure Portal nebo pomocí nástroje, jako je IoT Hub Device Explorer.

Když aplikace přejde do stavu Zachytávání trénovacích obrázků , zachytí přibližně dvě image každou sekundu, dokud nedosáhne cílového počtu obrázků. Ve výchozím nastavení je cílem 30 obrázků, ale tento parametr můžete nastavit předáním požadovaného čísla jako argumentu EnterLearningMode metodě IoT Hubu.

Zatímco aplikace zachytává obrázky, musíte zpřístupnit kameru typům vizuálních stavů, které chcete rozpoznat (například prázdná místnost, místnost s lidmi, prázdný stůl, stůl s nákladním vozem atd.).

Trénování modelu Custom Vision

Jakmile aplikace dokončí zachytávání obrázků, nahraje je a pak přepne do stavu Čekání na trénovaný model . V tuto chvíli musíte přejít na web Služby Custom Vision a vytvořit model založený na nových trénovacích obrázcích. Následující animace ukazuje příklad tohoto procesu.

Animation: tagging multiple images of bananas

Pokud chcete tento proces opakovat s vlastním scénářem:

  1. Přihlaste se k webu Custom Vision.
  2. Najděte svůj cílový projekt, který by teď měl obsahovat všechny trénovací obrázky, které aplikace nahrála.
  3. Pro každý vizuální stav, který chcete identifikovat, vyberte příslušné obrázky a značku použijte ručně.
    • Pokud je vaším cílem například rozlišovat mezi prázdnou místností a místností s lidmi, doporučujeme označit pět nebo více obrázků s lidmi jako novou třídu, Lidé a označit pět nebo více obrázků bez lidí jako negativní značku. To pomůže modelu rozlišovat mezi těmito dvěma stavy.
    • Jako další příklad, pokud vaším cílem je odhadnout, jak plná police je, pak můžete použít značky, jako je EmptyShelf, PartiallyFullShelf a FullShelf.
  4. Až budete hotovi, vyberte tlačítko Trénovat .
  5. Po dokončení trénování aplikace zjistí, že je k dispozici trénovaná iterace. Spustí proces exportu natrénovaného modelu do ONNX a jeho stažení do zařízení.

Použití vytrénovaného modelu

Jakmile aplikace stáhne vytrénovaný model, přepne do stavu bodování a začne bodovat obrázky z fotoaparátu ve smyčce s průběžnou smyčkou.

U každého zachyceného obrázku aplikace zobrazí horní značku na obrazovce. Pokud vizuální stav nerozpozná, zobrazí se žádná shoda. Aplikace také odesílá tyto zprávy do IoT Hubu a pokud je zjištěna třída, zpráva bude obsahovat popisek, skóre spolehlivosti a vlastnost s názvem detectedClassAlert, kterou můžou používat klienti IoT Hubu, kteří mají zájem o rychlé směrování zpráv na základě vlastností.

Kromě toho ukázka používá knihovnu Sense HAT k detekci, kdy běží na Raspberry Pi s jednotkou Sense HAT, takže ji může použít jako výstupní displej nastavením všech světel zobrazení na červenou, kdykoli zjistí třídu a prázdnou, když nic nezjistí.

Opakované použití aplikace

Pokud chcete aplikaci obnovit zpět do původního stavu, můžete to udělat tak, že kliknete na tlačítko v pravém horním rohu uživatelského rozhraní nebo vyvoláte metodu DeleteCurrentModel prostřednictvím IoT Hubu.

V libovolném okamžiku můžete zopakovat krok nahrávání trénovacích obrázků kliknutím na tlačítko pravého horního uživatelského rozhraní nebo opětovným voláním EnterLearningMode metody.

Pokud aplikaci spouštíte na zařízení a potřebujete ip adresu znovu načíst (například pro navázání vzdáleného připojení přes vzdáleného klienta Windows IoT), můžete metodu GetIpAddress volat prostřednictvím IoT Hubu.

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

Pokud ho už nechcete udržovat, odstraňte projekt Custom Vision. Na webu Custom Vision přejděte na Projekty a vyberte ikonu koše pod novým projektem.

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

Další kroky

V tomto kurzu jste nastavili a spustili aplikaci, která detekuje informace o stavu vizuálu na zařízení IoT a odesílá výsledky do IoT Hubu. Dále prozkoumejte zdrojový kód dále nebo proveďte některou z navrhovaných úprav níže.

  • Přidejte metodu IoT Hubu, která aplikaci přepne přímo do stavu Čekání na natrénovaný model . Tímto způsobem můžete model vytrénovat pomocí imagí, které samotné zařízení nezachytí, a pak nový model odeslat do zařízení pomocí příkazu.
  • Postupujte podle kurzu Vizualizace dat snímačů v reálném čase a vytvořte řídicí panel Power BI pro vizualizaci výstrah IoT Hubu odesílaných ukázkou.
  • Postupujte podle kurzu vzdáleného monitorování IoT a vytvořte aplikaci logiky, která reaguje na výstrahy služby IoT Hub při zjištění stavů vizuálů.