Dela via


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.


slutprodukt - start

I den här kursen får du lära dig hur du lägger till funktioner för Mašinsko učenje (ML) i ett mixed reality-program med hjälp av Azure Mašinsko učenje Studio (klassisk).

Azure Mašinsko učenje 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 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 Mašinsko učenje 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:

  1. Ange en tabell med försäljningsdata till Azure Mašinsko učenje 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ä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:

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.

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

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

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

    Kommentar

    Ordet Nytt 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 Resurshanterare.

    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åt säker överföring vara 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 gå till resursgruppens artikel.

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

  5. Du måste också bekräfta att du har förstått de villkor som gäller för 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 Mašinsko učenje Studio (klassisk)

Om du vill använda Azure Mašinsko učenje måste du konfigurera en instans av Mašinsko učenje-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 Mašinsko učenje Studio-arbetsyta och trycker på Retur.

    Skärmbild av Microsoft Azure-fönstret som visar Mašinsko učenje Studio-arbetsytan i innehållsfönstret.

  2. Den nya sidan innehåller en beskrivning av tjänsten Mašinsko učenje Studio Workspace. 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 lite information om din nya Mašinsko učenje 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 gå till resursgruppens artikel.

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

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

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

    7. I avsnittet Webbtjänstplan klickar du på Skapa ny 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 gäller för den här tjänsten.

    10. Klicka på Skapa.

      Skärmbild av dialogrutan Azure Mašinsko učenje 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 i 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 Mašinsko učenje Studio, som dirigerar webbläsaren till Mašinsko učenje Studio-portalen.

    Skärmbild av Microsoft Azure-fönstret som visar den markerade länken Starta Mašinsko učenje 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å din Mašinsko učenje Studio (klassisk).

    Skärmbild av fönstret Mašinsko učenje Studio, som visar den markerade knappen Logga in.

Kapitel 3 – Mašinsko učenje Studio (klassisk): Konfiguration av datauppsättning

Ett sätt Mašinsko učenje algoritmer att fungera är genom att analysera befintliga data och sedan försöka förutsäga framtida resultat baserat på den befintliga datauppsättningen. 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.

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

  1. Gå tillbaka till Mašinsko učenje 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 mašinsko učenje Studio-portalen, som visar den markerade knappen Ny 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 den, 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 på hårddisken efter den nya datauppsättningen.

      Skärmbild av dialogrutan Ladda upp en ny datamängd, 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 du ProductsTableCSV.csv som namn på datauppsättningen (men bör läggas till automatiskt).

    4. Välj Allmän CSV-fil med ett huvud (.csv)med hjälp av listrutan för Typ.

    5. Tryck på krysset längst ned till höger i uppladdningsfönstret så laddas datauppsättningen upp.

