HoloLens (första generationen) och Azure 307: Maskininlärning


Anteckning

Självstudierna Mixed Reality Academy har utformats med HoloLens (första generationen) och Mixed Reality integrerande headset i åtanke. Därför tycker vi att det är viktigt att låta de här självstudierna vara kvar för utvecklare som fortfarande behöver 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 kommer att underhållas för att fortsätta arbeta på de enheter som stöds. Det kommer att finnas en ny serie självstudier som kommer att publiceras i framtiden som visar hur man utvecklar för HoloLens 2. Det här meddelandet uppdateras med en länk till dessa självstudier när de publiceras.


slutprodukt - start

I den här kursen får du lära dig hur du lägger till maskininlärningsfunktioner (ML) i ett mixed reality-program 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 indata, 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 få din modell att fungera i Azure-molnet, så att den sedan kan poängsätta nya data. Mer information finns på sidan för Azure Machine Learning Studio (klassisk).

Efter att ha slutfört den här kursen har du ett integrerande headsetprogram för mixad verklighet och har lärt dig hur du gör följande:

  1. 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.
  2. Skapa ett Unity-projekt som kan ta emot och tolka förutsägelsedata från ML-tjänsten.
  3. Visa predikatdata visuellt i Unity-projektet genom att tillhandahålla de mest populära försäljningsartiklarna 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 ditt mixed reality-program.

Den här kursen är en självständig självstudie som inte direkt involverar andra Mixed Reality Labs.

Stöd för enheter

Kurs HoloLens Integrerande headset
MR och Azure 307: Maskininlärning ✔️ ✔️

Anteckning

Den här kursen fokuserar främst på Windows Mixed Reality integrerande (VR) headset, men du kan också använda det du lär dig i den här kursen för att 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 eko under röstinspelningen.

Förutsättningar

Anteckning

Den här självstudien är utformad för utvecklare som har grundläggande erfarenhet av Unity och C#. Tänk också på att kraven och de skriftliga anvisningarna i det här dokumentet representerar vad 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 kommer att matcha perfekt vad du hittar i nyare programvara än vad som anges nedan.

Vi rekommenderar följande maskinvara och programvara för den här kursen:

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 byggtiden).

Kapitel 1 – Konfiguration av Azure Storage-konto

