Delen via


HoloLens (1e generatie) en Azure 307: Machine learning


Notitie

De Mixed Reality Academy-zelfstudies zijn ontworpen met HoloLens (1e generatie) en Mixed Reality Immersive Headsets in gedachten. Daarom vinden we het belangrijk om deze zelfstudies te behouden voor ontwikkelaars die nog steeds op zoek zijn naar richtlijnen bij het ontwikkelen voor die apparaten. Deze zelfstudies worden niet bijgewerkt met de nieuwste toolsets of interacties die worden gebruikt voor HoloLens 2. Ze blijven behouden om door te gaan met het werken op de ondersteunde apparaten. Er is een nieuwe reeks zelfstudies die in de toekomst zullen worden gepost en die laten zien hoe u zich ontwikkelt voor HoloLens 2. Deze kennisgeving wordt bijgewerkt met een koppeling naar deze zelfstudies wanneer ze worden gepost.


eindproduct - start

In deze cursus leert u hoe u machine learning-mogelijkheden (ML) toevoegt aan een mixed reality-toepassing met behulp van Azure Machine Learning Studio (klassiek).

Azure Machine Learning Studio (klassiek) is een Microsoft-service, die ontwikkelaars een groot aantal machine learning-algoritmen biedt, die kunnen helpen bij gegevensinvoer, uitvoer, voorbereiding en visualisatie. Vanuit deze onderdelen is het vervolgens mogelijk om een predictive analytics-experiment te ontwikkelen, erop te herhalen en het te gebruiken om uw model te trainen. Na de training kunt u uw model operationeel maken in de Azure-cloud, zodat het vervolgens nieuwe gegevens kan scoren. Ga naar de pagina Azure Machine Learning Studio (klassiek) voor meer informatie.

Nadat u deze cursus hebt voltooid, hebt u een mixed reality immersive headset-toepassing en hebt u geleerd hoe u het volgende doet:

  1. Geef een tabel met verkoopgegevens op voor de Azure Machine Learning Studio-portal (klassiek) en ontwerp een algoritme om toekomstige verkoop van populaire items te voorspellen.
  2. Maak een Unity-project dat voorspellingsgegevens van de ML-service kan ontvangen en interpreteren.
  3. Geef de predicatiegegevens visueel weer in het Unity-project door de populairste verkoopartikelen op een plank te leveren.

In uw toepassing is het aan u om te bepalen hoe u de resultaten integreert met uw ontwerp. Deze cursus is ontworpen om u te leren hoe u een Azure-service integreert met uw Unity-project. Het is uw taak om de kennis die u uit deze cursus krijgt te gebruiken om uw mixed reality-toepassing te verbeteren.

Deze cursus is een zelfstandige zelfstudie, die niet rechtstreeks betrekking heeft op andere Mixed Reality Labs.

Ondersteuning voor apparaten

Cursus HoloLens Insluitende headsets
MR en Azure 307: Machine learning ✔️ ✔️

Notitie

Hoewel deze cursus voornamelijk gericht is op Windows Mixed Reality immersive headsets (VR), kunt u ook toepassen wat u in deze cursus leert op Microsoft HoloLens. Terwijl u de cursus volgt, ziet u notities over de wijzigingen die u mogelijk moet toepassen om HoloLens te ondersteunen. Wanneer u HoloLens gebruikt, ziet u mogelijk echo tijdens spraakopname.

Vereisten

Notitie

Deze zelfstudie is ontworpen voor ontwikkelaars die basiservaring hebben met Unity en C#. Houd er ook rekening mee dat de vereisten en schriftelijke instructies in dit document staan voor wat is getest en geverifieerd op het moment van schrijven (mei 2018). U kunt de nieuwste software gebruiken, zoals vermeld in het artikel over de installatie van de hulpprogramma's, hoewel er niet van wordt uitgegaan dat de informatie in deze cursus perfect overeenkomt met wat u vindt in nieuwere software dan hieronder wordt vermeld.

Voor deze cursus raden we de volgende hardware en software aan:

Voordat u begint

Om problemen met het bouwen van dit project te voorkomen, wordt u sterk aangeraden het project te maken dat in deze zelfstudie wordt genoemd in een hoofdmap of in een near-rootmap (lange mappaden kunnen problemen veroorzaken tijdens de build).

Hoofdstuk 1: Azure Storage-account instellen

