Sdílet prostřednictvím


HoloLens (1. generace) a Azure 307: Strojové učení


Poznámka:

Kurzy Mixed Reality Academy byly navrženy s HoloLensem (1. generace) a imerzivními náhlavními soupravami hybridní reality. Proto máme pocit, že je důležité nechat tyto kurzy zavedené pro vývojáře, kteří stále hledají pokyny při vývoji těchto zařízení. Tyto kurzy nebudou aktualizovány nejnovějšími sadami nástrojů ani interakcemi používanými pro HoloLens 2. Budou zachovány, aby pokračovaly v práci na podporovaných zařízeních. Bude k dispozici nová série kurzů, které budou publikovány v budoucnu, které předvádějí, jak vyvíjet pro HoloLens 2. Toto oznámení se při publikování aktualizuje odkazem na tyto kurzy.


konečný produkt -start

V tomto kurzu se dozvíte, jak přidat funkce Machine Learning (ML) do aplikace hybridní reality pomocí nástroje Azure Machine Learning Studio (classic).

Azure Machine Learning Studio (classic) je služba Microsoftu, která vývojářům poskytuje velký počet algoritmů strojového učení, které můžou pomoct se vstupem, výstupem, přípravou a vizualizací dat. Z těchto komponent je pak možné vyvíjet experiment prediktivní analýzy, iterovat na něm a používat ho k trénování modelu. Po trénování můžete model zprovoznit v cloudu Azure, aby pak mohl ohodnotit nová data. Další informace najdete na stránce Azure Machine Learning Studio (Classic).

Po dokončení tohoto kurzu budete mít aplikaci pro imerzivní náhlavní soupravu hybridní reality a naučíte se, jak to udělat:

  1. Zadejte tabulku prodejních dat na portálu Azure Machine Learning Studio (Classic) a navrhujte algoritmus pro predikci budoucích prodejů oblíbených položek.
  2. Vytvořte projekt Unity, který může přijímat a interpretovat prediktivní data ze služby ML.
  3. Zobrazte data predikace vizuálně v projektu Unity, a to prostřednictvím poskytování nejoblíbenějších prodejních položek na polici.

V aplikaci je na vás, jak integrovat výsledky s návrhem. Tento kurz je navržený tak, aby vás naučil, jak integrovat službu Azure s projektem Unity. Vaším úkolem je využít znalosti získané z tohoto kurzu k vylepšení aplikace hybridní reality.

Tento kurz je samostatný kurz, který přímo nezahrnuje žádná další cvičení hybridní reality.

Podpora zařízení

Kurz HoloLens Imerzivní náhlavní soupravy
MR a Azure 307: Strojové učení ✔️ ✔️

Poznámka:

I když se tento kurz primárně zaměřuje na imerzivní náhlavní soupravy Windows Mixed Reality (VR), můžete také použít to, co se v tomto kurzu naučíte, na Microsoft HoloLens. Při sledování kurzu uvidíte poznámky o všech změnách, které možná budete potřebovat k podpoře HoloLensu. Při použití HoloLensu si můžete během hlasového zachycení všimnout určité ozvěny.

Požadavky

Poznámka:

Tento kurz je určený pro vývojáře, kteří mají základní zkušenosti s Unity a C#. Mějte také na paměti, že požadavky a písemné pokyny v tomto dokumentu představují to, co bylo otestováno a ověřeno v době psaní (květen 2018). Můžete používat nejnovější software, jak je uvedeno v článku o instalaci nástrojů, i když by se nemělo předpokládat, že informace v tomto kurzu budou dokonale odpovídat tomu, co najdete v novějším softwaru, než je uvedeno níže.

Pro tento kurz doporučujeme následující hardware a software:

Než začnete

Abyste se vyhnuli problémům při sestavování tohoto projektu, důrazně doporučujeme vytvořit projekt uvedený v tomto kurzu v kořenové nebo téměř kořenové složce (dlouhé cesty ke složkám můžou způsobovat problémy v době sestavení).

Kapitola 1 – Nastavení účtu služby Azure Storage

Pokud chcete používat rozhraní Azure Translator API, budete muset nakonfigurovat instanci služby, která bude dostupná pro vaši aplikaci.

  1. Přihlaste se k webu Azure Portal.

    Poznámka:

    Pokud ještě nemáte účet Azure, budete ho muset vytvořit. Pokud tento kurz sledujete v situaci v učebně nebo testovacím prostředí, požádejte svého instruktora nebo některého z proktorů, aby vám pomohli nastavit nový účet.

  2. Po přihlášení klikněte v nabídce vlevo na Účty úložiště.

    Snímek obrazovky s oknem Microsoft Azure, které zobrazuje položku Účty úložiště v levé navigační nabídce

    Poznámka:

    Slovo Nový mohlo být nahrazeno vytvořením prostředku na novějších portálech.

  3. Na kartě Účty úložiště klikněte na Přidat.

    Snímek obrazovky s oknem Microsoft Azure, které zobrazuje obrazovku Účty úložiště a zvýrazněné tlačítko Přidat

  4. Na panelu Vytvořit účet úložiště:

    1. Vložte název svého účtu, mějte na paměti, že toto pole přijímá jenom číslice a malá písmena.

    2. Jako model nasazení vyberte Resource Manager.

    3. Jako druh účtu vyberte Úložiště (pro obecné účely v1).

    4. Výkon – vyberte Standard.

    5. Pro replikaci vyberte geograficky redundantní úložiště jen pro čtení (RA-GRS).

    6. Zabezpečený přenos ponechte jako zakázaný.

    7. Vyberte nějaké předplatné.

    8. Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci pro kolekci prostředků Azure. Doporučujeme zachovat všechny služby Azure přidružené k jednomu projektu (například k těmto testovacím prostředím) v rámci společné skupiny prostředků).

      Pokud si chcete přečíst další informace o skupinách prostředků Azure, navštivte prosím článek o skupině prostředků.

    9. Určete umístění vaší skupiny prostředků (pokud vytváříte novou skupinu prostředků). Umístění by ideálně bylo v oblasti, ve které by aplikace běžela. Některé prostředky Azure jsou dostupné jenom v určitých oblastech.

  5. Budete také muset potvrdit, že jste porozuměli podmínkám a ujednáním použitým pro tuto službu.

    Snímek obrazovky s dialogovým oknem Vytvořit účet úložiště, ve kterém se zobrazují informace, které uživatel vyplnil do požadovaných textových polí

  6. Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.

  7. Po vytvoření instance služby se na portálu zobrazí oznámení.

    Snímek obrazovky s oznámením o úspěšném nasazení, které uživatele informuje, že nasazení do skupiny prostředků proběhlo úspěšně