Om du vill använda Azure Translator-API:et måste du konfigurera en instans av tjänsten som ska göras tillgänglig för ditt program.

  1. Logga in på Azure-portalen.

    Anteckning

    Om du inte redan har ett Azure-konto måste du skapa ett. Om du följer den här självstudien i ett klassrum eller en labbsituation ber du din lärare eller någon av rektorerna om hjälp med att konfigurera ditt nya konto.

  2. När du är inloggad klickar du på Lagringskonton på den vänstra menyn.

    Skärmbild av Microsoft Azure-fönstret som visar objektet Lagringskonton i den vänstra navigeringsmenyn.

    Anteckning

    Ordet Ny kan ha ersatts med Skapa en resurs i nyare portaler.

  3. På fliken Lagringskonton klickar du på Lägg till.

    Skärmbild av Microsoft Azure-fönstret som visar skärmen Lagringskonton och den markerade knappen Lägg till.

  4. I panelen Skapa lagringskonto :

    1. Infoga ett namn för ditt konto. Tänk på att det här fältet endast accepterar siffror och gemener.

    2. Som Distributionsmodell väljer du Resource Manager.

    3. För Typ av konto väljer du Lagring (generell användning v1).

    4. För Prestanda väljer du Standard.

    5. För Replikering väljer du Read-access-geo-redundant storage (RA-GRS).

    6. Lämna Säker överföring obligatoriskt som Inaktiverad.

    7. Välj en prenumeration.

    8. 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 läsa artikeln om resursgrupper.

    9. Fastställ platsen för resursgruppen (om du skapar en ny resursgrupp). Platsen skulle helst finnas i den region där programmet skulle köras. Vissa Azure-tillgångar är bara tillgängliga i vissa regioner.

  5. Du måste också bekräfta att du har förstått de villkor som tillämpas på den här tjänsten.

    Skärmbild av dialogrutan Skapa lagringskonto, som visar den information som användaren har fyllt i i de obligatoriska textfälten.

  6. När du har klickat på Skapa måste du vänta tills tjänsten har skapats. Det kan ta en minut.

  7. Ett meddelande visas i portalen när tjänstinstansen har skapats.

    Skärmbild av meddelandet Distributionen lyckades, som informerar användaren om att distributionen till resursgruppen lyckades.

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.

  1. 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.

    Skärmbild av Microsoft Azure-fönstret som visar Machine Learning Studio-arbetsytan i innehållsfönstret.

  2. Den nya sidan innehåller en beskrivning av Machine Learning Studio-arbetsytetjä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.

  3. När du har klickat på Skapa visas en panel där du behöver ange information om din nya Machine Learning Studio-tjänst:

    1. Infoga önskat arbetsytenamn för den här tjänstinstansen.

    2. Välj en prenumeration.

    3. 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 läsa artikeln om resursgrupper.

    4. Fastställ platsen för resursgruppen (om du skapar en ny resursgrupp). Platsen skulle helst finnas 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.

    5. I avsnittet Lagringskonto klickar du på Använd befintlig, klickar sedan på listrutan och därifrån klickar du på lagringskontot som du skapade i det senaste kapitlet.

    6. Välj lämplig prisnivå för arbetsyta från listmenyn.

    7. I avsnittet Webbtjänstplan klickar du på Skapany och infogar sedan ett namn för det i textfältet.

    8. 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.

    9. Du måste också bekräfta att du har förstått de villkor som tillämpas på den här tjänsten.

    10. Klicka på Skapa.

      Skärmbild av dialogrutan Azure Machine Learning Studio som visar den information som användaren har angett i textfälten.

  4. När du har klickat på Skapa måste du vänta tills tjänsten har skapats. Det kan ta en minut.

  5. Ett meddelande visas i portalen när tjänstinstansen har skapats.

    Skärmbild av Microsoft Azure-fönstret som visar ett oläst meddelande på navigeringsmenyn.

  6. Klicka på meddelandet för att utforska din nya tjänstinstans.

    Skärmbild av meddelandet Distributionen lyckades, som informerar användaren om att arbetsytans distribution till resursgruppen lyckades.

  7. Klicka på knappen Gå till resurs i meddelandet för att utforska din nya tjänstinstans.

  8. På den sida som visas under avsnittet Ytterligare länkar klickar du på Starta Machine Learning Studio, som dirigerar webbläsaren till Machine Learning Studio-portalen .

    Skärmbild av Microsoft Azure-fönstret som visar den markerade länken Starta Machine Learning Studio i innehållsfönstret.

  9. Använd knappen Logga in längst upp till höger eller i mitten för att logga in på Machine Learning Studio (klassisk).

    Skärmbild av Machine Learning Studio-fönstret som visar den markerade inloggningsknappen.

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 med namnet 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 mest sålda objekten varje timme varje dag under året 2017.

Skärmbild av Microsoft Excel-fönstret, som visar en exempeldatauppsättning med bäst säljande objekt varje timme varje dag under året 2017.

Till exempel, dag 1 av 2017, klockan 13 (timme 13), var det mest sålda objektet salt och peppar.

