HoloLens (första generationen) och Azure 307: Maskininlärning
Kommentar
Självstudierna för Mixed Reality Academy har utformats med HoloLens (första generationen) och Mixed Reality Immersive Headsets i åtanke. Därför anser vi att det är viktigt att låta de här självstudierna vara kvar för utvecklare som fortfarande letar efter vägledning för att utveckla för dessa enheter. De här självstudierna uppdateras inte med de senaste verktygsuppsättningarna eller interaktionerna som används för HoloLens 2. De underhålls för att fortsätta arbeta med de enheter som stöds. Det kommer att finnas en ny serie självstudier som kommer att publiceras i framtiden som visar hur du utvecklar för HoloLens 2. Det här meddelandet uppdateras med en länk till de självstudierna när de publiceras.
I den här kursen får du lära dig hur du lägger till maskininlärningsfunktioner (ML) i ett program för mixad verklighet med hjälp av Azure Machine Learning Studio (klassisk).
Azure Machine Learning Studio (klassisk) är en Microsoft-tjänst som ger utvecklare ett stort antal maskininlärningsalgoritmer som kan hjälpa till med datainmatning, utdata, förberedelse och visualisering. Från dessa komponenter är det sedan möjligt att utveckla ett förutsägelseanalysexperiment, iterera på det och använda det för att träna din modell. Efter träningen kan du göra din modell i drift i Azure-molnet så att den sedan kan poängsätta nya data. Mer information finns på sidan Azure Machine Learning Studio (klassisk).
När du har slutfört den här kursen kommer du att ha en avancerad headsetapp för mixad verklighet och har lärt dig hur du gör följande:
- Ange en tabell med försäljningsdata till Azure Machine Learning Studio-portalen (klassisk) och utforma en algoritm för att förutsäga framtida försäljning av populära objekt.
- Skapa ett Unity-projekt som kan ta emot och tolka förutsägelsedata från ML-tjänsten.
- Visa predikatdata visuellt i Unity-projektet genom att tillhandahålla de mest populära försäljningsobjekten på en hylla.
I ditt program är det upp till dig hur du ska integrera resultaten med din design. Den här kursen är utformad för att lära dig hur du integrerar en Azure-tjänst med ditt Unity-projekt. Det är ditt jobb att använda den kunskap du får från den här kursen för att förbättra din mixed reality-app.
Den här kursen är en fristående självstudiekurs som inte direkt involverar andra Mixed Reality Labs.
Stöd för enheter
Kurs | HoloLens | Uppslukande headset |
---|---|---|
MR och Azure 307: Maskininlärning | ✔️ | ✔️ |
Kommentar
Den här kursen fokuserar främst på Windows Mixed Reality-headset (VR) men du kan även använda det du lär dig i den här kursen för Microsoft HoloLens. När du följer kursen visas anteckningar om eventuella ändringar som du kan behöva använda för att stödja HoloLens. När du använder HoloLens kan du märka ett eko under röstinspelningen.
Förutsättningar
Kommentar
Den här självstudien är utformad för utvecklare som har grundläggande erfarenhet av Unity och C#. Tänk också på att förutsättningarna och de skriftliga instruktionerna i det här dokumentet representerar det som har testats och verifierats i skrivande stund (maj 2018). Du är fri att använda den senaste programvaran, som anges i artikeln installera verktyg, men det bör inte antas att informationen i den här kursen perfekt matchar vad du hittar i nyare programvara än vad som anges nedan.
Vi rekommenderar följande maskinvara och programvara för den här kursen:
- En utvecklingsdator som är kompatibel med Windows Mixed Reality för avancerad (VR) headsetutveckling
- Windows 10 Fall Creators Update (eller senare) med utvecklarläge aktiverat
- Den senaste Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Ett Windows Mixed Reality-headset (VR) eller Microsoft HoloLens med utvecklarläge aktiverat
- Internetåtkomst för Azure-installation och ML-datahämtning
Innan du börjar
För att undvika problem med att skapa det här projektet rekommenderar vi starkt att du skapar projektet som nämns i den här självstudien i en rotmapp eller nära rotmapp (långa mappsökvägar kan orsaka problem vid byggtid).
Kapitel 1 – Konfiguration av Azure Storage-konto
Om du vill använda Azure Translator API måste du konfigurera en instans av tjänsten som ska göras tillgänglig för ditt program.
Logga in på Azure Portal.
Kommentar
Om du inte redan har ett Azure-konto måste du skapa ett. Om du följer den här självstudien i en klassrums- eller labbsituation ber du din instruktör eller någon av rektorerna om hjälp med att konfigurera ditt nya konto.
När du är inloggad klickar du på Lagringskonton i den vänstra menyn.
Kommentar
Ordet Nytt kan ha ersatts med Skapa en resurs i nyare portaler.
På fliken Lagringskonton klickar du på Lägg till.
I panelen Skapa lagringskonto :
Infoga ett namn för ditt konto, tänk på att det här fältet endast accepterar siffror och gemener.
Som Distributionsmodell väljer du Resurshanterare.
För Typ av konto väljer du Lagring (generell användning v1).
För Prestanda väljer du Standard.
För Replikering väljer du Read-access-geo-redundant storage (RA-GRS).
Låt säker överföring vara inaktiverad.
Välj en prenumeration.
Välj en resursgrupp eller skapa en ny. En resursgrupp är ett sätt att övervaka, kontrollera åtkomst, etablera och hantera fakturering för en samling Azure-tillgångar. Vi rekommenderar att du behåller alla Azure-tjänster som är associerade med ett enda projekt (t.ex. dessa labb) under en gemensam resursgrupp).
Om du vill läsa mer om Azure-resursgrupper kan du gå till resursgruppens artikel.
Fastställa platsen för resursgruppen (om du skapar en ny resursgrupp). Platsen skulle helst vara i den region där programmet skulle köras. Vissa Azure-tillgångar är bara tillgängliga i vissa regioner.
Du måste också bekräfta att du har förstått de villkor som gäller för den här tjänsten.
När du har klickat på Skapa måste du vänta tills tjänsten har skapats. Det kan ta en minut.
Ett meddelande visas i portalen när tjänstinstansen har skapats.
Kapitel 2 – Azure Machine Learning Studio (klassisk)
Om du vill använda Azure Machine Learning måste du konfigurera en instans av Machine Learning-tjänsten som ska göras tillgänglig för ditt program.
I Azure-portalen klickar du på Nytt i det övre vänstra hörnet och söker efter Machine Learning Studio-arbetsyta och trycker på Retur.
Den nya sidan innehåller en beskrivning av Machine Learning Studio Workspace-tjänsten . Längst ned till vänster i den här prompten klickar du på knappen Skapa för att skapa en association med den här tjänsten.
När du har klickat på Skapa visas en panel där du behöver ange lite information om din nya Machine Learning Studio-tjänst:
Infoga önskat arbetsytenamn för den här tjänstinstansen.
Välj en prenumeration.
Välj en resursgrupp eller skapa en ny. En resursgrupp är ett sätt att övervaka, kontrollera åtkomst, etablera och hantera fakturering för en samling Azure-tillgångar. Vi rekommenderar att du behåller alla Azure-tjänster som är associerade med ett enda projekt (t.ex. dessa labb) under en gemensam resursgrupp).
Om du vill läsa mer om Azure-resursgrupper kan du gå till resursgruppens artikel.
Fastställa platsen för resursgruppen (om du skapar en ny resursgrupp). Platsen skulle helst vara i den region där programmet skulle köras. Vissa Azure-tillgångar är bara tillgängliga i vissa regioner. Du bör använda samma resursgrupp som du använde för att skapa Azure Storage i föregående kapitel.
I avsnittet Lagringskonto klickar du på Använd befintlig och sedan på den nedrullningsbara menyn. Därifrån klickar du på lagringskontot som du skapade i det senaste kapitlet.
Välj lämplig prisnivå för arbetsytan från listmenyn.
I avsnittet Webbtjänstplan klickar du på Skapa ny och infogar sedan ett namn för det i textfältet.
I avsnittet Prisnivå för webbtjänstplan väljer du önskad prisnivå. En utvecklingstestnivå med namnet DEVTEST Standard bör vara tillgänglig utan kostnad.
Du måste också bekräfta att du har förstått de villkor som gäller för den här tjänsten.
Klicka på Skapa.
När du har klickat på Skapa måste du vänta tills tjänsten har skapats. Det kan ta en minut.
Ett meddelande visas i portalen när tjänstinstansen har skapats.
Klicka på meddelandet för att utforska din nya tjänstinstans.
Klicka på knappen Gå till resurs i meddelandet för att utforska din nya tjänstinstans.
På sidan som visas under avsnittet Ytterligare länkar klickar du på Starta Machine Learning Studio, som dirigerar webbläsaren till Machine Learning Studio-portalen .
Använd knappen Logga in längst upp till höger eller i mitten för att logga in på Machine Learning Studio (klassisk).
Kapitel 3 – Machine Learning Studio (klassisk): Konfiguration av datauppsättning
Ett sätt att arbeta med Machine Learning-algoritmer är att analysera befintliga data och sedan försöka förutsäga framtida resultat baserat på den befintliga datamängden. Det innebär i allmänhet att ju mer befintliga data du har, desto bättre blir algoritmen för att förutsäga framtida resultat.
Du får en exempeltabell för den här kursen som heter ProductsTableCSV och kan laddas ned här.
Viktigt!
Ovanstående .zip-filen innehåller både ProductsTableCSV och .unitypackage, som du behöver i kapitel 6. Det här paketet tillhandahålls också i det kapitlet, även om det är separat från csv-filen.
Den här exempeldatauppsättningen innehåller en post över de bäst säljande objekten varje timme varje dag under året 2017.
Till exempel, på dag 1 av 2017, klockan 13 (timme 13), var det bästsäljande objektet salt och peppar.
Den här exempeltabellen innehåller 9 998 poster.
Gå tillbaka till Machine Learning Studio-portalen (klassisk) och lägg till den här tabellen som en datauppsättning för din ML. Gör detta genom att klicka på knappen + Ny i det nedre vänstra hörnet på skärmen.
Ett avsnitt kommer upp nedifrån och inom det finns navigeringspanelen till vänster. Klicka på Datauppsättning och sedan till höger om den, Från lokal fil.
Ladda upp den nya datauppsättningen genom att följa dessa steg:
Uppladdningsfönstret visas där du kan bläddra på hårddisken efter den nya datauppsättningen.
När du är markerad och tillbaka i uppladdningsfönstret lämnar du kryssrutan avmarkerad.
I textfältet nedan anger du ProductsTableCSV.csv som namn på datauppsättningen (men bör läggas till automatiskt).
Välj Allmän CSV-fil med ett huvud (.csv)med hjälp av listrutan för Typ.
Tryck på krysset längst ned till höger i uppladdningsfönstret så laddas datauppsättningen upp.
Kapitel 4 – Machine Learning Studio (klassisk): Experimentet
Innan du kan skapa ett maskininlärningssystem måste du skapa ett experiment för att validera din teori om dina data. Med resultaten vet du om du behöver mer data eller om det inte finns någon korrelation mellan data och ett möjligt resultat.
Så här börjar du skapa ett experiment:
Klicka igen på knappen + Ny längst ned till vänster på sidan och klicka sedan på Experiment>Tom experiment.
En ny sida visas med ett tomt experiment:
I panelen till vänster expanderar du Sparade datauppsättningar>Mina datauppsättningar och drar ProductsTableCSV till experimentarbetsytan.
I panelen till vänster expanderar du Exempel på datatransformering>och Dela. Dra sedan objektet Dela data till experimentarbetsytan. Objektet Dela data delar upp datauppsättningen i två delar. En del som du kommer att använda för att träna maskininlärningsalgoritmen. Den andra delen används för att utvärdera noggrannheten för den algoritm som genereras.
I den högra panelen (medan objektet Dela data på arbetsytan är markerat) redigerar du bråket med rader i den första utdatauppsättningen till 0,7. Detta delar upp data i två delar, den första delen blir 70 % av data och den andra delen blir de återstående 30 %. Kontrollera att kryssrutan Randomized split förblir markerad för att säkerställa att data delas slumpmässigt.
Dra en anslutning från basen av ProductsTableCSV-objektet på arbetsytan längst upp i objektet Dela data. Då ansluts objekten och productsTableCSV-datauppsättningens utdata (data) skickas till indata för delade data.
I panelen Experiment till vänster expanderar du Machine Learning>Train. Dra objektet Träna modell ut till arbetsytan Experiment. Arbetsytan bör se likadan ut som nedan.
Längst ned till vänster i objektet Dela data drar du en anslutning längst upp till höger i objektet Träna modell. Den första 70 %-uppdelningen från datamängden används av träningsmodellen för att träna algoritmen.
Välj objektet Träna modell på arbetsytan och klicka på knappen Starta kolumnväljare på panelen Egenskaper (till höger i webbläsarfönstret).
I textrutan skriver du produkten och trycker sedan på Retur. Produkten anges som en kolumn för att träna förutsägelser. Därefter klickar du på bockmarkeringen i det nedre högra hörnet för att stänga markeringsdialogrutan.
Du ska träna en algoritm för logistisk regression i multiklass för att förutsäga den mest sålda produkten baserat på dagens timme och datum. Det ligger utanför omfånget för det här dokumentet för att förklara detaljerna i de olika algoritmerna som tillhandahålls av Azure Machine Learning-studio, men du kan ta reda på mer från fuskbladet för maskininlärningsalgoritm
Från panelen experimentobjekt till vänster expanderar du Machine Learning>Initialize Model Classification (Initiera modellklassificering>) och drar objektet Logistic Regression (Multiclass Logistic Regression) till experimentarbetsytan.
Anslut utdata, längst ned i Multiclass Logistic Regression, till den övre vänstra inmatningen för objektet Train Model .
Expandera Machine Learning>Score i listan över experimentobjekt i panelen till vänster och dra objektet Poängmodell till arbetsytan.
Anslut utdata, längst ned i träningsmodellen, till den övre vänstra inmatningen i poängmodellen.
Anslut utdata längst ned till höger från Dela upp data till de övre högra indata för objektet Poängsätta modell .
I listan över experimentobjekt i panelen till vänster expanderar du Machine Learning>Evaluate och drar objektet Utvärdera modell till arbetsytan.
Anslut utdata från poängmodellen till indata överst till vänster i Utvärdera modell.
Du har skapat ditt första Machine Learning-experiment. Nu kan du spara och köra experimentet. I menyn längst ned på sidan klickar du på knappen Spara för att spara experimentet och klickar sedan på Kör för att starta experimentet.
Du kan se status för experimentet längst upp till höger på arbetsytan. Vänta en stund tills experimentet är klart.
Om du har en stor datauppsättning (verklig värld) är det troligt att experimentet kan ta timmar att köra.
Högerklicka på objektet Utvärdera modell på arbetsytan och hovra muspekaren över Utvärderingsresultat från snabbmenyn och välj sedan Visualisera.
Utvärderingsresultaten visas som visar förutsagda utfall jämfört med de faktiska utfallen. Detta använder 30 % av den ursprungliga datamängden, som delades tidigare, för att utvärdera modellen. Du kan se att resultatet inte är bra, helst skulle du ha det högsta talet i varje rad som det markerade objektet i kolumnerna.
Stäng resultatet.
Om du vill använda din nyligen tränade Machine Learning-modell måste du exponera den som en webbtjänst. Det gör du genom att klicka på menyalternativet Konfigurera webbtjänst i menyn längst ned på sidan och klicka på Förutsägelsewebbtjänst.
En ny flik skapas och träningsmodellen sammanfogas för att skapa den nya webbtjänsten.
I menyn längst ned på sidan klickar du på Spara och sedan på Kör. Statusen uppdateras i det övre högra hörnet på experimentarbetsytan.
När den är klar visas knappen Distribuera webbtjänst längst ned på sidan. Du är redo att distribuera webbtjänsten. Klicka på Distribuera webbtjänst (klassisk) på menyn längst ned på sidan.
Webbläsaren kan uppmanas att tillåta ett popup-fönster, vilket du bör tillåta, även om du kan behöva trycka på Distribuera webbtjänst igen om distributionssidan inte visas.
När experimentet har skapats omdirigeras du till en instrumentpanelssida där din API-nyckel visas. Kopiera det till ett anteckningsblock för tillfället, du behöver det i koden mycket snart. När du har noterat din API-nyckel klickar du på knappen BEGÄRAN/SVAR i avsnittet Standardslutpunkt under nyckeln.
Kommentar
Om du klickar på Test på den här sidan kan du ange indata och visa utdata. Ange dag och timme. Lämna produktposten tom. Klicka sedan på knappen Bekräfta . Utdata längst ned på sidan visar JSON som representerar sannolikheten för att varje produkt är valet.
En ny webbsida öppnas med instruktionerna och några exempel på den begärandestruktur som krävs av Machine Learning Studio (klassisk). Kopiera URI:n för begäran som visas på den här sidan till anteckningarna.
Nu har du skapat ett maskininlärningssystem som ger den mest sannolika produkten att säljas baserat på historiska inköpsdata, korrelerade med tiden på dagen och dagen på året.
Om du vill anropa webbtjänsten behöver du URL:en för tjänstslutpunkten och en API-nyckel för tjänsten. Klicka på fliken Förbruka på den översta menyn.
Sidan Förbrukningsinformation visar den information som du behöver för att anropa webbtjänsten från din kod. Ta en kopia av primärnyckeln och URL:en för begärandesvar. Du behöver dessa i nästa kapitel.
Kapitel 5 – Inrätta Unity-projektet
Konfigurera och testa ditt Integrerande Headset för Mixed Reality.
Kommentar
Du behöver inte motionskontrollanter för den här kursen. Om du behöver stöd för att konfigurera det uppslukande headsetet klickar du här.
Öppna Unity och skapa ett nytt Unity-projekt med namnet MR_MachineLearning. Kontrollera att projekttypen är inställd på 3D.
När Unity är öppet är det värt att kontrollera att standardskriptredigeraren är inställd på Visual Studio. Gå till Redigera>inställningar och gå sedan till Externa verktyg från det nya fönstret. Ändra extern skriptredigerare till Visual Studio 2017. Stäng fönstret Inställningar .
Gå sedan till Inställningar för filbygge>och växla plattformen till Universell Windows-plattform genom att klicka på knappen Växla plattform.
Kontrollera också att:
Målenheten är inställd på Valfri enhet.
För Microsoft HoloLens anger du Målenhet till HoloLens.
Byggtyp är inställt på D3D.
SDK är inställt på Senaste installerat.
Visual Studio-versionen är inställd på Senaste installerad.
Build and Run är inställt på Lokal dator.
Oroa dig inte för att konfigurera Scener just nu, eftersom dessa tillhandahålls senare.
De återstående inställningarna ska vara kvar som standard för tillfället.
I fönstret Bygginställningar klickar du på knappen Spelarinställningar. Då öppnas den relaterade panelen i det utrymme där inspektören finns.
I den här panelen måste några inställningar verifieras:
På fliken Andra inställningar :
Skriptkörningsversionen bör vara experimentell (.NET 4.6-motsvarighet)
Skriptserverdelen ska vara .NET
API-kompatibilitetsnivån ska vara .NET 4.6
På fliken Publiceringsinställningar går du till Funktioner och kontrollerar:
InternetClient
Längre ned i panelen, i XR-inställningar (som finns under Publiceringsinställningar), markerar du Virtual Reality Supported (Virtual Reality Supported) och kontrollerar att Windows Mixed Reality SDK har lagts till
Tillbaka i Bygginställningar Unity C# -projekt är inte längre nedtonade. Markera kryssrutan bredvid detta.
Stäng fönstret Build Settings (Bygginställningar).
Spara projektet (FILSPARA > PROJEKT).
Kapitel 6 – Importera MLProducts Unity-paketet
För den här kursen måste du ladda ned ett Unity Asset Package med namnet Azure-MR-307.unitypackage. Det här paketet levereras komplett med en scen, med alla objekt i den fördefinierade, så att du kan fokusera på att få allt att fungera. ShelfKeeper-skriptet tillhandahålls, även om det bara innehåller de offentliga variablerna, för scenkonfigurationsstrukturen. Du måste göra alla andra avsnitt.
Så här importerar du det här paketet:
Med Unity-instrumentpanelen framför dig klickar du på Tillgångar i menyn överst på skärmen och klickar sedan på Importera paket, Anpassat paket.
Använd filväljaren för att välja paketet Azure-MR-307.unitypackage och klicka på Öppna.
En lista över komponenter för den här tillgången visas för dig. Bekräfta importen genom att klicka på Importera.
När importen är klar ser du att några nya mappar har dykt upp i Unity-projektpanelen. Det är de 3D-modeller och respektive material som ingår i den färdiga scenen som du kommer att arbeta med. Du kommer att skriva merparten av koden i den här kursen.
I mappen Projektpanel klickar du på mappen Scener och dubbelklickar på scenen inuti (kallas MR_MachineLearningScene). Scenen öppnas (se bilden nedan). Om de röda diamanterna saknas klickar du bara på Gizmos-knappen längst upp till höger i spelpanelen.
Kapitel 7 – Kontrollera DLL:er i Unity
För att utnyttja användningen av JSON-bibliotek (används för serialisering och deserialisering) har en Newtonsoft DLL implementerats med det paket du tog in. Biblioteket bör ha rätt konfiguration, även om det är värt att kontrollera (särskilt om du har problem med att koden inte fungerar).
Så här gör du:
Vänsterklicka på Newtonsoft-filen i mappen Plugins och titta på panelen Inspector. Kontrollera att Valfri plattform är markerad. Gå till fliken UWP och se även till att Processen inte är markerad.
Kapitel 8 – Skapa klassen ShelfKeeper
Klassen ShelfKeeper är värd för metoder som styr användargränssnittet och produkter som skapas i scenen.
Som en del av det importerade paketet har du fått den här klassen, även om den är ofullständig. Nu är det dags att slutföra den klassen:
Dubbelklicka på ShelfKeeper-skriptet i mappen Skript för att öppna det med Visual Studio 2017.
Ersätt all kod som finns i skriptet med följande kod, som anger tid och datum och har en metod för att visa en produkt.
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); } }
Se till att spara ändringarna i Visual Studio innan du återvänder till Unity.
Gå tillbaka till Unity-redigeraren och kontrollera att klassen ShelfKeeper ser ut som nedan:
Viktigt!
Om skriptet inte har referensmålen (d.v.s. Datum (textnät)) drar du bara motsvarande objekt från hierarkipanelen till målfälten. Se nedan för förklaring, om det behövs:
Öppna matrisen Spawn Point i ShelfKeeper-komponentskriptet genom att vänsterklicka på den. Ett underavsnitt visas med namnet Storlek, vilket anger matrisens storlek. Skriv 3 i textrutan bredvid Storlek och tryck på Retur, så skapas tre fack under.
I hierarkin expanderar du tidsvisningsobjektet (genom att vänsterklicka på pilen bredvid det). Klicka sedan på huvudkameran från hierarkin så att kontrollanten visar sin information.
Välj huvudkameran i hierarkipanelen. Dra objekten Datum och tid från hierarkipanelen till datumtext- och tidstextplatserna i inspektören för huvudkameran i ShelfKeeper-komponenten.
Dra Spawn Points från hierarkipanelen (under hyllobjektet) till referensmålen för 3 element under matrisen Spawn Point enligt bilden.
Kapitel 9 – Skapa klassen ProductPrediction
Nästa klass som du ska skapa är klassen ProductPrediction .
Den här klassen ansvarar för:
Fråga Machine Learning Service-instansen och ange aktuellt datum och tid.
Deserialisera JSON-svaret till användbara data.
Tolka data och hämta de tre rekommenderade produkterna.
Anropa shelfkeeper-klassmetoderna för att visa data i scenen.
Så här skapar du den här klassen:
Gå till mappen Skript i projektpanelen.
Högerklicka i mappen Skapa >C#-skript. Anropa skriptet ProductPrediction.
Dubbelklicka på det nya ProductPrediction-skriptet för att öppna det med Visual Studio 2017.
Om dialogrutan Filändring har identifierats visas klickar du på *Läs in lösningen igen.
Lägg till följande namnområden överst i klassen ProductPrediction:
using System; using System.Collections.Generic; using UnityEngine; using System.Linq; using Newtonsoft.Json; using UnityEngine.Networking; using System.Runtime.Serialization; using System.Collections;
I klassen ProductPrediction infogas följande två objekt som består av ett antal kapslade klasser. Dessa klasser används för att serialisera och deserialisera JSON för 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; } }
Lägg sedan till följande variabler ovanför föregående kod (så att den JSON-relaterade koden finns längst ned i skriptet, under all annan kod och ur vägen):
/// <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;
Viktigt!
Se till att infoga den primära nyckeln och slutpunkten för begäran-svar från Machine Learning-portalen i variablerna här. Bilderna nedan visar var du skulle ha tagit nyckeln och slutpunkten från.
Infoga den här koden i metoden Start(). Metoden Start() anropas när klassen initierar:
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)); }
Följande är den metod som samlar in datum och tid från Windows och konverterar den till ett format som vårt Machine Learning-experiment kan använda för att jämföra med data som lagras i tabellen.
/// <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(); }
Du kan ta bort metoden Update() eftersom den här klassen inte använder den.
Lägg till följande metod som kommunicerar aktuellt datum och tid till Machine Learning-slutpunkten och får ett svar i JSON-format.
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); } }
Lägg till följande metod, som ansvarar för att deserialisera JSON-svaret och kommunicera resultatet av deserialiseringen till klassen ShelfKeeper . Det här resultatet blir namnen på de tre objekt som förväntas sälja mest vid aktuellt datum och tid. Infoga koden nedan i klassen ProductPrediction under föregående metod.
/// <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(); }
Spara Visual Studio och gå tillbaka till Unity.
Dra klassskriptet ProductPrediction från mappen Script till huvudkameraobjektet.
Spara din scen och projektet Spara scen>/Fil>spara projekt.
Kapitel 10 – Skapa UWP-lösningen
Nu är det dags att skapa projektet som en UWP-lösning så att det kan köras som ett fristående program.
Så här skapar du:
Spara den aktuella scenen genom att klicka på Spara scener i filen>.
Gå till Inställningar för filbygge>
Markera kryssrutan Unity C# Projects (det här är viktigt eftersom du kan redigera klasserna när bygget har slutförts).
Klicka på Lägg till öppna scener,
Klicka på Skapa.
Du uppmanas att välja den mapp där du vill skapa lösningen.
Skapa en BUILDS-mapp och skapa en annan mapp i mappen med ett lämpligt valfritt namn.
Klicka på den nya mappen och klicka sedan på Välj mapp för att påbörja bygget på den platsen.
När Unity har skapats (det kan ta lite tid) öppnas ett Utforskaren fönster på platsen för bygget (kontrollera aktivitetsfältet eftersom det kanske inte alltid visas ovanför dina fönster, men meddelar dig om att ett nytt fönster har lagts till).
Kapitel 11 – Distribuera ditt program
Så här distribuerar du ditt program:
Gå till din nya Unity-version (appmappen) och öppna lösningsfilen med Visual Studio.
När Visual Studio är öppet måste du återställa NuGet-paket, vilket kan göras genom att högerklicka på din MachineLearningLab_Build lösning, från Solution Explorer (finns till höger om Visual Studio) och sedan klicka på Återställ NuGet-paket:
I Lösningskonfiguration väljer du Felsök.
I Lösningsplattform väljer du x86, Lokal dator.
För Microsoft HoloLens kan det vara enklare att ställa in detta på Fjärrdator, så att du inte är ansluten till datorn. Men du måste också göra följande:
- Känna till IP-adressen för dina HoloLens, som finns i Inställningar > Nätverk och Internet > Wi-Fi > Avancerade alternativ. IPv4 är den adress som du bör använda.
- Se till att utvecklarläget är på; finns i Inställningar > Uppdatera och säkerhet > för utvecklare.
Gå till menyn Skapa och klicka på Distribuera lösning för att läsa in programmet separat till datorn.
Din app bör nu visas i listan över installerade appar som är redo att startas.
När du kör Mixed Reality-programmet visas den bänk som har konfigurerats i Unity-scenen, och från initieringen hämtas de data som du har konfigurerat i Azure. Data kommer att deserialiseras i ditt program, och de tre främsta resultaten för ditt aktuella datum och tid kommer att tillhandahållas visuellt, som tre modeller på bänken.
Ditt färdiga Machine Learning-program
Grattis, du har skapat en mixed reality-app som använder Azure Machine Learning för att göra dataförutsägelser och visa dem på din scen.
Övning
Övning 1
Experimentera med sorteringsordningen för ditt program och låt de tre nedre förutsägelserna visas på hyllan, eftersom dessa data kan vara användbara också.
Övning 2
Med Hjälp av Azure-tabeller fyller du i en ny tabell med väderinformation och skapar ett nytt experiment med hjälp av data.