Kapitola 2 – Azure Machine Learning Studio (classic)

Pokud chcete používat Azure Machine Learning, budete muset nakonfigurovat instanci služby Machine Learning, aby byla pro vaši aplikaci dostupná.

  1. Na webu Azure Portal klikněte v levém horním rohu na Nový a vyhledejte pracovní prostor Machine Learning Studio, stiskněte Enter.

    Snímek obrazovky s oknem Microsoft Azure, které zobrazuje pracovní prostor Machine Learning Studio v podokně obsahu

  2. Na nové stránce najdete popis služby Machine Learning Studio Workspace Service. V levém dolním rohu této výzvy klikněte na tlačítko Vytvořit a vytvořte přidružení k této službě.

  3. Po kliknutí na Vytvořit se zobrazí panel, kde potřebujete zadat podrobnosti o nové službě Machine Learning Studio:

    1. Vložte požadovaný název pracovního prostoru pro tuto instanci služby.

    2. Vyberte nějaké předplatné.

    3. Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci pro kolekci prostředků Azure. Doporučujeme zachovat všechny služby Azure přidružené k jednomu projektu (například k těmto testovacím prostředím) v rámci společné skupiny prostředků).

      Pokud si chcete přečíst další informace o skupinách prostředků Azure, navštivte prosím článek o skupině prostředků.

    4. Určete umístění vaší skupiny prostředků (pokud vytváříte novou skupinu prostředků). Umístění by ideálně bylo v oblasti, ve které by aplikace běžela. Některé prostředky Azure jsou dostupné jenom v určitých oblastech. Měli byste použít stejnou skupinu prostředků, kterou jste použili k vytvoření služby Azure Storage v předchozí kapitole.

    5. V části Účet úložiště klikněte na Použít existující, potom klikněte na rozevírací nabídku a potom klikněte na účet úložiště, který jste vytvořili v poslední kapitole.

    6. V rozevírací nabídce vyberte příslušnou cenovou úroveň pracovního prostoru.

    7. V části Plán webové služby klikněte na Vytvořit nový a vložte název do textového pole.

    8. V části Cenová úroveň plánu webové služby vyberte cenovou úroveň podle vašeho výběru. Úroveň vývojového testování s názvem DEVTEST Standard by vám měla být k dispozici bez poplatků.

    9. Budete také muset potvrdit, že jste porozuměli podmínkám a ujednáním použitým pro tuto službu.

    10. Klikněte na Vytvořit.

      Snímek obrazovky s dialogovým oknem Azure Machine Learning Studio, ve kterém se zobrazují informace, které uživatel zadal do textových polí

  4. Jakmile kliknete na Vytvořit, budete muset počkat, až se služba vytvoří, může to chvíli trvat.

  5. Po vytvoření instance služby se na portálu zobrazí oznámení.

    Snímek obrazovky s oknem Microsoft Azure, které zobrazuje nepřečtené oznámení v navigační nabídce

  6. Kliknutím na oznámení můžete prozkoumat novou instanci služby.

    Snímek obrazovky s oznámením o úspěšném nasazení, které uživatele informuje, že nasazení pracovního prostoru do skupiny prostředků proběhlo úspěšně

  7. Kliknutím na tlačítko Přejít k prostředku v oznámení můžete prozkoumat novou instanci služby.

  8. Na zobrazené stránce v části Další odkazy klikněte na Spustit Machine Learning Studio, který váš prohlížeč nasměruje na portál Machine Learning Studio.

    Snímek obrazovky s oknem Microsoft Azure, které zobrazuje zvýrazněný odkaz Spustit Machine Learning Studio v podokně obsahu

  9. Pomocí tlačítka Přihlásit se v pravém horním rohu nebo uprostřed se přihlaste k nástroji Machine Learning Studio (classic).

    Snímek obrazovky s oknem Machine Learning Studio se zvýrazněným tlačítkem Přihlásit se

Kapitola 3 – Machine Learning Studio (klasické): Nastavení datové sady

Jedním ze způsobů, jak algoritmy strojového učení fungují, je analýza existujících dat a následné pokusy o predikci budoucích výsledků na základě existující datové sady. Obecně to znamená, že čím více existujících dat máte, tím lépe bude algoritmus předpovídat budoucí výsledky.

Pro účely tohoto kurzu je k dispozici ukázková tabulka s názvem ProductsTableCSV a můžete si ji stáhnout zde.

Důležité

Výše uvedený .zip soubor obsahuje productsTableCSV i .unitypackage, které budete potřebovat v kapitole 6. Tento balíček je také součástí této kapitoly, i když je oddělený od souboru CSV.

Tato ukázková datová sada obsahuje záznam o nejprodávanějších objektech v každé hodině každého dne v roce 2017.

Snímek obrazovky s oknem Microsoft Excelu, které zobrazuje ukázkovou datovou sadu nejprodávanějších objektů v každé hodině každého dne v roce 2017

Například dne 1. dne 2017, v 1:00 (hodina 13), nejprodávanější položkou byla sůl a pepř.