Den här exempeltabellen innehåller 9998 poster.

  1. 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.

    Skärmbild av den klassiska Microsoft Azure Machine Learning Studio-portalen, som visar den markerade knappen Nytt på menyn.

  2. Ett avsnitt kommer upp nedifrån och inom det finns navigeringspanelen till vänster. Klicka på Datauppsättning och sedan till höger om det, Från lokal fil.

    Skärmbild av dialogrutan Ny, som visar de markerade menyalternativen Datauppsättning och Från lokal fil.

  3. Ladda upp den nya datauppsättningen genom att följa dessa steg:

    1. Uppladdningsfönstret visas där du kan bläddra i hårddisken efter den nya datauppsättningen.

      Skärmbild av dialogrutan Ladda upp en ny datauppsättning, som visar knappen Bläddra för användaren att hitta och välja de data som ska laddas upp.

    2. När du är markerad och tillbaka i uppladdningsfönstret lämnar du kryssrutan avmarkerad.

    3. I textfältet nedan anger duProductsTableCSV.csv som namn på datauppsättningen (men bör läggas till automatiskt).

    4. I listrutan för Typ väljer du Allmän CSV-fil med ett huvud (.csv).

    5. 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 resultatet 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:

  1. Klicka igen på knappen + Nytt längst ned till vänster på sidan och klicka sedan på Experiment>Tomt experiment.

    Skärmbild av Microsoft Azure Machine Learning Studio-fönstret som visar att menyalternativet Experiment är markerat.

  2. En ny sida visas med ett tomt experiment:

  3. I panelen till vänster expanderar du Sparade datauppsättningar>Mina datauppsättningar och drar ProductsTableCSV till experimentarbetsytan.

    Skärmbild av fönstret Experiment, som visar den expanderade mappen Mina datauppsättningar på menyn och Produkttabell C S V i experimentarbetsytan.

  4. 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 algoritmen som genereras.

    Skärmbild av experimentfönstret som visar objekten Partition och Exempel och Dela data på menyn med Delade data tillämpade på arbetsytan.

  5. I den högra panelen (medan objektet Dela upp 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 är de återstående 30 %. Kontrollera att data delas slumpmässigt genom att kontrollera att kryssrutan Randomized split förblir markerad.

    Skärmbild av panelen Egenskaper, som visar den ifyllda kryssrutan Randomized split och fältet Bråk med rader har angetts till 0 punkt 7.

  6. Dra en anslutning från basen av Objektet ProductsTableCSV på arbetsytan längst upp i objektet Dela data. Detta ansluter objekten och skickar ProductsTableCSV-datauppsättningens utdata (data) till indata för delade data.

    Skärmbild av experimentarbetsytan, som visar en anslutning mellan produkttabell C S V punkt c s v och dela data.

  7. I panelen Experiment till vänster expanderar du Machine Learning>Train. Dra objektet Träna modell till arbetsytan Experiment. Arbetsytan bör se likadan ut som nedan.

    Skärmbild av experimentarbetsytan, som visar en anslutning mellan produkttabell C S V punkt c s v och dela data, med träningsmodell nedan.

  8. Dra en anslutning längst ned till vänster i objektet Dela data längst upp till höger i objektet Träna modell . Den första 70 %-uppdelningen från datauppsättningen används av träningsmodellen för att träna algoritmen.

    Skärmbild av experimentarbetsytan, som visar en anslutning mellan produkttabell C S V punkt c s v, delade data och träningsmodell.

  9. 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).

  10. 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å krysset i det nedre högra hörnet för att stänga markeringsdialogrutan.

    Skärmbild av dialogrutan Välj en enskild kolumn, som visar den markerade produktkolumnen på kolumnmenyn.

  11. Du kommer att träna en algoritm för logistikregression 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 machine learning-algoritmens fuskblad

  12. Från panelen experimentobjekt till vänster expanderar du Machine Learning>Initialize ModelClassification (Initieramodellklassificering>) och drar objektet Logistic Regression (Multiclass Logistic Regression) till experimentarbetsytan.

  13. Anslut utdata, längst ned i Multiclass Logistic Regression, till de övre vänstra indata för objektet Train Model .

    Skärmbild av experimentarbetsytan, som visar träningsmodellen som är ansluten till multiklassens logistiska regression och delade data.

  14. I listan över experimentobjekt i panelen till vänster expanderar du Machine Learning>Score och drar objektet Poängsätt modell till arbetsytan.

  15. Anslut utdata, längst ned i träningsmodellen, till indata överst till vänster i poängmodellen.

  16. 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 .

    Skärmbild av experimentarbetsytan som visar poängmodellen som är ansluten till träna modell och dela data.

  17. I listan över experimentobjekt i panelen till vänster expanderar du Machine Learning>Evaluate och drar objektet Utvärdera modell till arbetsytan.

  18. Anslut utdata från poängmodellen till indata överst till vänster i Utvärdera modell.

    Skärmbild av experimentarbetsytan som visar utvärdera modellen som är ansluten till poängmodellen.

  19. 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.

    Skärmbild av menyn Experimentarbetsyta, som visar de markerade knapparna Spara och Kör.

  20. Du kan se status för experimentet längst upp till höger på arbetsytan. Vänta en stund tills experimentet har slutförts.

    Om du har en stor (verklig) datauppsättning kan det ta flera timmar att köra experimentet.

    Skärmbild av fönstret Experimentarbetsyta, som visar status för experimentet i det övre högra hörnet.

  21. Högerklicka på objektet Utvärdera modell på arbetsytan och hovra muspekaren över Utvärderingsresultat på snabbmenyn och välj sedan Visualisera.

    Skärmbild av högerklicksmenyn för objektet Utvärdera modell, som visar de markerade utvärderingsresultaten och visualisera menyalternativen.

  22. Utvärderingsresultaten visas som visar de förutsagda resultaten jämfört med de faktiska utfallen. Detta använder 30 % av den ursprungliga datauppsättningen, som delades tidigare, för att utvärdera modellen. Du kan se att resultaten inte är bra, helst skulle du ha det högsta talet i varje rad vara det markerade objektet i kolumnerna.

    Skärmbild av resultatdiagrammet, som visar resultatet av experimentet i en graf med rutor med procentandelar.

  23. Stäng resultatet.

  24. 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 på menyn längst ned på sidan och klicka på Förutsägelsewebbtjänst.

    Skärmbild av menyn Experiment, som visar det markerade menyalternativet Konfigurera webbtjänst.

  25. En ny flik skapas och träningsmodellen slås samman för att skapa den nya webbtjänsten.

  26. 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.

    Skärmbild av menyn Experiment, som visar den markerade knappen Kör-menyn och menyalternativet Kör.

  27. När den har körts 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.

    Skärmbild av menyn Experiment som visar det markerade menyalternativet Distribuera webbtjänstklassiker från menyknappen Distribuera webbtjänst.

    Webbläsaren kan uppmana dig 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.

  28. 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.

    Skärmbild av fönstret Microsoft Azure Machine Learning Studio, som visar A P I-nyckeln och den markerade länken Svar på begärandesnedstreck.

    Anteckning

    Om du klickar på Testa 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.

  29. En ny webbsida öppnas med instruktioner och några exempel på den begärandestruktur som krävs av Machine Learning Studio (klassisk). Kopiera den begärande-URI som visas på den här sidan till anteckningarna.

    Skärmbild av sidan Förfrågningssvar A P I-dokumentation, som visar den markerade begärande-U R I.