Als u de Azure Translator-API wilt gebruiken, moet u een exemplaar van de service configureren dat beschikbaar moet worden gemaakt voor uw toepassing.

  1. Meld u aan bij de Azure Portal.

    Notitie

    Als u nog geen Azure-account hebt, moet u er een maken. Als u deze zelfstudie volgt in een leslokaal- of labsituatie, vraagt u uw docent of een van de proctors voor hulp bij het instellen van uw nieuwe account.

  2. Zodra u bent aangemeld, klikt u in het linkermenu op Opslagaccounts .

    Schermopname van het Microsoft Azure-venster met het item Opslagaccounts in het linkernavigatiemenu.

    Notitie

    Het woord Nieuw is mogelijk vervangen door Een resource maken in nieuwere portals.

  3. Klik op het tabblad Opslagaccounts op Toevoegen.

    Schermopname van het Microsoft Azure-venster met het scherm Opslagaccounts en de gemarkeerde knop Toevoegen.

  4. In het deelvenster Opslagaccount maken:

    1. Voeg een naam voor uw account in, houd er rekening mee dat dit veld alleen cijfers en kleine letters accepteert.

    2. Selecteer Resource Manager voor het implementatiemodel.

    3. Selecteer Opslag (algemeen gebruik v1) als soort account.

    4. Selecteer bij Prestaties de optie Standaard.

    5. Voor replicatie selecteert u geografisch redundante opslag met leestoegang (RA-GRS).

    6. Laat Beveiligde overdracht vereist als Uitgeschakeld.

    7. Selecteer een abonnement.

    8. Kies een resourcegroep of maak een nieuwe. Een resourcegroep biedt een manier om de toegang te bewaken, te beheren, facturering in te richten en te beheren voor een verzameling Azure-assets. Het wordt aanbevolen om alle Azure-services die zijn gekoppeld aan één project (zoals deze labs) onder een gemeenschappelijke resourcegroep te houden.

      Als u meer wilt weten over Azure-resourcegroepen, gaat u naar het artikel over de resourcegroep.

    9. Bepaal de locatie voor uw resourcegroep (als u een nieuwe resourcegroep maakt). De locatie zou zich idealiter in de regio bevinden waar de toepassing zou worden uitgevoerd. Sommige Azure-assets zijn alleen beschikbaar in bepaalde regio's.

  5. U moet ook bevestigen dat u de voorwaarden hebt begrepen die op deze Service zijn toegepast.

    Schermopname van het dialoogvenster Opslagaccount maken, waarin de gegevens worden weergegeven die de gebruiker heeft ingevuld in de vereiste tekstvelden.

  6. Nadat u op Maken hebt geklikt, moet u wachten totdat de service is gemaakt. Dit kan een minuut duren.

  7. Er wordt een melding weergegeven in de portal zodra het service-exemplaar is gemaakt.

    Schermopname van de melding Implementatie geslaagd, waarmee de gebruiker wordt geïnformeerd dat de implementatie naar de resourcegroep is geslaagd.

Hoofdstuk 2: Azure Machine Learning Studio (klassiek)

Als u Azure Machine Learning wilt gebruiken, moet u een exemplaar van de Machine Learning-service configureren dat beschikbaar moet worden gemaakt voor uw toepassing.

  1. Klik in Azure Portal op Nieuw in de linkerbovenhoek en zoek naar Machine Learning Studio Workspace en druk op Enter.

    Schermopname van het Microsoft Azure-venster, waarin de Machine Learning Studio-werkruimte in het inhoudsvenster wordt weergegeven.

  2. De nieuwe pagina bevat een beschrijving van de Machine Learning Studio Workspace-service . Klik linksonder in deze prompt op de knop Maken om een koppeling met deze service te maken.

  3. Zodra u op Maken hebt geklikt, wordt er een deelvenster weergegeven waarin u enkele details over uw nieuwe Machine Learning Studio-service moet opgeven:

    1. Voeg de gewenste werkruimtenaam in voor dit service-exemplaar.

    2. Selecteer een abonnement.

    3. Kies een resourcegroep of maak een nieuwe. Een resourcegroep biedt een manier om de toegang te bewaken, te beheren, facturering in te richten en te beheren voor een verzameling Azure-assets. Het wordt aanbevolen om alle Azure-services die zijn gekoppeld aan één project (zoals deze labs) onder een gemeenschappelijke resourcegroep te houden.

      Als u meer wilt weten over Azure-resourcegroepen, gaat u naar het artikel over de resourcegroep.

    4. Bepaal de locatie voor uw resourcegroep (als u een nieuwe resourcegroep maakt). De locatie zou zich idealiter in de regio bevinden waar de toepassing zou worden uitgevoerd. Sommige Azure-assets zijn alleen beschikbaar in bepaalde regio's. U moet dezelfde resourcegroep gebruiken die u hebt gebruikt voor het maken van Azure Storage in het vorige hoofdstuk.

    5. Klik voor de sectie Opslagaccount op Bestaande gebruiken, klik vervolgens op de vervolgkeuzelijst en klik daar op het opslagaccount dat u in het laatste hoofdstuk hebt gemaakt.

    6. Selecteer de juiste werkruimteprijscategorie voor u in de vervolgkeuzelijst.

    7. Klik in de sectie Webserviceplan op Nieuw maken en voeg er een naam voor in het tekstveld in.

    8. Selecteer in de sectie Prijscategorie voor webserviceabonnementen de prijscategorie van uw keuze. Er moet gratis een ontwikkeltestlaag met de naam DEVTEST Standard beschikbaar zijn.

    9. U moet ook bevestigen dat u de voorwaarden hebt begrepen die op deze Service zijn toegepast.

    10. Klik op Create.

      Schermopname van het dialoogvenster Azure Machine Learning Studio, waarin de gegevens worden weergegeven die de gebruiker heeft ingevoerd in de tekstvelden.

  4. Nadat u op Maken hebt geklikt, moet u wachten totdat de service is gemaakt. Dit kan een minuut duren.

  5. Er wordt een melding weergegeven in de portal zodra het service-exemplaar is gemaakt.

    Schermopname van het Microsoft Azure-venster met een ongelezen melding in het navigatiemenu.

  6. Klik op de melding om uw nieuwe service-exemplaar te verkennen.

    Schermopname van de melding Implementatie geslaagd, waarmee de gebruiker wordt geïnformeerd dat de implementatie van de werkruimte voor de resourcegroep is geslaagd.

  7. Klik op de knop Ga naar de resource in de melding om uw nieuwe service-exemplaar te verkennen.

  8. Klik op De pagina die wordt weergegeven, onder de sectie Aanvullende koppelingen , op Machine Learning Studio starten, waarmee uw browser naar de Machine Learning Studio-portal wordt geleid.

    Schermopname van het Microsoft Azure-venster met de gemarkeerde koppeling Machine Learning Studio starten in het inhoudsvenster.

  9. Gebruik de knop Aanmelden rechtsboven of in het midden om u aan te melden bij uw Machine Learning Studio (klassiek).

    Schermopname van het Machine Learning Studio-venster met de gemarkeerde knop Aanmelden.