Tato ukázková tabulka obsahuje 9998 položek.

  1. Vraťte se na portál Machine Learning Studio (Classic) a přidejte tuto tabulku jako datovou sadu pro váš ML. Uděláte to tak , že kliknete na tlačítko + Nový v levém dolním rohu obrazovky.

    Snímek obrazovky klasického portálu Microsoft Azure Machine Learning Studio se zvýrazněným tlačítkem Nový v nabídce

  2. Oddíl bude v dolní části a v levém navigačním panelu. Klikněte na Datovou sadu a pak napravo od této položky z místního souboru.

    Snímek obrazovky s dialogovým oknem Nový, ve kterém jsou zvýrazněné položky nabídky Datová sada a Z místního souboru

  3. Nahrajte novou datovou sadu následujícím postupem:

    1. Zobrazí se okno pro nahrání, kde můžete procházet pevný disk pro novou datovou sadu.

      Snímek obrazovky s dialogovým oknem Nahrát novou datovou sadu, ve kterém se zobrazuje tlačítko Procházet, aby uživatel našel a vybral data, která chcete nahrát.

    2. Po výběru a zpět v okně pro nahrání nechte políčko nezaškrtnuto.

    3. Do textového pole níže zadejte ProductsTableCSV.csv jako název datové sady (i když by se mělo přidat automaticky).

    4. V rozevírací nabídce pro typ vyberte Obecný soubor CSV se záhlavím (.csv).

    5. Stiskněte tlačítko v pravém dolním rohu okna pro nahrání a vaše datová sada se nahraje.

Kapitola 4 – Machine Learning Studio (klasické): Experiment

Než budete moct vytvořit systém strojového učení, budete muset vytvořit experiment, abyste ověřili teorii o vašich datech. S výsledky budete vědět, jestli potřebujete více dat, nebo pokud mezi daty a možným výsledkem není žádná korelace.