Nu har du skapat ett maskininlärningssystem som ger den mest sannolika produkten som ska säljas baserat på historiska inköpsdata, korrelerade med tiden på dagen och dagen på året.

För att 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.

På sidan Förbrukningsinformation visas den information som du behöver för att anropa webbtjänsten från koden. Ta en kopia av primärnyckeln och URL:en för begäran-svar . Du behöver dessa i nästa kapitel.

Kapitel 5 – Konfigurera Unity-projektet

Konfigurera och testa ditt Mixed Reality integrerande headset.

Anteckning

Du kommer inte att behöva rörelsekontrollanter för den här kursen. Om du behöver stöd för att konfigurera det uppslukande headsetet klickar du här.

  1. Öppna Unity och skapa ett nytt Unity-projekt med namnet MR_MachineLearning. Kontrollera att projekttypen är inställd på 3D.

  2. 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 .

  3. Gå sedan tillInställningar för filbygge> och växla plattformen till Universell Windows-plattform genom att klicka på knappen Växla plattform.

  4. Kontrollera också att:

    1. Målenheten är inställd på Valfri enhet.

      För Microsoft HoloLens anger du Målenhet till HoloLens.

    2. Byggtyp är inställt på D3D.

    3. SDK är inställt på Senaste installerat.

    4. Visual Studio-versionen är inställd på Senaste installerad.

    5. Build and Run är inställt på Lokal dator.

    6. Oroa dig inte för att konfigurera Scener just nu, eftersom de tillhandahålls senare.

    7. De återstående inställningarna bör lämnas som standard för tillfället.

      Skärmbild av dialogrutan Skapa inställningar som visar Universell Windows-plattform menyalternativet är markerat.

  5. I fönstret Build Settings (Skapa inställningar ) klickar du på knappen Spelarinställningar . Då öppnas den relaterade panelen i det utrymme där kontrollanten finns.

  6. I den här panelen måste några inställningar verifieras:

    1. På fliken Andra inställningar :

      1. Körningsversionen för skript ska vara experimentell (.NET 4.6 Motsvarande)

      2. Skriptserverdelen ska vara .NET

      3. API-kompatibilitetsnivån ska vara .NET 4.6

        Skärmbild av fliken Andra inställningar, som visar de inställningar som är aktiverade enligt de beskrivningar som beskrivs.

    2. På fliken Publiceringsinställningar går du till Funktioner och kontrollerar:

      • InternetClient

        Skärmbild av fliken Publiceringsinställningar som visar att Internetklientfunktionen är aktiverad under Funktioner.

    3. Längre ned på panelen, i XR-inställningar (finns nedan Publiceringsinställningar), markerar du Virtual Reality Supported (Virtual Reality Supported) och kontrollerar att Windows Mixed Reality SDK har lagts till

      Skärmbild av fliken X R-inställningar som visar Windows Mixed Reality S D K under Virtual Reality S D K s är aktiverat.

  7. Tillbaka i Build SettingsUnity C# Projects är inte längre nedtonat. markera kryssrutan bredvid detta.

  8. Stäng fönstret Build Settings (Bygginställningar).

  9. 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 det 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 paketet:

  1. Med Unity-instrumentpanelen framför dig klickar du på Tillgångar på menyn överst på skärmen och klickar sedan på Importera paket, Anpassat paket.

    Skärmbild av Unity-instrumentpanelen, som visar de markerade menyalternativen Importera paket och Anpassat paket.

  2. Använd filväljaren för att välja paketet Azure-MR-307.unitypackage och klicka på Öppna.

  3. En lista över komponenter för den här tillgången visas för dig. Bekräfta importen genom att klicka på Importera.

    Skärmbild av dialogrutan Importera Unity-paket som visar att Azure Machine Learning-paketet importeras.

  4. 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.

    Skärmbild av Unity-projektpanelen, som visar de nyligen importerade mapparna i mappen Tillgångar.

  5. 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.

    Skärmbild av Unity Scene-fönstret, som visar det markerade menyalternativet Gizmos i det övre navigeringsfönstret.

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 som du tog med dig. 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 till att Processen inte är markerad.

    Importera DLL:er i Unity