Hoofdstuk 3: Machine Learning Studio (klassiek): Gegevensset instellen

Een van de manieren waarop Machine Learning-algoritmen werken, is door bestaande gegevens te analyseren en vervolgens toekomstige resultaten te voorspellen op basis van de bestaande gegevensset. Dit betekent over het algemeen dat hoe meer bestaande gegevens u hebt, hoe beter het algoritme toekomstige resultaten voorspelt.

Er wordt een voorbeeldtabel aan u verstrekt, voor deze cursus, ProductsTableCSV genoemd en kan hier worden gedownload.

Belangrijk

Het bovenstaande .zip bestand bevat zowel de ProductsTableCSV als de .unitypackage, die u nodig hebt in hoofdstuk 6. Dit pakket wordt ook geleverd in dat hoofdstuk, maar gescheiden van het CSV-bestand.

Deze voorbeeldgegevensset bevat een record van de best verkopende objecten op elk uur van elke dag van het jaar 2017.

Schermopname van het Microsoft Excel-venster met een voorbeeldgegevensset met best verkopende objecten op elk uur van elke dag in het jaar 2017.

Bijvoorbeeld, op dag 1 van 2017 om 13:00 uur, was het best verkopende item zout en peper.

Deze voorbeeldtabel bevat 9998 vermeldingen.

  1. Ga terug naar de Machine Learning Studio-portal (klassiek) en voeg deze tabel toe als een gegevensset voor uw ML. Klik hiervoor op de knop + Nieuw in de linkerbenedenhoek van het scherm.

    Schermopname van de klassieke Portal van Microsoft Azure Machine Learning Studio, waarin de gemarkeerde knop Nieuw in het menu wordt weergegeven.

  2. Een sectie wordt onderaan weergegeven en daarbinnen bevindt zich het navigatiedeelvenster aan de linkerkant. Klik op Gegevensset en vervolgens rechts daarvan, van lokaal bestand.

    Schermopname van het dialoogvenster Nieuw, waarin de gemarkeerde menu-items Gegevensset en Uit lokaal bestand worden weergegeven.

  3. Upload de nieuwe gegevensset door de volgende stappen uit te voeren:

    1. Het uploadvenster wordt weergegeven, waar u door de harde schijf kunt bladeren voor de nieuwe gegevensset.

      Schermopname van het dialoogvenster Een nieuwe gegevensset uploaden, met de knop Bladeren voor de gebruiker om de gegevens te zoeken en te selecteren die u wilt uploaden.

    2. Zodra dit is geselecteerd en weer in het uploadvenster, laat u het selectievakje uitgeschakeld.

    3. Voer in het onderstaande tekstveld ProductsTableCSV.csv in als de naam voor de gegevensset (maar moet automatisch worden toegevoegd).

    4. Selecteer algemeen CSV-bestand met een koptekst (.csv) met behulp van de vervolgkeuzelijst voor Type.

    5. Druk op het vinkje rechtsonder in het uploadvenster en uw gegevensset wordt geüpload.

Hoofdstuk 4: De Machine Learning Studio (klassiek): Het experiment

Voordat u uw machine learning-systeem kunt bouwen, moet u een experiment bouwen om uw theorie over uw gegevens te valideren. Met de resultaten weet u of u meer gegevens nodig hebt of als er geen correlatie is tussen de gegevens en een mogelijk resultaat.