Zahájení vytváření experimentu:

  1. Klikněte znovu na tlačítko + Nový v levém dolním rohu stránky a potom klikněte na Experiment>Prázdný experiment.

    Snímek obrazovky s oknem Microsoft Azure Machine Learning Studio, ve kterém je vybraná položka nabídky Experiment

  2. Zobrazí se nová stránka s prázdným experimentem:

  3. Na panelu vlevo rozbalte uložené datové sady Moje datové sady> a přetáhněte ProductsTableCSV na plátno experimentu.

    Snímek obrazovky s oknem Experiment, které zobrazuje rozbalenou složku My Datasets (Moje datové sady) v nabídce a Products Table C S V na plátně experimentu

  4. Na panelu vlevo rozbalte ukázku transformace>dat a rozdělení. Potom přetáhněte položku Rozdělit data na plátno experimentu. Položka Rozdělit data rozdělí sadu dat do dvou částí. Jednu část použijete k trénování algoritmu strojového učení. Druhá část se použije k vyhodnocení přesnosti vygenerovaného algoritmu.

    Snímek obrazovky s oknem Experiment, které zobrazuje položky Oddíl a Ukázka a Rozdělení dat v nabídce s použitým rozdělením dat na plátno

  5. Na pravém panelu (zatímco je vybrána položka Rozdělit data na plátně), upravte zlomek řádků v první výstupní datové sadě na 0,7. Tím se data rozdělí na dvě části, první část bude 70 % dat a druhá část bude zbývající 30 %. Pokud chcete zajistit náhodné rozdělení dat, ujistěte se, že je zaškrtnuté políčko Náhodné rozdělení .

    Snímek obrazovky s panelem Vlastnosti, který zobrazuje vyplněné náhodné rozdělení a pole Zlomek řádků bylo nastaveno na 0 bod 7.

  6. Přetáhněte připojení ze základu položky ProductsTableCSV na plátně do horní části položky Rozdělit data. Tím připojíte položky a odešlete výstup datové sady ProductsTableCSV (data) do vstupu Rozdělit data.

    Snímek obrazovky s plátnem experimentu, který znázorňuje spojení nakreslené mezi tabulkami Products Table C S V dot c s v a Split Data

  7. Na panelu Experimenty na levé straně rozbalte Machine Learning>Train. Přetáhněte položku trénování modelu na plátno experimentu. Plátno by mělo vypadat stejně jako dole.

    Snímek obrazovky s plátnem experimentu, který znázorňuje spojení nakreslené mezi tabulkami Products Table C S V v a Split Data s trénovacím modelem níže

  8. Z levého dolního rohu položky Rozdělit data přetáhněte připojení do pravého horního rohu položky Trénování modelu. První 70% rozdělení z datové sady použije trénování modelu trénování algoritmu.

    Snímek obrazovky plátna experimentu znázorňující propojení mezi tabulkami Products Table C S V dot c v, Split Data a Train Model

  9. Vyberte položku Trénování modelu na plátně a na panelu Vlastnosti (na pravé straně okna prohlížeče) klikněte na tlačítko Pro výběr sloupce Spustit.

  10. Do textového pole zadejte produkt a stiskněte Enter, produkt se nastaví jako sloupec, který bude trénovat předpovědi. Potom kliknutím na zaškrtněte políčko v pravém dolním rohu a zavřete dialogové okno výběru.

    Snímek obrazovky s dialogovým oknem Vybrat jeden sloupec, který zobrazuje zvýrazněný sloupec produktu v nabídce sloupců

  11. Vytrénujete algoritmus logistické regrese s více třídami, který bude predikovat nejprodávanější produkt na základě hodiny dne a data. Je nad rámec tohoto dokumentu vysvětlit podrobnosti o různých algoritmech poskytovaných studio Azure Machine Learning, ale další informace najdete v stručné nápovědě k algoritmům strojového učení.

  12. Na panelu položek experimentu vlevo rozbalte položku Machine Learning>Initialize Model>Classification a přetáhněte položku logistické regrese s více třídami na plátno experimentu.

  13. Připojte výstup z dolní části logistické regrese multiclass k levému vstupu položky Trénování modelu .

    Snímek obrazovky plátna experimentu znázorňující trénování modelu připojeného k logistické regresi s více třídami a rozdělením dat

  14. V seznamu položek experimentu na panelu vlevo rozbalte Skóre strojového učení>a přetáhněte položku Určení skóre modelu na plátno.

  15. Připojte výstup z dolní části trénování modelu k levému hornímu vstupu modelu skóre.

  16. Připojte výstup z pravého dolního rohu z rozdělení dat k pravému hornímu vstupu položky Určení skóre modelu .

    Snímek obrazovky s plátnem experimentu, který zobrazuje model skóre připojený k trénování modelu a rozdělení dat

  17. V seznamu položek experimentu na panelu vlevo rozbalte položku Machine Learning>Evaluate a přetáhněte položku Vyhodnotit model na plátno.

  18. Připojte výstup z modelu skóre k levému hornímu vstupu vyhodnocovaného modelu.

    Snímek obrazovky s plátnem experimentu, který zobrazuje model vyhodnocení připojený k modelu hodnocení

  19. Vytvořili jste svůj první experiment strojového učení. Teď můžete experiment uložit a spustit. V nabídce v dolní části stránky klikněte na tlačítko Uložit a uložte experiment a potom kliknutím na Spustit spusťte experiment.

    Snímek obrazovky s nabídkou Plátno experimentu se zvýrazněnými tlačítky Uložit a Spustit

  20. Stav experimentu můžete zobrazit v pravém horním rohu plátna. Chvíli počkejte, než se experiment dokončí.

    Pokud máte velkou (skutečnou) datovou sadu, je pravděpodobné, že spuštění experimentu může trvat hodiny.

    Snímek obrazovky s oknem Plátno experimentu, ve kterém se zobrazuje stav experimentu v pravém horním rohu

  21. Klikněte pravým tlačítkem myši na položku Vyhodnotit model na plátně a v místní nabídce najeďte myší na Výsledky vyhodnocení a pak vyberte Vizualizovat.

    Snímek obrazovky s nabídkou Vyhodnotit model kliknutím pravým tlačítkem myši, která zobrazuje zvýrazněné výsledky vyhodnocení a vizualizovat položky nabídky

  22. Výsledky vyhodnocení se zobrazí s predikovanými výsledky a skutečnými výsledky. K vyhodnocení modelu se používá 30 % původní datové sady, která byla dříve rozdělena. Výsledky nejsou skvělé, v ideálním případě byste měli nejvyšší číslo v každém řádku jako zvýrazněnou položku ve sloupcích.

    Snímek obrazovky s grafem Výsledky, který zobrazuje výsledky experimentu v grafu polí s procenty

  23. Zavřete výsledky.

  24. Pokud chcete použít nově natrénovaný model Machine Learning, musíte ho zveřejnit jako webovou službu. Uděláte to tak, že kliknete na položku nabídky Nastavit webovou službu v nabídce v dolní části stránky a kliknete na prediktivní webovou službu.

    Snímek obrazovky s nabídkou Experiment, která zobrazuje zvýrazněnou položku nabídky Nastavit webovou službu

  25. Vytvoří se nová karta a model trénování sloučený pro vytvoření nové webové služby.

  26. V nabídce v dolní části stránky klepněte na tlačítko Uložit a potom klepněte na tlačítko Spustit. Stav se aktualizuje v pravém horním rohu plátna experimentu.

    Snímek obrazovky s nabídkou Experiment, která zobrazuje zvýrazněné tlačítko nabídky Spustit a položku nabídky Spustit

  27. Po dokončení spuštění se v dolní části stránky zobrazí tlačítko Nasadit webovou službu . Jste připraveni nasadit webovou službu. V nabídce v dolní části stránky klikněte na Nasadit webovou službu (Classic).

    Snímek obrazovky s nabídkou Experiment, která zobrazuje zvýrazněnou položku nabídky Nasadit webovou službu Classic z tlačítka nabídky Nasadit webovou službu

    V prohlížeči se může zobrazit výzva k povolení automaticky otevíraných oken, které byste měli povolit, i když možná budete muset znovu stisknout nasadit webovou službu , pokud se stránka nasazení nezobrazí.

  28. Po vytvoření experimentu budete přesměrováni na stránku řídicího panelu, kde se zobrazí klíč rozhraní API. Prozatím ho zkopírujte do poznámkového bloku, budete ho potřebovat ve svém kódu. Po zaznamenání klíče rozhraní API klikněte na tlačítko REQUEST/RESPONSE v části Výchozí koncový bod pod klíčem.

    Snímek obrazovky s oknem Microsoft Azure Machine Learning Studio, které zobrazuje klíč A P I a zvýrazněný odkaz Odpověď na lomítko požadavku

    Poznámka:

    Pokud na této stránce kliknete na Test, budete moct zadat vstupní data a zobrazit výstup. Zadejte den a hodinu. Ponechte položku produktu prázdnou. Potom klikněte na tlačítko Potvrdit . Výstup v dolní části stránky zobrazí JSON představující pravděpodobnost, že každý produkt bude volbou.

  29. Otevře se nová webová stránka, zobrazí se pokyny a některé příklady o struktuře požadavků vyžadované nástrojem Machine Learning Studio (classic). Zkopírujte identifikátor URI požadavku zobrazený na této stránce do poznámkového bloku.

    Snímek obrazovky se stránkou Dokumentace K odpovědi na žádost A P, která zobrazuje zvýrazněnou žádost U R I

Nyní jste vytvořili systém strojového učení, který poskytuje nejpravděpodobnější produkt, který se bude prodávat na základě historických nákupních dat, který souvisí s časem dne a dne v roce.

K volání webové služby budete potřebovat adresu URL koncového bodu služby a klíč rozhraní API pro službu. V horní nabídce klikněte na kartu Spotřebovávat .