Kapitel 8 – Skapa klassen ShelfKeeper

Klassen ShelfKeeper är värd för metoder som styr användargränssnittet och produkterna 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:

  1. Dubbelklicka på ShelfKeeper-skriptet i mappen Skript för att öppna det med Visual Studio 2017.

  2. 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);
        }
    }
    
  3. Se till att spara ändringarna i Visual Studio innan du återvänder till Unity.

  4. Gå tillbaka till Unity-redigeraren och kontrollera att klassen ShelfKeeper ser ut som nedan:

    Skärmbild av klassen Shelf Keeper som visar att referensmålen är inställda på Date Text Mesh och Time Text Mesh.

    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:

    1. Ö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.

    2. I hierarkin expanderar du tidsvisningsobjektet (genom att vänsterklicka på pilen bredvid den). Klicka sedan på huvudkameran inifrån hierarkin så att inspektören visar sin information.

    3. Välj huvudkameranhierarkipanelen. Dra datum - ochtidsobjekten från hierarkipanelen till datumtext - och tidstextplatserna i inspektören för huvudkameran i ShelfKeeper-komponenten .

    4. Dra spawn-punkterna från hierarkipanelen (under objektet Hylla ) till referensmålen för 3element under spawn point-matrisen , enligt bilden.

      Skärmbild av hierarkipanelen som visar att menyalternativen Datum, Tid och tre Spawn Point finns i klassen Shelf Keeper.

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.

  • Anropar ShelfKeeper-klassmetoderna för att visa data i scenen.