Ga als volgende te werk om een experiment te maken:

  1. Klik nogmaals op de knop + Nieuw linksonder op de pagina en klik vervolgens op Experiment>Leeg experiment.

    Schermopname van het venster Microsoft Azure Machine Learning Studio, waarin het menu-item Experiment is geselecteerd.

  2. Er wordt een nieuwe pagina weergegeven met een leeg experiment:

  3. Vouw in het deelvenster aan de linkerkant Opgeslagen gegevenssets Mijn gegevenssets> uit en sleep de ProductsTableCSV naar het experimentcanvas.

    Schermopname van het venster Experiment, waarin de uitgevouwen map Mijn gegevenssets in het menu en Products Table C S V in het experimentcanvas wordt weergegeven.

  4. Vouw in het deelvenster aan de linkerkant het voorbeeld van gegevenstransformatie>en Split uit. Sleep vervolgens het item Split Data naar het experimentcanvas. Het item Split Data splitst de gegevensset in twee delen. Een deel dat u gaat gebruiken voor het trainen van het machine learning-algoritme. Het tweede deel wordt gebruikt om de nauwkeurigheid van het gegenereerde algoritme te evalueren.

    Schermopname van het venster Experiment, waarin de items Partition and Sample en Split Data in het menu worden weergegeven met Split Data toegepast op het canvas.

  5. Bewerk in het rechterdeelvenster (terwijl het item Split Data op het canvas is geselecteerd) het deel van de rijen in de eerste uitvoergegevensset in 0,7. Hiermee worden de gegevens gesplitst in twee delen, het eerste deel is 70% van de gegevens en het tweede deel is de resterende 30%. Als u ervoor wilt zorgen dat de gegevens willekeurig worden gesplitst, moet u ervoor zorgen dat het selectievakje Gerandomiseerde splitsing ingeschakeld blijft.

    Schermopname van het deelvenster Eigenschappen, waarin het ingevulde selectievakje Gerandomiseerde splitsing wordt weergegeven en het deel van het veld Rijen is ingesteld op 0 punt 7.

  6. Sleep een verbinding vanaf de basis van het item ProductsTableCSV op het canvas naar de bovenkant van het item Split Data. Hiermee worden de items verbonden en worden de uitvoer van de ProductsTableCSV-gegevensset (de gegevens) verzonden naar de invoer voor gesplitste gegevens.

    Schermopname van het experimentcanvas, waarin een verbinding wordt weergegeven tussen Products Table C S V dot c s v en Split Data.

  7. Vouw Machine Learning>Train uit in het deelvenster Experimenten aan de linkerkant. Sleep het item Model trainen naar het experimentcanvas. Uw canvas moet er hetzelfde uitzien als hieronder.

    Schermopname van experimentcanvas, waarin een verbinding wordt weergegeven tussen Products Table C S V dot c s v en Split Data, met hieronder Train Model.

  8. Sleep linksonder in het item Split Data een verbinding naar de rechterbovenhoek van het item Train Model. De eerste 70% splitsing van de gegevensset wordt door het trainmodel gebruikt om het algoritme te trainen.

    Schermopname van het experimentcanvas, waarin een verbinding wordt weergegeven tussen Products Table C S V dot c s v, Split Data en Train Model.

  9. Selecteer het item Model trainen op het canvas en klik in het deelvenster Eigenschappen (aan de rechterkant van het browservenster) op de knop Kolomkiezer starten.

  10. In het tekstvaktypeproduct en druk vervolgens op Enter, wordt het product ingesteld als een kolom om voorspellingen te trainen. Klik hierop in de rechterbenedenhoek om het selectiedialoogvenster te sluiten.

    Schermopname van het dialoogvenster Eén kolom selecteren, waarin de gemarkeerde productkolom in het menu Kolommen wordt weergegeven.

  11. U gaat een algoritme voor logistieke regressie met meerdere klassen trainen om het meest verkochte product te voorspellen op basis van het uur van de dag en de datum. Het valt echter buiten het bereik van dit document om de details van de verschillende algoritmen van de Azure Machine Learning-studio uit te leggen, maar u kunt meer informatie vinden in het cheatsheet voor machine learning-algoritmen

  12. Vouw in het deelvenster met experimentitems aan de linkerkant Machine Learning>Modelclassificatie> initialiseren uit en sleep het item Multiclass Logistic Regression naar het experimentcanvas.

  13. Verbind de uitvoer aan de onderkant van de Multiclass Logistic Regression met de invoer linksboven van het item Train Model .

    Schermopname van experimentcanvas, waarin Train Model is verbonden met de Multiclass Logistic Regression en Split Data.

  14. Vouw in de lijst met experimentitems in het deelvenster aan de linkerkant Machine Learning>Score uit en sleep het item Score Model naar het canvas.

  15. Verbind de uitvoer, onder aan het trainmodel, met de invoer linksboven van het scoremodel.

  16. Koppel de uitvoer rechtsonder van Split Data aan de rechterbovenhoek van het item Score Model .

    Schermopname van het experimentcanvas, waarin het scoremodel wordt weergegeven dat is verbonden met Train Model en Split Data.

  17. Vouw Machine Learning>Evaluate uit in de lijst met experimentitems in het deelvenster aan de linkerkant en sleep het item Evaluate Model naar het canvas.

  18. Verbind de uitvoer van het scoremodel met de invoer linksboven van het Evaluate Model.

    Schermopname van het experimentcanvas, waarin het Evaluate Model is verbonden met Score Model.

  19. U hebt uw eerste Machine Learning-experiment gebouwd. U kunt het experiment nu opslaan en uitvoeren. Klik in het menu onder aan de pagina op de knop Opslaan om uw experiment op te slaan en klik vervolgens op Uitvoeren om het experiment te starten.

    Schermopname van het menu ExperimentCanvas, waarin de gemarkeerde knoppen Opslaan en Uitvoeren worden weergegeven.

  20. U kunt de status van het experiment in de rechterbovenhoek van het canvas zien. Wacht even totdat het experiment is voltooid.

    Als u een grote (echte) gegevensset hebt, kan het uitvoeren van het experiment waarschijnlijk uren duren.

    Schermopname van het venster Experimentcanvas, waarin de status van het experiment in de rechterbovenhoek wordt weergegeven.

  21. Klik met de rechtermuisknop op het item Model evalueren op het canvas en plaats in het contextmenu de muisaanwijzer op Evaluatieresultaten en selecteer Vervolgens Visualiseren.

    Schermopname van het snelmenu van het item Model evalueren, waarin de gemarkeerde evaluatieresultaten en menu-items visualiseren worden weergegeven.

  22. De evaluatieresultaten worden weergegeven met de voorspelde resultaten versus de werkelijke resultaten. Dit maakt gebruik van de 30% van de oorspronkelijke gegevensset, die eerder is gesplitst, voor het evalueren van het model. U kunt zien dat de resultaten niet geweldig zijn, in het ideale plaats het hoogste getal in elke rij het gemarkeerde item in de kolommen zou zijn.

    Schermopname van de grafiek Resultaten, waarin de resultaten van het experiment in een grafiek met percentages worden weergegeven.

  23. Sluit de resultaten.

  24. Als u uw zojuist getrainde Machine Learning-model wilt gebruiken, moet u het beschikbaar maken als een webservice. Klik hiervoor op de menuopdracht Webservice instellen in het menu onder aan de pagina en klik op Voorspellende webservice.

    Schermopname van het menu Experiment, waarin het gemarkeerde menu-item Webservice instellen wordt weergegeven.

  25. Er wordt een nieuw tabblad gemaakt en het trainmodel samengevoegd om de nieuwe webservice te maken.

  26. Klik in het menu onder aan de pagina op Opslaan en klik vervolgens op Uitvoeren. De status wordt bijgewerkt in de rechterbovenhoek van het experimentcanvas.

    Schermopname van het menu Experiment, waarin de gemarkeerde menuknop Uitvoeren en het menu-item Uitvoeren worden weergegeven.

  27. Zodra deze is uitgevoerd, wordt onder aan de pagina een knop Webservice implementeren weergegeven. U bent klaar om de webservice te implementeren. Klik op Webservice implementeren (klassiek) in het menu onderaan de pagina.

    Schermopname van het menu Experiment, waarin het gemarkeerde menu-item Webservice klassiek implementeren wordt weergegeven via de menuknop Webservice implementeren.

    Uw browser vraagt mogelijk om een pop-upvenster toe te staan, dat u moet toestaan, maar mogelijk moet u opnieuw op De webservice implementeren drukken als de implementatiepagina niet wordt weergegeven.

  28. Zodra het experiment is gemaakt, wordt u omgeleid naar een dashboardpagina waar uw API-sleutel wordt weergegeven. Kopieer deze voorlopig naar een kladblok. U hebt deze binnenkort nodig in uw code. Nadat u uw API-sleutel hebt genoteerd, klikt u op de knop AANVRAAG/ANTWOORD in de sectie Standaardeindpunt onder de sleutel.

    Schermopname van het microsoft Azure Machine Learning Studio-venster, waarin de A P I-sleutel en de gemarkeerde Slash Response-koppeling voor aanvragen worden weergegeven.

    Notitie

    Als u op Deze pagina op Testen klikt, kunt u invoergegevens invoeren en de uitvoer bekijken. Voer de dag en het uur in. Laat de productvermelding leeg. Klik vervolgens op de knop Bevestigen . In de uitvoer onder aan de pagina wordt de JSON weergegeven die de kans vertegenwoordigt dat elk product de keuze is.

  29. Er wordt een nieuwe webpagina geopend, met de instructies en enkele voorbeelden van de aanvraagstructuur die vereist is voor Machine Learning Studio (klassiek). Kopieer de aanvraag-URI die op deze pagina wordt weergegeven, naar uw kladblok.

    Schermopname van de pagina A P I-documentatie voor antwoord op aanvraag, waarin de gemarkeerde aanvraag-URL wordt weergegeven.