Na stránce Informace o spotřebě se zobrazí informace, které budete muset volat z kódu webové služby. Vytvořte kopii primárního klíče a adresy URL odpovědi požadavku . Budete je potřebovat v další kapitole.

Kapitola 5 – Nastavení projektu Unity

Nastavte a otestujte asistivní náhlavní soupravu hybridní reality.

Poznámka:

Pro tento kurz nebudete vyžadovat ovladače pohybu. Pokud potřebujete podporu nastavení Imerzivní náhlavní soupravy, klikněte sem.

  1. Otevřete Unity a vytvořte nový projekt Unity s názvem MR_MachineLearning. Ujistěte se, že je typ projektu nastavený na 3D.

  2. Při otevření Unity stojí za to zkontrolovat, jestli je výchozí editor skriptů nastavený na Visual Studio. Přejděte na Upravit>předvolby a pak v novém okně přejděte na Externí nástroje. Změňte editor externích skriptů na Visual Studio 2017. Zavřete okno Předvolby.

  3. Dále přejděte do Nastavení sestavení souborů>a přepněte platformu na Univerzální platforma Windows kliknutím na tlačítko Přepnout platformu.

  4. Ujistěte se také, že:

    1. Cílové zařízení je nastavené na libovolné zařízení.

      Pro Microsoft HoloLens nastavte cílové zařízení na HoloLens.

    2. Typ sestavení je nastavený na D3D.

    3. Sada SDK je nastavená na nejnovější nainstalovanou verzi.

    4. Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.

    5. Sestavení a spuštění je nastavené na místní počítač.

    6. Nedělejte si starosti s nastavením scén právě teď, protože jsou k dispozici později.

    7. Zbývající nastavení by teď měla zůstat ve výchozím nastavení.

      Snímek obrazovky s dialogovým oknem Nastavení sestavení, ve kterém je vybraná položka nabídky Univerzální platforma Windows

  5. V okně Nastavení sestavení klikněte na tlačítko Nastavení přehrávače, otevře se související panel v prostoru, kde se nachází inspektor.

  6. Na tomto panelu je potřeba ověřit několik nastavení:

    1. Na kartě Další nastavení:

      1. Skriptovací verze modulu runtime by měla být experimentální (ekvivalent .NET 4.6)

      2. Back-end skriptování by měl být .NET.

      3. Úroveň kompatibility rozhraní API by měla být .NET 4.6

        Snímek obrazovky s kartou Další nastavení, která zobrazuje nastavení, která jsou povolená podle uvedených kroků

    2. Na kartě Nastavení publikování v části Možnosti zaškrtněte:

      • InternetClient

        Snímek obrazovky s kartou Nastavení publikování, která ukazuje, že je možnost internetového klienta povolená pod možnostmi

    3. Dále dolů na panelu v nastavení XR (v části Nastavení publikování níže) zaškrtněte možnost Podpora virtuální reality a ujistěte se, že je přidaná sada WINDOWS Mixed Reality SDK .

      Snímek obrazovky s kartou Nastavení X R, na které je povolená možnost Windows Mixed Reality S D K pod povolenou službou Virtual Reality S D K

  7. Zpět v projektech Unity Nastavení sestavení v jazyce C# se už nezobrazuje šedě. Zaškrtněte políčko vedle tohoto příkazu.

  8. Zavřete okno Nastavení sestavení.

  9. Uložte projekt (SOUBOR > ULOŽIT PROJEKT).

Kapitola 6 – Import balíčku UNITY pro MLProducts

V tomto kurzu si budete muset stáhnout balíček assetu Unity s názvem Azure-MR-307.unitypackage. Součástí tohoto balíčku je scéna se všemi objekty v tomto předem připraveném balíčku, abyste se mohli soustředit na to, jak všechno funguje. Skript PoliceKeeper je k dispozici, i když obsahuje pouze veřejné proměnné pro účely struktury nastavení scény. Budete muset provést všechny ostatní oddíly.

Import tohoto balíčku:

  1. Na řídicím panelu Unity před vámi klikněte na Prostředky v nabídce v horní části obrazovky a potom klikněte na Importovat balíček, Vlastní balíček.

    Snímek obrazovky řídicího panelu Unity, který zobrazuje zvýrazněné položky nabídky Importovat balíček a Vlastní balíček

  2. Pomocí nástroje pro výběr souborů vyberte balíček Azure-MR-307.unitypackage a klikněte na Otevřít.

  3. Zobrazí se vám seznam komponent pro tento prostředek. Kliknutím na Importovat potvrďte import.

    Snímek obrazovky s dialogovým oknem Importovat balíček Unity, ve kterém se zobrazuje import balíčku Azure Machine Learning

  4. Po dokončení importu si všimnete, že se na panelu projektu Unity zobrazily některé nové složky. Jedná se o 3D modely a příslušné materiály, které jsou součástí předpřipravené scény, na které budete pracovat. V tomto kurzu napíšete většinu kódu.

    Snímek obrazovky s panelem projektu Unity, který zobrazuje nově importované složky ve složce Assets

  5. Ve složce Panel projektů klikněte na složku Scény a poklikejte na scénu uvnitř (nazývá se MR_MachineLearningScene). Scéna se otevře (viz obrázek níže). Pokud červené kosočtverce chybí, jednoduše klikněte na tlačítko Gizmos v pravém horním rohu herního panelu.

    Snímek obrazovky s oknem Unity Scene, které zobrazuje zvýrazněnou položku nabídky Gizmos v horní navigaci

Kapitola 7 – Kontrola knihoven DLL v Unity

Aby bylo možné využít použití knihoven JSON (používá se k serializaci a deserializaci), byla implementována knihovna DLL Newtonsoft s balíčkem, který jste přinesli. Knihovna by měla mít správnou konfiguraci, i když stojí za to zkontrolovat (zejména pokud máte problémy s nefunkčním kódem).

