HoloLens (1. generace) a Azure 307: Strojové učení
Poznámka
Kurzy Mixed Reality Academy byly navrženy s ohledem na HoloLens (1. generace) a Mixed Reality Asistivní náhlavní soupravy. Proto se domníváme, že je důležité ponechat tyto kurzy pro vývojáře, kteří stále hledají pokyny k vývoji pro tato zařízení. Tyto kurzy nebudou aktualizovány nejnovějšími sadami nástrojů nebo interakcemi používanými pro HoloLens 2. Budou zachovány, aby mohly pokračovat v práci na podporovaných zařízeních. V budoucnu bude k dispozici nová série kurzů, které předvedou, jak vyvíjet pro HoloLens 2. Toto oznámení bude aktualizováno odkazem na tyto kurzy, jakmile budou publikovány.
V tomto kurzu se dozvíte, jak přidat funkce Strojového učení (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é množství 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é vyvinout experiment prediktivní analýzy, iterovat na něm a použít ho k trénování modelu. Po trénování můžete model zprovoznit v cloudu Azure, aby pak mohl vyhodnotit nová data. Další informace najdete na stránce Azure Machine Learning Studio (classic).
Po dokončení tohoto kurzu budete mít imerzivní aplikaci náhlavní soupravy pro hybridní realitu a naučíte se, jak postupovat následovně:
- Poskytněte tabulku dat o prodeji na portálu Azure Machine Learning Studio (Classic) a navrhněte algoritmus pro předpověď budoucího prodeje oblíbených položek.
- Vytvořte projekt Unity, který může přijímat a interpretovat data predikce ze služby ML.
- Zobrazte predikační data vizuálně v rámci projektu Unity prostřednictvím poskytování nejoblíbenějších prodejních položek na poličce.
Ve vaší aplikaci je na vás, jak do návrhu integrujete výsledky. Tento kurz je navržený tak, aby vás naučil integrovat službu Azure s projektem Unity. Vaším úkolem je využít znalosti, které z tohoto kurzu získáte, k vylepšení aplikace hybridní reality.
Tento kurz je samostatný kurz, který přímo nezahrnuje žádné další Mixed Reality Labs.
Podpora zařízení
Kurz | HoloLens | Imerzivní náhlavní soupravy |
---|---|---|
MR a Azure 307: Machine Learning | ✔️ | ✔️ |
Poznámka
I když se tento kurz primárně zaměřuje na Windows Mixed Reality imerzivní náhlavní soupravy (VR), můžete také použít to, co se v tomto kurzu naučíte, na Microsoft HoloLens. V průběhu kurzu uvidíte poznámky ke všem změnám, které budete muset použít k podpoře HoloLensu. Při používání HoloLensu si můžete všimnout určité ozvěny během zachytávání hlasu.
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 testováno a ověřeno v době psaní tohoto dokumentu (květen 2018). Můžete používat nejnovější software, jak je uvedeno v článku instalace 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:
- Vývojový počítač kompatibilní s Windows Mixed Reality pro vývoj imerzivních náhlavních souprav (VR)
- Windows 10 Fall Creators Update (nebo novější) s povoleným vývojářským režimem
- Nejnovější sada Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Náhlavní souprava Windows Mixed Reality imerzivní (VR) nebo Microsoft HoloLens s povoleným vývojářským režimem
- Přístup k internetu pro nastavení Azure a načítání dat ML
Než začnete
Aby nedocházelo k 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í API služby Azure Translator, budete muset nakonfigurovat instanci služby tak, aby byla vaše aplikace dostupná.
Přihlaste se k webu Azure Portal.
Poznámka
Pokud ještě účet Azure nemáte, budete si ho muset vytvořit. Pokud tento kurz sledujete v situaci ve třídě nebo v testovacím prostředí, požádejte o pomoc s nastavením nového účtu svého instruktora nebo některého z proktorů.
Po přihlášení klikněte v nabídce vlevo na Účty úložiště .
Poznámka
Slovo Nový mohlo být na novějších portálech nahrazeno slovem Vytvořit prostředek.
Na kartě Účty úložiště klikněte na Přidat.
Na panelu Vytvořit účet úložiště :
Vložte název účtu. Mějte na paměti, že toto pole přijímá jenom čísla a malá písmena.
Jako Model nasazení vyberteResource Manager.
V části Druh účtu vyberte Úložiště (pro obecné účely v1).
Výkon – vyberte Standard.
V části Replikace vyberte Úložiště pro čtení, přístup k geograficky redundantnímu úložišti (RA-GRS).
Možnost Zabezpečený přenos ponechte jako Zakázáno.
Vyberte předplatné.
Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci kolekce prostředků Azure. Doporučuje se zachovat všechny služby Azure přidružené k jednomu projektu (například tato testovací prostředí) ve společné skupině prostředků.
Pokud si chcete přečíst další informace o skupinách prostředků Azure, navštivte prosím článek o skupinách prostředků.
Určete umístění vaší skupiny prostředků (pokud vytváříte novou skupinu prostředků). Umístění by v ideálním případě bylo v oblasti, kde by aplikace běžela. Některé prostředky Azure jsou dostupné jenom v určitých oblastech.
Budete také muset potvrdit, že rozumíte podmínkám a ujednáním, které se na tuto službu vztahují.
Po kliknutí na Vytvořit budete muset počkat na vytvoření služby, což může chvíli trvat.
Po vytvoření instance služby se na portálu zobrazí oznámení.
Kapitola 2 – Azure Machine Learning Studio (classic)
Pokud chcete používat Azure Machine Learning, budete muset nakonfigurovat instanci služby Machine Learning, aby byla k dispozici vaší aplikaci.
Na webu Azure Portal klikněte v levém horním rohu na Nový a vyhledejte Pracovní prostor Machine Learning Studio a stiskněte Enter.
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ě.
Po kliknutí na Vytvořit se zobrazí panel, kde potřebujete zadat podrobnosti o nové službě Machine Learning Studio:
Vložte požadovaný název pracovního prostoru pro tuto instanci služby.
Vyberte předplatné.
Zvolte skupinu prostředků nebo vytvořte novou. Skupina prostředků poskytuje způsob, jak monitorovat, řídit přístup, zřizovat a spravovat fakturaci kolekce prostředků Azure. Doporučuje se zachovat všechny služby Azure přidružené k jednomu projektu (například tato testovací prostředí) ve společné skupině prostředků.
Pokud si chcete přečíst další informace o skupinách prostředků Azure, navštivte prosím článek o skupinách prostředků.
Určete umístění vaší skupiny prostředků (pokud vytváříte novou skupinu prostředků). Umístění by v ideálním případě bylo v oblasti, kde 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.
V části Účet úložiště klikněte na Použít existující, potom klikněte na rozevírací nabídku a odtud klikněte na účet úložiště , který jste vytvořili v poslední kapitole.
V rozevírací nabídce vyberte příslušnou cenovou úroveň pracovního prostoru .
V části Plán webové služby klikněte na Vytvořitnový a pak do textového pole vložte název.
V části Cenová úroveň plánu webové služby vyberte cenovou úroveň podle svého výběru. Testovací úroveň pro vývoj s názvem DEVTEST Standard byste měli mít k dispozici zdarma.
Budete také muset potvrdit, že rozumíte podmínkám a ujednáním, které se na tuto službu vztahují.
Klikněte na Vytvořit.
Po kliknutí na Vytvořit budete muset počkat na vytvoření služby, což může chvíli trvat.
Po vytvoření instance služby se na portálu zobrazí oznámení.
Kliknutím na oznámení prozkoumejte novou instanci služby.
V oznámení klikněte na tlačítko Přejít k prostředku a prozkoumejte novou instanci služby.
Na zobrazené stránce v části Další odkazy klikněte na Spustit Machine Learning Studio. Tím se váš prohlížeč nasměruje na portál Machine Learning Studio .
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).
Kapitola 3 – Machine Learning Studio (klasické): Nastavení datové sady
Jedním ze způsobů, jak algoritmy Machine Learning 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ři předpovídání budoucích výsledků.
V tomto kurzu máte k dispozici ukázkovou tabulku s názvem ProductsTableCSV a můžete si ji stáhnout tady.
Důležité
Výše uvedený .zip soubor obsahuje productsTableCSV i .unitypackage, které budete potřebovat v Kapitole 6. Tento balíček je také k dispozici v rámci této kapitoly, ale odděleně od souboru CSV.
Tato ukázková datová sada obsahuje záznam nejprodávanějších objektů v každé hodině každého dne v roce 2017.
Například 1. den roku 2017 ve 13. hodině byla nejprodávanější položkou sůl a pepř.
Tato ukázková tabulka obsahuje 9998 položek.
Vraťte se na portál Machine Learning Studio (Classic) a přidejte tuto tabulku jako datovou sadu pro vaše strojové učení. Uděláte to kliknutím na tlačítko + Nový v levém dolním rohu obrazovky.
Zespoda přijde oddíl, ve které je na levé straně navigační panel. Klikněte na Datová sada a pak napravo od položky Z místního souboru.
Nahrajte novou datovou sadu následujícím postupem:
Zobrazí se okno pro nahrání, kde můžete vyhledat novou datovou sadu na pevném disku.
Po výběru a zpět v okně pro nahrání nechte políčko nezaškrtané.
Do textového pole níže zadejte jako název datové sady ProductsTableCSV.csv (měl by se ale přidat automaticky).
V rozevírací nabídce Typ vyberte Obecný soubor CSV s záhlavím (.csv).
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 sestavit systém strojového učení, budete muset vytvořit experiment, abyste ověřili svoji teorii o datech. Díky výsledkům budete vědět, jestli potřebujete více dat, nebo jestli mezi daty a možným výsledkem neexistuje žádná korelace.
Zahájení vytváření experimentu:
Znovu klikněte na tlačítko + Nový v levém dolním rohu stránky a pak klikněte na Experiment>Prázdný experiment.
Zobrazí se nová stránka s prázdným experimentem:
Z panelu vlevo rozbalte Uložené datové sady>Moje datové sady a přetáhněte ProductsTableCSV na plátno experimentu.
Na panelu vlevo rozbalte položku Ukázka 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í datovou sadu na dvě části. 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.
V pravém panelu (zatímco je vybraná položka Rozdělit data na plátně) upravte část 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ích 30 %. Pokud chcete zajistit náhodné rozdělení dat, ujistěte se, že políčko Randomized split (Náhodné rozdělení ) zůstává zaškrtnuté.
Přetáhněte připojení ze základny položky ProductsTableCSV na plátně do horní části položky Rozdělit data. Tím se položky propojí a výstup datové sady ProductsTableCSV (data) se odešle na vstup Rozdělit data.
Na panelu Experimenty na levé straně rozbalteMožnost Machine Learning Train (Trénovatstrojové učení>). Přetáhněte položku Trénování modelu na plátno experimentu. Plátno by mělo vypadat stejně jako níže uvedené.
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ích 70% rozdělení z datové sady použije trénování modelu k trénování algoritmu.
Vyberte položku Train Model (Trénovat model ) na plátně a na panelu Vlastnosti (na pravé straně okna prohlížeče) klikněte na tlačítko Spustit výběr sloupců .
Do textového pole zadejte product a stiskněte Enter. Produkt se nastaví jako sloupec pro trénovací predikce. Potom kliknutím na tlačítko v pravém dolním rohu zavřete dialogové okno výběru.
Vytrénujete algoritmus logistické regrese s více třídami , který bude predikovat nejprodádanější produkt na základě hodiny dne a data. Vysvětlení podrobností o různých algoritmech poskytovaných studio Azure Machine Learning je nad rámec tohoto dokumentu. Další informace ale najdete v stručné nápovědě k algoritmům strojového učení.
Na panelu položek experimentu na levé straně rozbalte položku Machine Learning>Initialize Model Classification (Inicializovat klasifikaci modelu>) a přetáhněte položku LogisticKá regrese s více třídami na plátno experimentu.
Připojte výstup z dolní části logistické regrese s více třídami k levému hornímu vstupu položky Trénování modelu .
V seznamu položek experimentů na panelu vlevo rozbalteMachine Learning Score (Skórestrojového učení>) a přetáhněte položku Score Model (Určení skóre modelu) na plátno.
Připojte výstup z dolní části trénování modelu k levému hornímu vstupu určení skóre modelu.
Připojte výstup z rozdělení dat z pravého dolního rohu k pravému hornímu vstupu položky Určení skóre modelu .
V seznamu položek experimentu na panelu vlevo rozbalte položku Machine Learning>Evaluate a přetáhněte položku Evaluate Model (Vyhodnotit model ) na plátno.
Připojte výstup ze skóre modelu k levému hornímu vstupu vyhodnocení modelu.
Vytvořili jste svůj první experiment strojového učení. Experiment teď můžete uložit a spustit. V nabídce v dolní části stránky kliknutím na tlačítko Uložit experiment uložte a kliknutím na Spustit experiment spusťte .
Stav experimentu můžete vidět v pravém horním rohu plátna. Chvíli počkejte, než se experiment dokončí.
Pokud máte velkou datovou sadu (v reálném světě), je pravděpodobné, že spuštění experimentu může trvat hodiny.
Klikněte pravým tlačítkem 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.
Výsledky vyhodnocení se zobrazí s předpovězený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. Vidíte, že výsledky nejsou skvělé. V ideálním případě byste měli mít nejvyšší číslo v každém řádku zvýrazněnou položkou ve sloupcích.
Zavřete výsledky.
Pokud chcete použít nově vytrénovaný model strojového učení, musíte ho zveřejnit jako webovou službu. Uděláte to tak, že v nabídce v dolní části stránky kliknete na položku nabídky Nastavit webovou službu a kliknete na Prediktivní webová služba.
Vytvoří se nová karta a model trénování se sloučí a vytvoří novou webovou službu.
V nabídce v dolní části stránky klikněte na Uložit a pak klikněte na Spustit. Stav se aktualizuje v pravém horním rohu plátna experimentu.
Po dokončení 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).
Prohlížeč může zobrazit výzvu k povolení automaticky otevíraných oken, které byste měli povolit, ale pokud se stránka nasazení nezobrazí, možná budete muset znovu stisknout tlačítko Deploy Web Service (Nasadit webovou službu ).
Po vytvoření experimentu budete přesměrováni na stránku řídicího panelu , kde se zobrazí klíč rozhraní API . Zkopírujte ho do poznámkového bloku, budete ho brzy potřebovat v kódu. Jakmile si klíč rozhraní API poznamenáte, klikněte na tlačítko REQUEST/RESPONSE v části Výchozí koncový bod pod klíčem.
Poznámka
Pokud na této stránce kliknete na Test, budete moct zadat vstupní data a zobrazit výstup. Zadejte den a hodinu. Položku produktu nechejte prázdnou. Potom klikněte na tlačítko Potvrdit . Ve výstupu v dolní části stránky se zobrazí JSON představující pravděpodobnost, že je každý produkt volbou.
Otevře se nová webová stránka s pokyny a příklady týkající se struktury 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.
Právě 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 dat o nákupech v korelaci s denním časem a dnem 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 Consume (Spotřebovat ).
Na stránce Informace o spotřebě se zobrazí informace, které budete potřebovat k volání webové služby z vašeho kódu. Pořiďte kopii primárního klíče a adresy URL požadavku a odpovědi . Budete je potřebovat v další kapitole.
Kapitola 5 – Nastavení projektu Unity
Nastavte a otestujte imerzivní náhlavní soupravu Mixed Reality.
Poznámka
Pro tento kurz nebudete potřebovat ovladače pohybu. Pokud potřebujete podporu pro nastavení imerzivní náhlavní soupravy, klikněte sem.
Otevřete Unity a vytvořte nový projekt Unity s názvem MR_MachineLearning. Ujistěte se, že je typ projektu nastavený na 3D.
Když je Unity otevřená, stojí za to zkontrolovat, jestli je výchozí Editor skriptů nastavený na Visual Studio. Přejděte na Upravit>předvolby a 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 .
Pak přejděte naNastavení sestavenísouboru> a kliknutím na tlačítko Přepnout platformu přepněte na Univerzální platforma Windows.
Ujistěte se také, že:
Cílové zařízení je nastavené na Libovolné zařízení.
Pro Microsoft HoloLens nastavte Cílové zařízení na HoloLens.
Typ sestavení je nastavený na D3D.
Sada SDK je nastavená na nejnovější nainstalovanou verzi.
Verze sady Visual Studio je nastavená na nejnovější nainstalovanou verzi.
Sestavení a spuštění je nastavené na Místní počítač.
Nemusíte si dělat starosti s nastavením scén hned teď, protože jsou k dispozici později.
Zbývající nastavení by prozatím měla zůstat ve výchozím nastavení.
V okně Build Settings (Nastavení sestavení ) klikněte na tlačítko Player Settings (Nastavení přehrávače ). Tím se otevře související panel v prostoru, kde se inspektor nachází.
Na tomto panelu je potřeba ověřit několik nastavení:
Na kartě Další nastavení :
Skriptovacíruntime verze by měla být experimentální (ekvivalentní verze .NET 4.6).
Skriptovací back-end by měl být .NET.
Úroveň kompatibility rozhraní API by měla být .NET 4.6.
Na kartě Nastavení publikování v části Schopnosti zaškrtněte:
InternetClient
Dále na panelu v Nastavení XR (najdete pod nastavením publikování) zaškrtněte možnost Podporuje se virtuální realita. Ujistěte se, že je přidaná sada Windows Mixed Reality SDK.
Zpět v nastavení sestaveníProjekty Unity C# už nejsou neaktivní; zaškrtněte políčko vedle této položky.
Zavřete okno Nastavení sestavení.
Uložte projekt (FILE > SAVE PROJECT).
Kapitola 6 – Import balíčku Unity mlProducts
Pro účely tohoto kurzu si budete muset stáhnout balíček prostředků Unity s názvem Azure-MR-307.unitypackage. Součástí tohoto balíčku je scéna se všemi objekty v předem připraveném balíčku, takže se můžete soustředit na to, aby všechno fungovalo. Skript ShelfKeeper je k dispozici, i když obsahuje pouze veřejné proměnné, pro účely struktury nastavení scény. Budete muset provést všechny ostatní části.
Import tohoto balíčku:
Když máte řídicí panel Unity před sebou, klikněte v nabídce v horní části obrazovky na Assets (Prostředky ) a pak klikněte na Import Package (Importovat balíček), Custom Package (Vlastní balíček).
Pomocí nástroje pro výběr souborů vyberte balíček Azure-MR-307.unitypackage a klikněte na Otevřít.
Zobrazí se vám seznam součástí tohoto prostředku. Potvrďte import kliknutím na Importovat.
Po dokončení importu si všimnete, že se na panelu projektu Unity objevily 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.
Ve složce Panel projektu klikněte na složku Scény a poklikejte na vnitřní scénu (označovanou jako MR_MachineLearningScene). Scéna se otevře (viz obrázek níže). Pokud chybí červené kosočtverce, jednoduše klikněte na tlačítko Gizmos v pravém horním rohu herního panelu.
Kapitola 7 – Kontrola knihoven DLL v Unity
Pro využití knihoven JSON (používaných pro 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, ale stojí za to ji zkontrolovat (zejména pokud máte problémy s nefunkčním kódem).
Postupujte následovně:
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 je zaškrtnuté políčko Nezpracovát .
Kapitola 8 – Vytvoření třídy ShelfKeeper
Třída ShelfKeeper hostuje metody, které řídí uživatelské rozhraní a produkty vytvářené ve scéně.
Jako součást importovaného balíčku dostanete tuto třídu, i když je neúplná. Teď je čas dokončit danou třídu:
Poklikáním na skript ShelfKeeper ve složce Scripts ho otevřete v sadě Visual Studio 2017.
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); } }
Před návratem do Unity nezapomeňte uložit změny v sadě Visual Studio.
V Editoru Unity zkontrolujte, že třída ShelfKeeper vypadá takto:
Důležité
Pokud váš skript nemá referenční cíle (tj. Datum (textová síť)), jednoduše přetáhněte odpovídající objekty z panelu hierarchie do cílových polí. Vysvětlení najdete v případě potřeby níže:
Kliknutím levým tlačítkem myši otevřete pole Spawn Point ve skriptu komponenty ShelfKeeper . Zobrazí se podsekci s názvem Velikost, která označuje velikost pole. Do textového pole vedle Položky Velikost zadejte 3 a stiskněte Enter a pod ním se vytvoří tři sloty.
V hierarchii rozbalte objekt Zobrazení času (kliknutím levým tlačítkem myši na šipku vedle něj). Potom v hierarchii klikněte na hlavní kameru, aby inspektor zobrazoval její informace.
Na panelu hierarchie vyberte hlavní kameru. Přetáhněte objekty Date a Time z panelu hierarchie do slotů Text data a Času v inspektoruhlavní kamery v komponentě ShelfKeeper .
Přetáhněte body tření z panelu hierarchie (pod objekt Police ) na referenční cíle 3elementů pod polem Bodu tření , jak je znázorněno na obrázku.
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 uvedením aktuálního data a času
Deserializace odpovědi JSON na použitelná data
Interpretace dat a načtení 3 doporučených produktů
Volání metod třídy ShelfKeeper k zobrazení dat ve scéně.
Vytvoření této třídy:
Na panelu projektu přejděte do složky Skripty.
Klikněte pravým tlačítkem do složky Vytvořit>skript jazyka C#. Zavolejte skript ProductPrediction.
Poklikáním na nový skript ProductPrediction ho otevřete v sadě Visual Studio 2017.
Pokud se zobrazí dialogové okno Zjištění změny souboru , klikněte na *Znovu načíst řešení.
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;
Do třídy ProductPrediction vložte následující dva objekty, které se skládají z řady 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; } }
Pak přidejte následující proměnné nad předchozí kód (aby byl kód související s JSON v dolní části skriptu, pod všemi ostatními 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 žádosti a odpovědi z portálu Machine Learning. Následující obrázky ukazují, odkud byste klíč a koncový bod vzali.
Vložte tento kód do metody Start(). Metoda Start() je volána, když třída inicializuje:
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)); }
Následuje metoda, která shromažďuje datum a čas z Windows a převede je do formátu, který může experiment služby Machine Learning 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(); }
Můžete odstranit metodu Update(), protože tato třída ji nebude používat.
Přidejte následující metodu, která koncovému bodu služby Machine Learning sdělí aktuální datum a čas a obdrží 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); } }
Přidejte následující metodu, která je zodpovědná za deserializaci odpovědi JSON a za sdělení výsledku deserializace do třídy ShelfKeeper . Výsledkem budou názvy tří položek, u které se předpokládá, že se prodají nejvíce k aktuálnímu datu a času. Vložte kód níže 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(); }
Uložte Visual Studio a vraťte se do Unity.
Přetáhněte skript třídy ProductPrediction ze složky Script do objektu Main Camera .
Uložte svou scénu a projekt File>Save Scene /File>Save Project.
Kapitola 10 – Sestavení řešení pro UPW
Teď je čas sestavit projekt jako řešení UPW, aby mohl běžet jako samostatná aplikace.
Sestavení:
Uložte aktuální scénu kliknutím na Soubor>Uložit scény.
Přejděte naNastavení sestavenísouboru.>
Zaškrtněte políčko Projekty Unity C# (to je důležité, protože vám umožní upravovat třídy po dokončení sestavení).
Klikněte na Přidat otevřené scény.
Klikněte na Sestavit.
Zobrazí se výzva k výběru složky, ve které chcete vytvořit řešení.
Vytvořte složku BUILDS a v této složce vytvořte další složku s odpovídajícím názvem podle vašeho výběru.
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í.
Jakmile Unity dokončí sestavování (může to nějakou dobu trvat), otevře se okno Průzkumník souborů v umístění vašeho buildu (zkontrolujte hlavní panel, protože se nemusí vždy zobrazovat nad vašimi okny, ale upozorní vás na přidání nového okna).
Kapitola 11 – Nasazení aplikace
Nasazení aplikace:
Přejděte do nového sestavení Unity (složka Aplikace ) a otevřete soubor řešení v sadě Visual Studio.
Když máte otevřenou sadu Visual Studio, musíte obnovit balíčky NuGet, což můžete provést kliknutím pravým tlačítkem na MachineLearningLab_Build řešení v Průzkumník řešení (nachází se napravo od sady Visual Studio) a následným kliknutím na Obnovit balíčky NuGet:
V části Konfigurace řešení vyberte Ladit.
Na platformě řešení vyberte x86, Místní počítač.
Pro Microsoft HoloLens může být jednodušší nastavit tuto možnost na Vzdálený počítač, abyste nebyli připojení k počítači. Budete ale muset také provést následující akce:
- Znát IP adresu vašeho HoloLensu, kterou najdete v nastavení > sítě & internetu > Wi-Fi > Upřesnit možnosti. IPv4 je adresa, kterou byste měli použít.
- Ujistěte se, že vývojářský režim je Zapnuto; najdete v části Aktualizace nastavení > & zabezpečení > pro vývojáře.
Přejděte do nabídky Build (Sestavení ) a klikněte na Deploy Solution (Nasadit řešení ) a načtěte aplikaci do počítače bokem.
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 Mixed Reality, uvidíte lavičku, která byla nastavena ve scéně Unity, a z inicializace se načte data, která jste nastavili v Azure. Data budou v rámci vaší aplikace deserializována a tři nejlepší výsledky pro aktuální datum a čas se zobrazí vizuálně jako tři modely na stole.
Dokončená 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í na vaší scéně.
Cvičení
Cvičení 1
Experimentujte s pořadím řazení vaší aplikace a nechte, aby se v poličce zobrazily tři nejnižší předpovědi, protože tato data by mohla být také užitečná.
Cvičení 2
Pomocí tabulek Azure naplníte novou tabulku informacemi o počasí a pomocí dat vytvořte nový experiment.