U hebt nu een machine learning-systeem gebouwd dat het meest waarschijnlijke product biedt dat moet worden verkocht op basis van historische aankoopgegevens, gecorreleerd met het tijdstip van de dag en dag van het jaar.

Als u de webservice wilt aanroepen, hebt u de URL voor het service-eindpunt en een API-sleutel voor de service nodig. Klik op het tabblad Verbruik in het bovenste menu.

Op de pagina Verbruiksgegevens worden de gegevens weergegeven die u nodig hebt om de webservice aan te roepen vanuit uw code. Maak een kopie van de primaire sleutel en de aanvraag-antwoord-URL . U hebt deze nodig in het volgende hoofdstuk.

Hoofdstuk 5 - Het Unity-project instellen

Stel uw Mixed Reality Immersive Headset in en test deze.

Notitie

U hebt geen Motion Controllers nodig voor deze cursus. Als u ondersteuning nodig hebt voor het instellen van de Immersive Headset, klikt u hier.

  1. Open Unity en maak een nieuw Unity-project met de naam MR_MachineLearning. Zorg ervoor dat het projecttype is ingesteld op 3D.

  2. Als Unity is geopend, is het de moeite waard om te controleren of de standaardscripteditor is ingesteld op Visual Studio. Ga naar Voorkeuren bewerken>en navigeer vervolgens vanuit het nieuwe venster naar Externe hulpprogramma's. Wijzig de externe scripteditor in Visual Studio 2017. Sluit het venster Voorkeuren .

  3. Ga vervolgens naar >Instellingen voor bestandsbuild en schakel het platform over naar Universeel Windows-platform door op de knop Platform wisselen te klikken.

  4. Zorg er ook voor dat:

    1. Het doelapparaat is ingesteld op Elk apparaat.

      Voor de Microsoft HoloLens stelt u Doelapparaat in op HoloLens.

    2. Buildtype is ingesteld op D3D.

    3. SDK is ingesteld op Laatst geïnstalleerd.

    4. Visual Studio-versie is ingesteld op Meest recent geïnstalleerd.

    5. Build en Uitvoeren is ingesteld op Lokale computer.

    6. U hoeft zich nu geen zorgen te maken over het instellen van Scènes , omdat deze later worden aangeboden.

    7. De overige instellingen moeten voorlopig als standaardwaarde blijven staan.

      Schermopname van het dialoogvenster Build Settings, waarin het menu-item Universeel Windows-platform is geselecteerd.

  5. Klik in het venster Build-instellingen op de knop Spelerinstellingen . Hiermee opent u het gerelateerde deelvenster in de ruimte waar de Inspector zich bevindt.

  6. In dit deelvenster moeten enkele instellingen worden geverifieerd:

    1. Op het tabblad Overige instellingen :

      1. Runtime-versie van scripting moet experimenteel zijn (equivalent van.NET 4.6)

      2. Back-end voor scripts moet .NET zijn

      3. API-compatibiliteitsniveau moet .NET 4.6 zijn

        Schermopname van het tabblad Overige instellingen, waarin de instellingen worden weergegeven die zijn ingeschakeld volgens de beschreven stappen.

    2. Schakel op het tabblad Publicatie-instellingen onder Mogelijkheden het volgende in:

      • InternetClient

        Schermopname van het tabblad Publicatie-instellingen, waarin de internetclientmogelijkheid wordt ingeschakeld onder Mogelijkheden.

    3. Verderop in het deelvenster, in XR-instellingen (hieronder Publicatie-instellingen), tikt u op Virtual Reality Ondersteund, controleert u of de Windows Mixed Reality SDK is toegevoegd

      Schermopname van het tabblad X R-instellingen, waarin windows Mixed Reality S D K onder Virtual Reality S D K is ingeschakeld.

  7. Terug in Build Settings Unity C# Projects wordt niet meer grijs weergegeven. Schakel het selectievakje naast dit selectievakje in.

  8. Sluit het venster Build Settings.

  9. Sla uw project op (FILE > SAVE PROJECT).