Postup:

  • Klikněte levým tlačítkem na soubor Newtonsoft ve složce Plugins a podívejte se na panel inspektoru. Ujistěte se, že je zaškrtnuté políčko Libovolná platforma . Přejděte na kartu UPW a ujistěte se, že není zaškrtnuté políčko Neprovést proces .

    Import knihoven DLL v Unity

Kapitola 8 – Vytvoření třídy PoliceKeeper

Třída PoliceKeeper hostuje metody, které řídí uživatelské rozhraní a produkty vytvářené ve scéně.

Jako součást importovaného balíčku budete mít tuto třídu, i když je neúplná. Teď je čas dokončit tuto třídu:

  1. Poklikejte na skript PoliceKeeper ve složce Scripts a otevřete ho v sadě Visual Studio 2017.

  2. Nahraďte veškerý kód existující ve skriptu následujícím kódem, který nastaví čas a datum a má metodu pro zobrazení produktu.

    using UnityEngine;
    
    public class ShelfKeeper : MonoBehaviour
    {
        /// <summary>
        /// Provides this class Singleton-like behavior
        /// </summary>
        public static ShelfKeeper instance;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for data
        /// </summary>
        public TextMesh dateText;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for time
        /// </summary>
        public TextMesh timeText;
    
        /// <summary>
        /// Provides references to the spawn locations for the products prefabs
        /// </summary>
        public Transform[] spawnPoint;
    
        private void Awake()
        {
            instance = this;
        }
    
        /// <summary>
        /// Set the text of the date in the scene
        /// </summary>
        public void SetDate(string day, string month)
        {
            dateText.text = day + " " + month;
        }
    
        /// <summary>
        /// Set the text of the time in the scene
        /// </summary>
        public void SetTime(string hour)
        {
            timeText.text = hour + ":00";
        }
    
        /// <summary>
        /// Spawn a product on the shelf by providing the name and selling grade
        /// </summary>
        /// <param name="name"></param>
        /// <param name="sellingGrade">0 being the best seller</param>
        public void SpawnProduct(string name, int sellingGrade)
        {
            Instantiate(Resources.Load(name),
                spawnPoint[sellingGrade].transform.position, spawnPoint[sellingGrade].transform.rotation);
        }
    }
    
  3. Než se vrátíte do Unity, nezapomeňte změny uložit v sadě Visual Studio.

  4. Zpátky v Unity Editoru zkontrolujte, že třída PoliceKeeper vypadá takto:

    Snímek obrazovky třídy Police Keeper, která ukazuje, že referenční cíle jsou nastavené na mřížku textu data a časovou síť.

    Důležité

    Pokud váš skript nemá referenční cíle (tj. Date (Text Mesh)), jednoduše přetáhněte odpovídající objekty z panelu hierarchie do cílových polí. Vysvětlení najdete níže v případě potřeby:

    1. Otevřete pole Spawn Point v rámci skriptu komponenty PoliceKeeper tak, že na něj kliknete levým tlačítkem. Zobrazí se dílčí oddíl s názvem Velikost, který označuje velikost pole. Do textového pole vedle pole Velikost zadejte 3 a stiskněte Enter a pod ním se vytvoří tři sloty.

    2. V hierarchii rozbalte objekt Zobrazení času (kliknutím levým tlačítkem myši na šipku vedle ní). Potom v hierarchii klikněte na hlavní kameru, aby inspektor zobrazoval informace.

    3. Na panelu hierarchie vyberte hlavní kameru. Přetáhněte objekty Data a čas z panelu hierarchie do slotů Text data a času v inspektoru hlavní kamery v komponentě PoliceKeeper.

    4. Přetáhněte body spawnu z panelu hierarchie (pod objektem Police) na cíle odkazu na 3 elementy pod polem Spawn Point, jak je znázorněno na obrázku.

      Snímek obrazovky s panelem hierarchie, který ukazuje, že položky nabídky Datum, čas a tři položky nabídky Spawn Point jsou ve třídě Police Keeper.

Kapitola 9 – Vytvoření třídy ProductPrediction

Další třídou, kterou vytvoříte, je třída ProductPrediction .

Tato třída zodpovídá za:

  • Dotazování instance služby Machine Learning Service s aktuálním datem a časem

  • Deserializace odpovědi JSON na použitelná data

  • Interpretace dat a načtení 3 doporučených produktů

  • Volání metod třídy PoliceKeeper k zobrazení dat ve Scéně.

