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.
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:
- 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.
- Maak een Unity-project dat voorspellingsgegevens van de ML-service kan ontvangen en interpreteren.
- 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:
- Een ontwikkel-pc, compatibel met Windows Mixed Reality voor insluitende headsetontwikkeling (VR)
- Windows 10 Fall Creators Update (of hoger) waarvoor de ontwikkelaarsmodus is ingeschakeld
- De nieuwste Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Een Windows Mixed Reality immersive (VR)-headset of Microsoft HoloLens waarvoor de ontwikkelaarsmodus is ingeschakeld
- Internettoegang voor het instellen van Azure en het ophalen van ML-gegevens
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.
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.
Zodra u bent aangemeld, klikt u in het linkermenu op Opslagaccounts .
Notitie
Het woord Nieuw is mogelijk vervangen door Een resource maken in nieuwere portals.
Klik op het tabblad Opslagaccounts op Toevoegen.
In het deelvenster Opslagaccount maken:
Voeg een naam voor uw account in, houd er rekening mee dat dit veld alleen cijfers en kleine letters accepteert.
Selecteer Resource Manager voor het implementatiemodel.
Selecteer Opslag (algemeen gebruik v1) als soort account.
Selecteer bij Prestaties de optie Standaard.
Voor replicatie selecteert u geografisch redundante opslag met leestoegang (RA-GRS).
Laat Beveiligde overdracht vereist als Uitgeschakeld.
Selecteer een abonnement.
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.
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 ook bevestigen dat u de voorwaarden hebt begrepen die op deze Service zijn toegepast.
Nadat u op Maken hebt geklikt, moet u wachten totdat de service is gemaakt. Dit kan een minuut duren.
Er wordt een melding weergegeven in de portal zodra het service-exemplaar is gemaakt.
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.
Klik in Azure Portal op Nieuw in de linkerbovenhoek en zoek naar Machine Learning Studio Workspace en druk op Enter.
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.
Zodra u op Maken hebt geklikt, wordt er een deelvenster weergegeven waarin u enkele details over uw nieuwe Machine Learning Studio-service moet opgeven:
Voeg de gewenste werkruimtenaam in voor dit service-exemplaar.
Selecteer een abonnement.
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.
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.
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.
Selecteer de juiste werkruimteprijscategorie voor u in de vervolgkeuzelijst.
Klik in de sectie Webserviceplan op Nieuw maken en voeg er een naam voor in het tekstveld in.
Selecteer in de sectie Prijscategorie voor webserviceabonnementen de prijscategorie van uw keuze. Er moet gratis een ontwikkeltestlaag met de naam DEVTEST Standard beschikbaar zijn.
U moet ook bevestigen dat u de voorwaarden hebt begrepen die op deze Service zijn toegepast.
Klik op Create.
Nadat u op Maken hebt geklikt, moet u wachten totdat de service is gemaakt. Dit kan een minuut duren.
Er wordt een melding weergegeven in de portal zodra het service-exemplaar is gemaakt.
Klik op de melding om uw nieuwe service-exemplaar te verkennen.
Klik op de knop Ga naar de resource in de melding om uw nieuwe service-exemplaar te verkennen.
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.
Gebruik de knop Aanmelden rechtsboven of in het midden om u aan te melden bij uw Machine Learning Studio (klassiek).
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.
Bijvoorbeeld, op dag 1 van 2017 om 13:00 uur, was het best verkopende item zout en peper.
Deze voorbeeldtabel bevat 9998 vermeldingen.
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.
Een sectie wordt onderaan weergegeven en daarbinnen bevindt zich het navigatiedeelvenster aan de linkerkant. Klik op Gegevensset en vervolgens rechts daarvan, van lokaal bestand.
Upload de nieuwe gegevensset door de volgende stappen uit te voeren:
Het uploadvenster wordt weergegeven, waar u door de harde schijf kunt bladeren voor de nieuwe gegevensset.
Zodra dit is geselecteerd en weer in het uploadvenster, laat u het selectievakje uitgeschakeld.
Voer in het onderstaande tekstveld ProductsTableCSV.csv in als de naam voor de gegevensset (maar moet automatisch worden toegevoegd).
Selecteer algemeen CSV-bestand met een koptekst (.csv) met behulp van de vervolgkeuzelijst voor Type.
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:
Klik nogmaals op de knop + Nieuw linksonder op de pagina en klik vervolgens op Experiment>Leeg experiment.
Er wordt een nieuwe pagina weergegeven met een leeg experiment:
Vouw in het deelvenster aan de linkerkant Opgeslagen gegevenssets Mijn gegevenssets> uit en sleep de ProductsTableCSV naar het experimentcanvas.
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.
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.
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.
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.
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.
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.
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.
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
Vouw in het deelvenster met experimentitems aan de linkerkant Machine Learning>Modelclassificatie> initialiseren uit en sleep het item Multiclass Logistic Regression naar het experimentcanvas.
Verbind de uitvoer aan de onderkant van de Multiclass Logistic Regression met de invoer linksboven van het item Train Model .
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.
Verbind de uitvoer, onder aan het trainmodel, met de invoer linksboven van het scoremodel.
Koppel de uitvoer rechtsonder van Split Data aan de rechterbovenhoek van het item Score Model .
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.
Verbind de uitvoer van het scoremodel met de invoer linksboven van het Evaluate Model.
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.
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.
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.
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.
Sluit de resultaten.
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.
Er wordt een nieuw tabblad gemaakt en het trainmodel samengevoegd om de nieuwe webservice te maken.
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.
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.
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.
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.
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.
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.
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.
Open Unity en maak een nieuw Unity-project met de naam MR_MachineLearning. Zorg ervoor dat het projecttype is ingesteld op 3D.
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 .
Ga vervolgens naar >Instellingen voor bestandsbuild en schakel het platform over naar Universeel Windows-platform door op de knop Platform wisselen te klikken.
Zorg er ook voor dat:
Het doelapparaat is ingesteld op Elk apparaat.
Voor de Microsoft HoloLens stelt u Doelapparaat in op HoloLens.
Buildtype is ingesteld op D3D.
SDK is ingesteld op Laatst geïnstalleerd.
Visual Studio-versie is ingesteld op Meest recent geïnstalleerd.
Build en Uitvoeren is ingesteld op Lokale computer.
U hoeft zich nu geen zorgen te maken over het instellen van Scènes , omdat deze later worden aangeboden.
De overige instellingen moeten voorlopig als standaardwaarde blijven staan.
Klik in het venster Build-instellingen op de knop Spelerinstellingen . Hiermee opent u het gerelateerde deelvenster in de ruimte waar de Inspector zich bevindt.
In dit deelvenster moeten enkele instellingen worden geverifieerd:
Op het tabblad Overige instellingen :
Runtime-versie van scripting moet experimenteel zijn (equivalent van.NET 4.6)
Back-end voor scripts moet .NET zijn
API-compatibiliteitsniveau moet .NET 4.6 zijn
Schakel op het tabblad Publicatie-instellingen onder Mogelijkheden het volgende in:
InternetClient
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
Terug in Build Settings Unity C# Projects wordt niet meer grijs weergegeven. Schakel het selectievakje naast dit selectievakje in.
Sluit het venster Build Settings.
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:
Klik met het Unity-dashboard voor u op Assets in het menu boven aan het scherm en klik vervolgens op Import Package, Custom Package.
Gebruik de bestandskiezer om het Pakket Azure-MR-307.unitypackage te selecteren en klik op Openen.
Er wordt een lijst met onderdelen voor deze asset weergegeven. Bevestig het importeren door op Importeren te klikken.
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.
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.
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.
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:
Dubbelklik op het ShelfKeeper-script in de map Scripts om het te openen met Visual Studio 2017.
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); } }
Sla uw wijzigingen op in Visual Studio voordat u terugkeert naar Unity.
Controleer in de Unity Editor of de Klasse ShelfKeeper er als volgt uitziet:
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:
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.
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.
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 .
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.
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:
Ga naar de map Scripts in het deelvenster Project.
Klik met de rechtermuisknop in de map, C#-script maken>. Roep het script ProductPrediction aan.
Dubbelklik op het nieuwe ProductPrediction-script om het te openen met Visual Studio 2017.
Als het dialoogvenster Bestandswijziging gedetecteerd verschijnt, klikt u op *Oplossing opnieuw laden.
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;
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; } }
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.
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)); }
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(); }
U kunt de methode Update() verwijderen omdat deze klasse deze niet gebruikt.
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); } }
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(); }
Sla Visual Studio op en ga terug naar Unity.
Sleep het klassescript ProductPrediction uit de map Script naar het object Main Camera .
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:
Sla de huidige scène op door te klikken op Scènes voor het>opslaan van bestanden.
Ga naar Instellingen voor het>bouwen van bestanden
Schakel het selectievakje Unity C# Projects in (dit is belangrijk omdat u de klassen kunt bewerken nadat de build is voltooid).
Klik op Open Scènes toevoegen.
Klik op Opbouwen.
U wordt gevraagd om de map te selecteren waarin u de oplossing wilt bouwen.
Maak een BUILDS-map en maak in die map een andere map met de juiste naam van uw keuze.
Klik op de nieuwe map en klik vervolgens op Map selecteren om de build op die locatie te starten.
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:
Navigeer naar uw nieuwe Unity-build (de app-map ) en open het oplossingsbestand met Visual Studio.
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:
Selecteer foutopsporing in de oplossingsconfiguratie.
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.
Ga naar het menu Build en klik op Oplossing implementeren om de toepassing sideloaden op uw pc.
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.
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.