Hoofdstuk 6: het MLProducts Unity-pakket importeren

Voor deze cursus moet u een Unity Asset Package met de naam Azure-MR-307.unitypackage downloaden. Dit pakket wordt geleverd met een scène, met alle objecten in die vooraf samengestelde, zodat u zich kunt concentreren op het allemaal werken. Het ShelfKeeper-script wordt opgegeven, maar bevat alleen de openbare variabelen voor het instellen van scènes. U moet alle andere secties uitvoeren.

Dit pakket importeren:

  1. Klik met het Unity-dashboard voor u op Assets in het menu boven aan het scherm en klik vervolgens op Import Package, Custom Package.

    Schermopname van het Unity-dashboard met de gemarkeerde menu-items Import Package en Custom Package.

  2. Gebruik de bestandskiezer om het Pakket Azure-MR-307.unitypackage te selecteren en klik op Openen.

  3. Er wordt een lijst met onderdelen voor deze asset weergegeven. Bevestig het importeren door op Importeren te klikken.

    Schermopname van het dialoogvenster Unity Package importeren, waarin het Azure Machine Learning-pakket wordt geïmporteerd.

  4. Zodra het importeren is voltooid, ziet u dat sommige nieuwe mappen zijn weergegeven in het Unity-projectvenster. Dit zijn de 3D-modellen en de respectieve materialen die deel uitmaken van de vooraf gemaakte scène waaraan u gaat werken. In deze cursus schrijft u het merendeel van de code.

    Schermopname van het Unity-projectvenster, waarin de zojuist geïmporteerde mappen in de map Assets worden weergegeven.

  5. Klik in de map Projectvenster op de map Scènes en dubbelklik op de scène in (MR_MachineLearningScene genoemd). De scène wordt geopend (zie de onderstaande afbeelding). Als de rode diamanten ontbreken, klikt u op de knop Gizmos , rechtsboven in het Game Panel.

    Schermopname van het Unity Scene-venster, waarin het gemarkeerde menu-item Gizmos in de bovenste navigatie wordt weergegeven.

Hoofdstuk 7 - De DLL's controleren in Unity

Om gebruik te maken van JSON-bibliotheken (gebruikt voor serialiseren en deserialiseren), is er een Newtonsoft DLL geïmplementeerd met het pakket dat u hebt ingevoerd. De bibliotheek moet de juiste configuratie hebben, maar het is de moeite waard om te controleren (met name als u problemen ondervindt met code die niet werkt).

Hiervoor doet u het volgende:

  • Klik met de linkermuisknop op het Newtonsoft-bestand in de map Plugins en kijk naar het deelvenster Inspector. Zorg ervoor dat Elk platform is aangevinkt. Ga naar het tabblad UWP en zorg ervoor dat het proces niet is aangevinkt.

    De DLL's importeren in Unity

Hoofdstuk 8 - De Klasse ShelfKeeper maken