Vytvoření této třídy:

  1. V panelu projektu přejděte do složky Skripty.

  2. Klikněte pravým tlačítkem do složky a vytvořte>skript jazyka C#. Zavolejte skript ProductPrediction.

  3. Poklikáním otevřete nový skript ProductPrediction v sadě Visual Studio 2017.

  4. Pokud se zobrazí dialogové okno Zjištěná úprava souboru, klikněte na *Znovu načíst řešení.

  5. Do horní části třídy ProductPrediction přidejte následující obory názvů:

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;
    using Newtonsoft.Json;
    using UnityEngine.Networking;
    using System.Runtime.Serialization;
    using System.Collections;
    
  6. Do třídy ProductPrediction vložte následující dva objekty, které se skládají z několika vnořených tříd. Tyto třídy se používají k serializaci a deserializaci JSON pro službu Machine Learning Service.

        /// <summary>
        /// This object represents the Prediction request
        /// It host the day of the year and hour of the day
        /// The product must be left blank when serialising
        /// </summary>
        public class RootObject
        {
            public Inputs Inputs { get; set; }
        }
    
        public class Inputs
        {
            public Input1 input1 { get; set; }
        }
    
        public class Input1
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
        /// <summary>
        /// This object containing the deserialised Prediction result
        /// It host the list of the products
        /// and the likelihood of them being sold at current date and time
        /// </summary>
        public class Prediction
        {
            public Results Results { get; set; }
        }
    
        public class Results
        {
            public Output1 output1;
        }
    
        public class Output1
        {
            public string type;
            public Value value;
        }
    
        public class Value
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
  7. Pak nad předchozí kód přidejte následující proměnné (aby související kód JSON byl v dolní části skriptu, pod všechny ostatní kódy a mimo cestu):

        /// <summary>
        /// The 'Primary Key' from your Machine Learning Portal
        /// </summary>
        private string authKey = "-- Insert your service authentication key here --";
    
        /// <summary>
        /// The 'Request-Response' Service Endpoint from your Machine Learning Portal
        /// </summary>
        private string serviceEndpoint = "-- Insert your service endpoint here --";
    
        /// <summary>
        /// The Hour as set in Windows
        /// </summary>
        private string thisHour;
    
        /// <summary>
        /// The Day, as set in Windows
        /// </summary>
        private string thisDay;
    
        /// <summary>
        /// The Month, as set in Windows
        /// </summary>
        private string thisMonth;
    
        /// <summary>
        /// The Numeric Day from current Date Conversion
        /// </summary>
        private string dayOfTheYear;
    
        /// <summary>
        /// Dictionary for holding the first (or default) provided prediction 
        /// from the Machine Learning Experiment
        /// </summary>    
        private Dictionary<string, string> predictionDictionary;
    
        /// <summary>
        /// List for holding product prediction with name and scores
        /// </summary>
        private List<KeyValuePair<string, double>> keyValueList;
    

    Důležité

    Nezapomeňte do proměnných vložit primární klíč a koncový bod odpovědi požadavku z portálu Machine Learning. Následující obrázky ukazují, odkud byste klíč a koncový bod pořídili.

    Snímek obrazovky se sadou Microsoft Azure Machine Learning Studio, která zobrazuje odkaz Na lomítko pod stránkou nápovědy P I

    Snímek obrazovky se stránkou Dokumentace K odpovědi na žádost A P, která zobrazuje zvýrazněnou možnost POST Request U R I

  8. Vložte tento kód do metody Start(). Metoda Start() se volá při inicializaci třídy:

        void Start()
        {
            // Call to get the current date and time as set in Windows
            GetTodayDateAndTime();
    
            // Call to set the HOUR in the UI
            ShelfKeeper.instance.SetTime(thisHour);
    
            // Call to set the DATE in the UI
            ShelfKeeper.instance.SetDate(thisDay, thisMonth);
    
            // Run the method to Get Predication from Azure Machine Learning
            StartCoroutine(GetPrediction(thisHour, dayOfTheYear));
        }
    
  9. Následuje metoda, která shromažďuje datum a čas z Windows a převádí ho do formátu, který náš experiment služby Machine Learning může použít k porovnání s daty uloženými v tabulce.

        /// <summary>
        /// Get current date and hour
        /// </summary>
        private void GetTodayDateAndTime()
        {
            // Get today date and time
            DateTime todayDate = DateTime.Now;
    
            // Extrapolate the HOUR
            thisHour = todayDate.Hour.ToString();
    
            // Extrapolate the DATE
            thisDay = todayDate.Day.ToString();
            thisMonth = todayDate.ToString("MMM");
    
            // Extrapolate the day of the year
            dayOfTheYear = todayDate.DayOfYear.ToString();
        }
    
  10. Metodu Update() můžete odstranit, protože tato třída ji nebude používat.

  11. Přidejte následující metodu, která bude komunikovat aktuální datum a čas koncovému bodu Machine Learning a přijímat odpověď ve formátu JSON.

        private IEnumerator GetPrediction(string timeOfDay, string dayOfYear)
        {
            // Populate the request object 
            // Using current day of the year and hour of the day
            RootObject ro = new RootObject
            {
                Inputs = new Inputs
                {
                    input1 = new Input1
                    {
                        ColumnNames = new List<string>
                        {
                            "day",
                            "hour",
                        "product"
                        },
                        Values = new List<List<string>>()
                    }
                }
            };
    
            List<string> l = new List<string>
            {
                dayOfYear,
                timeOfDay,
                ""
            };
    
            ro.Inputs.input1.Values.Add(l);
    
            Debug.LogFormat("Score request built");
    
            // Serialize the request
            string json = JsonConvert.SerializeObject(ro);
    
            using (UnityWebRequest www = UnityWebRequest.Post(serviceEndpoint, "POST"))
            {
                byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json);
                www.uploadHandler = new UploadHandlerRaw(jsonToSend);
    
                www.downloadHandler = new DownloadHandlerBuffer();
                www.SetRequestHeader("Authorization", "Bearer " + authKey);
                www.SetRequestHeader("Content-Type", "application/json");
                www.SetRequestHeader("Accept", "application/json");
    
                yield return www.SendWebRequest();
                string response = www.downloadHandler.text;
    
                // Deserialize the response
                DataContractSerializer serializer;
                serializer = new DataContractSerializer(typeof(string));
                DeserialiseJsonResponse(response);
            }
        }
    
  12. Přidejte následující metodu, která je zodpovědná za deserializaci odpovědi JSON a komunikuje výsledek deserializace do třídy PoliceKeeper . Tento výsledek bude názvy tří položek, které se předpovídají k prodeji nejvíce v aktuálním datu a čase. Níže uvedený kód vložte do třídy ProductPrediction pod předchozí metodu.

        /// <summary>
        /// Deserialize the response received from the Machine Learning portal
        /// </summary>
        public void DeserialiseJsonResponse(string jsonResponse)
        {
            // Deserialize JSON
            Prediction prediction = JsonConvert.DeserializeObject<Prediction>(jsonResponse);
            predictionDictionary = new Dictionary<string, string>();
    
            for (int i = 0; i < prediction.Results.output1.value.ColumnNames.Count; i++)
            {
                if (prediction.Results.output1.value.Values[0][i] != null)
                {
                    predictionDictionary.Add(prediction.Results.output1.value.ColumnNames[i], prediction.Results.output1.value.Values[0][i]);
                }
            }
    
            keyValueList = new List<KeyValuePair<string, double>>();
    
            // Strip all non-results, by adding only items of interest to the scoreList
            for (int i = 0; i < predictionDictionary.Count; i++)
            {
                KeyValuePair<string, string> pair = predictionDictionary.ElementAt(i);
                if (pair.Key.StartsWith("Scored Probabilities"))
                {
                    // Parse string as double then simplify the string key so to only have the item name
                    double scorefloat = 0f;
                    double.TryParse(pair.Value, out scorefloat);
                    string simplifiedName =
                        pair.Key.Replace("\"", "").Replace("Scored Probabilities for Class", "").Trim();
                    keyValueList.Add(new KeyValuePair<string, double>(simplifiedName, scorefloat));
                }
            }
    
            // Sort Predictions (results will be lowest to highest)
            keyValueList.Sort((x, y) => y.Value.CompareTo(x.Value));
    
            // Spawn the top three items, from the keyValueList, which we have sorted
            for (int i = 0; i < 3; i++)
            {
                ShelfKeeper.instance.SpawnProduct(keyValueList[i].Key, i);
            }
    
            // Clear lists in case of reuse
            keyValueList.Clear();
            predictionDictionary.Clear();
        }
    
  13. Uložte Visual Studio a vraťte se do Unity.

  14. Přetáhněte skript třídy ProductPrediction ze složky Script do objektu Main Camera.

  15. Uložte scénu a projektová >scéna a projekt Uložit scénu/ Soubor>uložit projekt.