Kapitel 4 – Mašinsko učenje 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:

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

    Skärmbild av fönstret Microsoft Azure mašinsko učenje Studio, 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 experimentfönstret, som visar den expanderade mappen Mina datauppsättningar i 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 den algoritm 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 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.

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

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

  7. I panelen Experiment till vänster expanderar du Mašinsko učenje> Train. Dra objektet Träna modell ut till arbetsytan Experiment. Arbetsytan bör se likadan ut som nedan.

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

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

    Skärmbild av experimentarbetsytan, som visar en anslutning som upprättats 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å bockmarkeringen 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 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 informationen om de olika algoritmer som tillhandahålls av Azure Mašinsko učenje Studio, men du kan ta reda på mer från Mašinsko učenje algoritmens fuskblad

  12. Från panelen experimentobjekt till vänster expanderar du Mašinsko učenje> Initialisera modellklassificering> och drar objektet Logistic Regression för multiklass till experimentarbetsytan.

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

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

  14. Expandera Mašinsko učenje> Score i listan över experimentobjekt i panelen till vänster och dra objektet Poängsätt modell till arbetsytan.

  15. Anslut utdata, längst ned i träningsmodellen, till den övre vänstra inmatningen 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äningsmodellen och delade data.

  17. I listan över experimentobjekt i panelen till vänster expanderar du Mašinsko učenje> 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 Mašinsko učenje 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 är klart.

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

    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 från snabbmenyn och välj sedan Visualisera.

    Skärmbild av menyalternativet Utvärdera modell med högerklick, som visar markerade utvärderingsresultat och Visualisera menyalternativ.

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

    Skärmbild av resultatdiagrammet, som visar resultatet av experimentet i ett diagram med rutor med procentsatser.

  23. Stäng resultatet.

  24. Om du vill använda din nyligen tränade Mašinsko učenje 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.

    Skärmbild av experimentmenyn som visar det markerade menyalternativet Konfigurera webbtjänst.

  25. En ny flik skapas och träningsmodellen sammanfogas 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 experimentmenyn, som visar den markerade knappen Kör-menyn och menyalternativet Kör.

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

    Skärmbild av experimentmenyn, som visar det markerade klassiska menyalternativet Distribuera webbtjänst från menyknappen Distribuera webbtjänst.

    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.

  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 mašinsko učenje Studio, som visar A P I-nyckeln och den markerade länken Svar på svar om begärandesnedstreck.

    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.

  29. En ny webbsida öppnas med instruktioner och några exempel på den begärandestruktur som krävs av Mašinsko učenje Studio (klassisk). Kopiera URI:n för begäran 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 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.

  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 till Inställningar för filbygge>och växla plattformen till Universal Windows Platform 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 dessa tillhandahålls senare.

    7. De återstående inställningarna ska vara kvar som standard för tillfället.

      Skärmbild av dialogrutan Bygginställningar som visar menyalternativet Universell Windows-plattform har valts.

  5. I fönstret Bygginställningar klickar du på knappen Spelarinställningar. Då öppnas den relaterade panelen i det utrymme där inspektören finns.

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

    1. På fliken Andra inställningar :

      1. Skriptkörningsversionen bör vara experimentell (.NET 4.6-motsvarighet)

      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 dispositionssteg 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 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

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

  7. Tillbaka i Bygginställningar Unity C# -projekt är inte längre nedtonade. 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 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:

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

    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 hur Azure Mašinsko učenje-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 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.

    Importera DLL:er i Unity

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:

  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 det). Klicka sedan på huvudkameran från hierarkin så att kontrollanten visar sin information.

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

    4. Dra Spawn Points från hierarkipanelen (under hyllobjektet) till referensmålen för 3 element under matrisen Spawn Point enligt bilden.

      Skärmbild av hierarkipanelen som visar att menyalternativen Datum, Tid och De tre Spawn Point-menyalternativen 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 Mašinsko učenje 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:

  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 Filändring har identifierats 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 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 Mašinsko učenje-tjänsten.

        /// <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 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ärandesvar från Mašinsko učenje-portalen i variablerna här. Bilderna nedan visar var du skulle ha tagit nyckeln och slutpunkten från.

    Skärmbild av Microsoft Azure mašinsko učenje 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 POST Request U R I.

  8. 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));
        }
    
  9. Följande är den metod som samlar in datum och tid från Windows och konverterar den till ett format som vårt Mašinsko učenje 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();
        }
    
  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 Mašinsko učenje 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 Script 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 i filen>.

  2. Gå till Inställningar för filbygge>

  3. Markera kryssrutan Unity C# Projects (det här ä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 Bygginställningar som visar menyalternativet Universell Windows-plattform ä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 lämpligt 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 fönstret Istraživač datoteka, som visar den markerade mappen Builds.

    Skärmbild av fönstret Istraživač datoteka, som visar innehållet i mappen Builds och den markerade knappen Välj mapp.

  9. När Unity har byggt klart (det kan ta lite tid) öppnas ett Istraživač datoteka 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:

  1. Gå till din nya Unity-version (appmappen) 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 Istraživač rešenja (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 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.

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

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

  6. 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 Mašinsko učenje program

Grattis, du har skapat en mixed reality-app som använder Azure-Mašinsko učenje 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 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.