De ShelfKeeper-klasse fungeert als host voor methoden waarmee de gebruikersinterface en producten in de scène worden beheerd.

Als onderdeel van het geïmporteerde pakket krijgt u deze klasse, maar deze is onvolledig. Het is nu tijd om die klasse te voltooien:

  1. Dubbelklik op het ShelfKeeper-script in de map Scripts om het te openen met Visual Studio 2017.

  2. Vervang alle code die in het script bestaat door de volgende code, waarmee de tijd en datum worden ingesteld en een methode wordt gebruikt om een product weer te geven.

    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. Sla uw wijzigingen op in Visual Studio voordat u terugkeert naar Unity.

  4. Controleer in de Unity Editor of de Klasse ShelfKeeper er als volgt uitziet:

    Schermopname van de klasse Shelf Keeper, die laat zien dat de referentiedoelen zijn ingesteld op Date Text Mesh en Time Text Mesh.

    Belangrijk

    Als uw script niet beschikt over de referentiedoelen (d.w.w. Datum (Text Mesh)), sleept u de bijbehorende objecten van het deelvenster Hiërarchie naar de doelvelden. Zie hieronder voor uitleg, indien nodig:

    1. Open de spawnpuntmatrix in het script van het ShelfKeeper-onderdeel door er met de linkermuisknop op te klikken. Er wordt een subsectie weergegeven met de naam Grootte, die de grootte van de matrix aangeeft. Typ 3 in het tekstvak naast Grootte en druk op Enter, waarna er drie sleuven worden gemaakt.

    2. Vouw in de hiërarchie het object Tijdweergave uit (door met de linkermuisknop op de pijl ernaast te klikken). Klik vervolgens op de hoofdcamera in de hiërarchie, zodat de inspecteur de informatie weergeeft.

    3. Selecteer de hoofdcamera in het deelvenster Hiërarchie. Sleep de datum - en tijdobjecten van het deelvenster Hiërarchie naar de datumtekst - en tijdtekstsleuven in de Inspector van de hoofdcamera in het onderdeel ShelfKeeper .

    4. Sleep de spawnpunten van het deelvenster Hiërarchie (onder het object Plank) naar de drie elementverwijzingsdoelen onder de spawnpuntmatrix, zoals wordt weergegeven in de afbeelding.

      Schermopname van het deelvenster Hierarchy, waarin wordt weergegeven dat de menu-items Date, Time en de drie spawn point-items zich in de klasse Shelf Keeper bevinden.

Hoofdstuk 9 : De klasse ProductPrediction maken

De volgende klasse die u gaat maken, is de klasse ProductPrediction .

Deze klasse is verantwoordelijk voor:

  • Query's uitvoeren op het Machine Learning Service-exemplaar , waarbij de huidige datum en tijd worden opgegeven.

  • Het JSON-antwoord deserialiseren in bruikbare gegevens.

  • Het interpreteren van de gegevens, het ophalen van de drie aanbevolen producten.

  • De ShelfKeeper-klassemethoden aanroepen om de gegevens in de scène weer te geven.

Ga als volgt te werk om deze klasse te maken:

  1. Ga naar de map Scripts in het deelvenster Project.

  2. Klik met de rechtermuisknop in de map, C#-script maken>. Roep het script ProductPrediction aan.

  3. Dubbelklik op het nieuwe ProductPrediction-script om het te openen met Visual Studio 2017.

  4. Als het dialoogvenster Bestandswijziging gedetecteerd verschijnt, klikt u op *Oplossing opnieuw laden.

  5. Voeg de volgende naamruimten toe aan het begin van de klasse 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. Voeg in de klasse ProductPrediction de volgende twee objecten in die bestaan uit een aantal geneste klassen. Deze klassen worden gebruikt om de JSON voor de Machine Learning Service te serialiseren en deserialiseren.

        /// <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. Voeg vervolgens de volgende variabelen toe boven de vorige code (zodat de JSON-gerelateerde code zich onder aan het script bevindt, onder alle andere code en helemaal niet):

        /// <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;
    

    Belangrijk

    Zorg ervoor dat u de primaire sleutel en het aanvraagantwoordeindpunt invoegt, vanuit de Machine Learning-portal, in de variabelen hier. In de onderstaande afbeeldingen ziet u waar u de sleutel en het eindpunt vandaan zou hebben gehaald.

    Schermopname van Microsoft Azure Machine Learning Studio, waarin de koppeling Request slash Response wordt weergegeven onder de Help-pagina voor P I.

    Schermopname van de pagina A P I-documentatie voor antwoord op aanvraag, waarin de gemarkeerde POST-aanvraag-URL wordt weergegeven.

  8. Voeg deze code in de Methode Start() in . De methode Start() wordt aangeroepen wanneer de klasse wordt geïnitialiseerd:

        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. Hier volgt de methode waarmee de datum en tijd van Windows worden verzameld en geconverteerd naar een indeling die ons Machine Learning-experiment kan gebruiken om te vergelijken met de gegevens die in de tabel zijn opgeslagen.

        /// <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. U kunt de methode Update() verwijderen omdat deze klasse deze niet gebruikt.

  11. Voeg de volgende methode toe waarmee de huidige datum en tijd wordt gecommuniceerd naar het Machine Learning-eindpunt en een antwoord ontvangt in JSON-indeling.

        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. Voeg de volgende methode toe, die verantwoordelijk is voor het deserialiseren van het JSON-antwoord en het doorgeven van het resultaat van de deserialisatie aan de ShelfKeeper-klasse . Dit resultaat zijn de namen van de drie items die zijn voorspeld om het meest te verkopen op de huidige datum en tijd. Voeg de onderstaande code in de klasse ProductPrediction in, onder de vorige methode.

        /// <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. Sla Visual Studio op en ga terug naar Unity.

  14. Sleep het klassescript ProductPrediction uit de map Script naar het object Main Camera .

  15. Sla uw scène en project File>Save Scene/File Save Project>op.