Kapitola 10 – Sestavení řešení UPW

Teď je čas sestavit projekt jako řešení pro UPW, aby mohl běžet jako samostatná aplikace.

Sestavení:

  1. Aktuální scénu uložte kliknutím na Soubor >uložit scény.

  2. Přejít na Nastavení sestavení souboru>

  3. Zaškrtněte políčko s názvem Projekty Unity C# (to je důležité, protože vám umožní upravovat třídy po dokončení sestavení).

  4. Klikněte na Přidat otevřené scény.

  5. Klikněte na Sestavit.

    Snímek obrazovky s dialogovým oknem Nastavení sestavení se zvýrazněnou položkou nabídky Univerzální platforma Windows

  6. Zobrazí se výzva k výběru složky, do které chcete řešení sestavit.

  7. Vytvořte složku BUILDS a v této složce vytvořte jinou složku s odpovídajícím názvem podle vašeho výběru.

  8. Klikněte na novou složku a potom klikněte na Vybrat složku, aby se sestavení zahájilo v daném umístění.

    Snímek obrazovky s oknem Průzkumník souborů, ve kterém je zvýrazněná složka Builds (Builds).

    Snímek obrazovky s oknem Průzkumník souborů, které zobrazuje obsah složky Sestavení a zvýrazněné tlačítko Vybrat složku

  9. Po dokončení sestavování Unity (může to nějakou dobu trvat), otevře se okno Průzkumník souborů na místě sestavení (zkontrolujte hlavní panel, protože se nemusí vždy zobrazovat nad okny, ale upozorní vás na přidání nového okna).

Kapitola 11 – Nasazení aplikace

Nasazení aplikace:

  1. Přejděte do nového sestavení Unity ( složka aplikace ) a otevřete soubor řešení v sadě Visual Studio.

  2. V otevřené sadě Visual Studio je potřeba obnovit balíčky NuGet, které je možné provést tak, že kliknete pravým tlačítkem na řešení MachineLearningLab_Build z Průzkumník řešení (nachází se napravo od sady Visual Studio) a potom kliknete na Obnovit balíčky NuGet:

    Snímek obrazovky s oknem sady Visual Studio, ve kterém je zvýrazněná položka nabídky Obnovit Nu Get Packages

  3. V konfiguraci řešení vyberte Ladit.

  4. Na platformě řešení vyberte x86, místní počítač.

    U Microsoft HoloLensu může být jednodušší nastavit tento počítač na vzdálený počítač, takže nejste připojení k počítači. I když budete muset udělat toto:

    • Znát IP adresu vašeho HoloLensu, který najdete v rozšířených možnostech sítě Nastavení > a Internetu > Wi-Fi>. Protokol IPv4 je adresa, kterou byste měli použít.
    • Ujistěte se, že je režim vývojáře zapnutý, najdete v části Aktualizace nastavení > a zabezpečení > pro vývojáře.

    Snímek obrazovky s nabídkou Microsoft Visual Studio, která ukazuje, že místní počítač je vybraný na platformě řešení

  5. Přejděte do nabídky Sestavení a kliknutím na Nasadit řešení aplikaci načtěte do počítače bokem.

  6. Vaše aplikace by se teď měla zobrazit v seznamu nainstalovaných aplikací připravených ke spuštění.

Když spustíte aplikaci Hybridní realita, uvidíte lavičku, která byla nastavena ve scéně Unity, a z inicializace se načte data, která jste nastavili v Rámci Azure. Data budou deserializována v rámci vaší aplikace a tři nejlepší výsledky aktuálního data a času se zobrazí vizuálně, protože tři modely na lavičce.

Hotová aplikace Machine Learning

Blahopřejeme, vytvořili jste aplikaci hybridní reality, která využívá Azure Machine Learning k vytváření předpovědí dat a jejich zobrazení ve scéně.

Snímek obrazovky s oknem Microsoft Visual Studio, které zobrazuje polici se třemi objekty a kartou s textem 15 hodin 23. února

Cvičení

Cvičení 1

Experimentujte s pořadím řazení vaší aplikace a na polici se zobrazí tři dolní předpovědi, protože tato data by mohla být užitečná také.

Cvičení 2

Pomocí tabulek Azure naplňte novou tabulku informacemi o počasí a vytvořte nový experiment s daty.