Så här skapar du den här klassen:

  1. Gå till mappen Skript i projektpanelen.

  2. Högerklicka i mappen Skapa>C#-skript. Anropa skriptet ProductPrediction.

  3. Dubbelklicka på det nya ProductPrediction-skriptet för att öppna det med Visual Studio 2017.

  4. Om dialogrutan Identifierad filändring visas klickar du på *Läs in lösningen igen.

  5. 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;
    
  6. I klassen ProductPrediction infogar du 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; }
        }
    
  7. Lägg sedan till följande variabler ovanför föregående kod (så att den JSON-relaterade koden är 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 primärnyckeln och slutpunkten för begärandesvar från Machine Learning-portalen i variablerna här. Bilderna nedan visar var du skulle ha tagit nyckeln och slutpunkten från.

    Skärmbild av Microsoft Azure Machine Learning Studio, som visar länken Svar på begärandenedskärning under A P I-hjälpsidan.

    Skärmbild av sidan Förfrågningssvar A P I-dokumentation, som visar markerad U R I för POST-begäran.

  8. Infoga den här koden i metoden Start(). Metoden Start() anropas när klassen initieras:

        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. 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 de 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();
        }
    
  10. Du kan ta bort metoden Update() eftersom den här klassen inte använder den.

  11. 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);
            }
        }
    
  12. 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();
        }
    
  13. Spara Visual Studio och gå tillbaka till Unity.

  14. Dra klassskriptet ProductPrediction från mappen Skript till huvudkameraobjektet .

  15. 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:

  1. Spara den aktuella scenen genom att klicka på Spara scener>.

  2. Gå till Inställningarförfilbygge>

  3. Markera kryssrutan Unity C# Projects (detta är viktigt eftersom du kan redigera klasserna när bygget har slutförts).

  4. Klicka på Lägg till öppna scener,

  5. Klicka på Skapa.

    Skärmbild av dialogrutan Skapa inställningar som visar Universell Windows-plattform menyalternativet är markerat.

  6. Du uppmanas att välja den mapp där du vill skapa lösningen.

  7. Skapa en BUILDS-mapp och skapa en annan mapp i mappen med ett valfritt namn.

  8. Klicka på den nya mappen och klicka sedan på Välj mapp för att påbörja bygget på den platsen.

    Skärmbild av Utforskaren-fönstret som visar den markerade mappen Builds.

    Skärmbild av fönstret Utforskaren som visar innehållet i mappen Builds och den markerade knappen Välj mapp.

  9. 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 programmet:

  1. Gå till din nya Unity-version ( mappen App ) och öppna lösningsfilen med Visual Studio.

  2. 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:

    Skärmbild av Visual Studio-fönstret som visar det markerade menyalternativet Återställ Nu Hämta paket.

  3. I Lösningskonfiguration väljer du Felsök.

  4. I Lösningsplattform väljer du x86, Lokal dator.

    För Microsoft HoloLens kan det vara enklare att ställa in den på Fjärrdator, så att du inte är bunden till datorn. Men du måste också göra följande:

    • Känna till IP-adressen för holoLens, som finns i inställningsnätverket > & Internet > Wi-Fi > avancerade alternativ. IPv4 är den adress som du bör använda.
    • Kontrollera att utvecklarläget är ; finns i Inställningar > Uppdatera & Säkerhet > för utvecklare.

    Skärmbild av Microsoft Visual Studio-menyn som visar att Lokal dator har valts i Lösningsplattformen.

  5. Gå till menyn Skapa och klicka på Distribuera lösning för att separat läsa in programmet till datorn.

  6. Appen 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 din 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.

Skärmbild av Microsoft Visual Studio-fönstret, som visar en hylla med tre objekt och ett kort med texten 15 klockan 23 feb.

Ö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 också skulle vara användbara.

Ö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.