Hoofdstuk 10 - De UWP-oplossing bouwen

Het is nu tijd om uw project te bouwen als een UWP-oplossing, zodat het kan worden uitgevoerd als een zelfstandige toepassing.

Ga als volgende te werk om te bouwen:

  1. Sla de huidige scène op door te klikken op Scènes voor het>opslaan van bestanden.

  2. Ga naar Instellingen voor het>bouwen van bestanden

  3. Schakel het selectievakje Unity C# Projects in (dit is belangrijk omdat u de klassen kunt bewerken nadat de build is voltooid).

  4. Klik op Open Scènes toevoegen.

  5. Klik op Opbouwen.

    Schermopname van het dialoogvenster Build-instellingen, waarin het menu-item Universeel Windows-platform is gemarkeerd.

  6. U wordt gevraagd om de map te selecteren waarin u de oplossing wilt bouwen.

  7. Maak een BUILDS-map en maak in die map een andere map met de juiste naam van uw keuze.

  8. Klik op de nieuwe map en klik vervolgens op Map selecteren om de build op die locatie te starten.

    Schermopname van het venster Bestandenverkenner, waarin de gemarkeerde map Builds wordt weergegeven.

    Schermopname van het venster Bestandenverkenner, waarin de inhoud van de map Builds en de gemarkeerde knop Map selecteren wordt weergegeven.

  9. Zodra Unity klaar is met bouwen (het kan enige tijd duren), wordt er een Bestandenverkenner venster geopend op de locatie van uw build (controleer de taakbalk, omdat deze mogelijk niet altijd boven uw vensters wordt weergegeven, maar u ontvangt een melding over de toevoeging van een nieuw venster).

Hoofdstuk 11 - Uw toepassing implementeren

Uw toepassing implementeren:

  1. Navigeer naar uw nieuwe Unity-build (de app-map ) en open het oplossingsbestand met Visual Studio.

  2. Als Visual Studio is geopend, moet u NuGet-pakketten herstellen. Dit kan worden gedaan door met de rechtermuisknop op uw MachineLearningLab_Build-oplossing te klikken, vanuit Solution Explorer (te vinden rechts van Visual Studio) en vervolgens te klikken op NuGet-pakketten herstellen:

    Schermopname van het Visual Studio-venster met het gemarkeerde menu-item Nu Get Packages herstellen.

  3. Selecteer foutopsporing in de oplossingsconfiguratie.

  4. Selecteer x86 in het Solution Platform, Local Machine.

    Voor de Microsoft HoloLens is het mogelijk gemakkelijker om dit in te stellen op Externe computer, zodat u niet aan uw computer bent gekoppeld. U moet echter ook het volgende doen:

    • Ken het IP-adres van uw HoloLens, die u kunt vinden in de geavanceerde opties voor het instellingennetwerk > en internet-Wi-Fi > >. De IPv4 is het adres dat u moet gebruiken.
    • Zorg ervoor dat de ontwikkelaarsmodus is ingeschakeld. Deze vindt u in Instellingen > bijwerken en beveiliging > voor ontwikkelaars.

    Schermopname van het microsoft Visual Studio-menu, waarin wordt weergegeven dat Lokale machine is geselecteerd in Solution Platform.

  5. Ga naar het menu Build en klik op Oplossing implementeren om de toepassing sideloaden op uw pc.

  6. Uw app moet nu worden weergegeven in de lijst met geïnstalleerde apps die klaar zijn om te worden gestart.

Wanneer u de Mixed Reality-toepassing uitvoert, ziet u de bank die is ingesteld in uw Unity-scène. Vanaf initialisatie worden de gegevens die u in Azure hebt ingesteld, opgehaald. De gegevens worden gedeserialiseerd binnen uw toepassing en de drie belangrijkste resultaten voor uw huidige datum en tijd worden visueel verstrekt, als drie modellen op de bank.

Uw voltooide Machine Learning-toepassing

Gefeliciteerd, u hebt een mixed reality-app gemaakt die gebruikmaakt van De Azure Machine Learning om gegevensvoorspellingen te maken en weer te geven op uw scène.

Schermopname van het Microsoft Visual Studio-venster met een plank met drie objecten en een kaart met de tekst 23 februari.

Oefening

Oefening 1

Experimenteer met de sorteervolgorde van uw toepassing en laat de drie onderste voorspellingen op de plank staan, omdat deze gegevens mogelijk ook nuttig zouden zijn.

Oefening 2

Met Behulp van Azure Tables wordt een nieuwe tabel gevuld met weergegevens en wordt een nieuw experiment gemaakt met behulp van de gegevens.