HoloLens (1. Generation) und Azure 307: Machine Learning
Hinweis
Die Tutorials der Mixed Reality Academy wurden im Hinblick auf HoloLens (1. Gen.) und immersive Mixed Reality-Headsets entworfen. Daher halten wir es für wichtig, diese Tutorials für Entwickler verfügbar zu halten, die noch nach Anleitung beim Entwickeln für diese Geräte suchen. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden. Sie werden gewartet, um weiterhin auf den unterstützten Geräten zu funktionieren. Es wird eine neue Reihe von Tutorials geben, die in Zukunft veröffentlicht werden, die zeigen, wie für HoloLens 2 entwickelt werden kann. Dieser Hinweis wird mit einem Link zu diesen Tutorials aktualisiert, wenn sie veröffentlicht werden.
In diesem Kurs erfahren Sie, wie Sie machine Learning (ML)-Funktionen zu einer Mixed Reality-Anwendung mit Azure Machine Learning Studio (klassisch) hinzufügen.
Azure Machine Learning Studio (klassisch) ist ein Microsoft-Dienst, der Entwicklern eine große Anzahl von Machine Learning-Algorithmen zur Verfügung stellt, die bei der Eingabe, Ausgabe, Vorbereitung und Visualisierung von Daten helfen können. Aus diesen Komponenten ist es dann möglich, ein Predictive Analytics-Experiment zu entwickeln, es zu durchlaufen und es zum Trainieren Ihres Modells zu verwenden. Nach dem Training können Sie Ihr Modell in der Azure-Cloud betriebsbereit machen, sodass es dann neue Daten erfassen kann. Weitere Informationen finden Sie auf der Seite Azure Machine Learning Studio (klassisch).
Nach Abschluss dieses Kurses verfügen Sie über eine immersive Mixed Reality-Headset-Anwendung und haben gelernt, wie Sie Folgendes tun:
- Stellen Sie eine Tabelle mit Verkaufsdaten für das Azure Machine Learning Studio-Portal (klassisch) bereit, und entwerfen Sie einen Algorithmus, um zukünftige Verkäufe beliebter Elemente vorherzusagen.
- Erstellen Sie ein Unity-Projekt, das Vorhersagedaten vom ML-Dienst empfangen und interpretieren kann.
- Zeigen Sie die Prädicationsdaten visuell innerhalb des Unity-Projekts an, indem Sie die beliebtesten Verkaufselemente in einem Regal bereitstellen.
In Ihrer Anwendung liegt es bei Ihnen, wie Sie die Ergebnisse in Ihr Design integrieren. In diesem Kurs erfahren Sie, wie Sie einen Azure-Dienst in Ihr Unity-Projekt integrieren. Es ist Ihre Aufgabe, das Wissen, das Sie aus diesem Kurs gewinnen, zu nutzen, um Ihre Mixed Reality-Anwendung zu verbessern.
Dieser Kurs ist ein eigenständiges Tutorial, das keine anderen Mixed Reality Labs direkt umfasst.
Geräteunterstützung
Kurs | HoloLens | Immersive Headsets |
---|---|---|
MR und Azure 307: Maschinelles Lernen | ✔️ | ✔️ |
Hinweis
Während sich dieser Kurs hauptsächlich auf Windows Mixed Reality immersiven Headsets (VR) konzentriert, können Sie das, was Sie in diesem Kurs lernen, auch auf Microsoft HoloLens anwenden. Während Sie den Kurs befolgen, werden Ihnen Notizen zu allen Änderungen angezeigt, die Sie möglicherweise zur Unterstützung von HoloLens anwenden müssen. Wenn Sie HoloLens verwenden, können Sie während der Sprachaufnahme ein gewisses Echo bemerken.
Voraussetzungen
Hinweis
Dieses Tutorial richtet sich an Entwickler, die über grundlegende Erfahrungen mit Unity und C# verfügen. Bitte beachten Sie auch, dass die Voraussetzungen und schriftlichen Anweisungen in diesem Dokument das darstellen, was zum Zeitpunkt des Schreibens (Mai 2018) getestet und überprüft wurde. Sie können die neueste Software verwenden, wie im Artikel Installieren der Tools aufgeführt, aber es sollte nicht davon ausgegangen werden, dass die Informationen in diesem Kurs perfekt dem entsprechen, was Sie in neuerer Software finden, als die unten aufgeführten.
Wir empfehlen die folgende Hard- und Software für diesen Kurs:
- Ein Entwicklungs-PC, kompatibel mit Windows Mixed Reality für die Entwicklung von immersiven (VR)-Headsets
- Windows 10 Fall Creators Update (oder höher) mit aktiviertem Entwicklermodus
- Das neueste Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Ein Windows Mixed Reality immersives Headset (VR) oder Microsoft HoloLens mit aktiviertem Entwicklermodus
- Internetzugriff für Azure-Setup und ML-Datenabruf
Vorbereitung
Um Probleme beim Erstellen dieses Projekts zu vermeiden, wird dringend empfohlen, das in diesem Tutorial erwähnte Projekt in einem Stamm- oder Fast-Root-Ordner zu erstellen (lange Ordnerpfade können zur Buildzeit Zu Problemen führen).
Kapitel 1: Einrichtung eines Azure Storage-Kontos
Um die Azure Translator-API verwenden zu können, müssen Sie eine instance des Diensts konfigurieren, die für Ihre Anwendung verfügbar gemacht werden soll.
Melden Sie sich beim Azure-Portal an.
Hinweis
Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie ein Azure-Konto erstellen. Wenn Sie dieses Tutorial in einer Unterrichts- oder Labsituation befolgen, bitten Sie Ihren Kursleiter oder einen der Verantwortlichen um Hilfe beim Einrichten Ihres neuen Kontos.
Nachdem Sie angemeldet sind, klicken Sie im linken Menü auf Speicherkonten .
Hinweis
Das Wort Neu wurde in neueren Portalen möglicherweise durch Ressource erstellen ersetzt.
Klicken Sie auf der Registerkarte Speicherkonten auf Hinzufügen.
Im Bereich Speicherkonto erstellen :
Fügen Sie einen Namen für Ihr Konto ein, und beachten Sie, dass dieses Feld nur Zahlen und Kleinbuchstaben akzeptiert.
Wählen Sie unter Bereitstellungsmodelldie Option Ressourcen-Manager aus.
Wählen Sie unter Kontoartdie Option Speicher (universell v1) aus.
Wählen Sie für Leistung die Option Standard aus.
Wählen Sie unter Replikationdie Option Read-Access-Geo-Redundant Storage (RA-GRS) aus.
Lassen Sie sichere Übertragung erforderlich als Deaktiviert.
Wählen Sie ein Abonnementaus.
Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit zum Überwachen, Steuern des Zugriffs, Bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. B. diesen Labs) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu halten.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, lesen Sie den Artikel Ressourcengruppe.
Bestimmen Sie den Speicherort für Ihre Ressourcengruppe (wenn Sie eine neue Ressourcengruppe erstellen). Der Speicherort befindet sich idealerweise in der Region, in der die Anwendung ausgeführt wird. Einige Azure-Ressourcen sind nur in bestimmten Regionen verfügbar.
Sie müssen auch bestätigen, dass Sie die für diesen Dienst geltenden Geschäftsbedingungen verstanden haben.
Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wird. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, sobald der Dienst instance erstellt wurde.
Kapitel 2: Azure Machine Learning Studio (klassisch)
Um Azure Machine Learning verwenden zu können, müssen Sie eine instance des Machine Learning-Diensts konfigurieren, um für Ihre Anwendung verfügbar zu machen.
Klicken Sie im Azure-Portal oben links auf Neu , und suchen Sie nach Machine Learning Studio-Arbeitsbereich, und drücken Sie die EINGABETASTE.
Die neue Seite enthält eine Beschreibung des Machine Learning Studio-Arbeitsbereichsdiensts . Klicken Sie unten links in dieser Eingabeaufforderung auf die Schaltfläche Erstellen , um eine Zuordnung zu diesem Dienst zu erstellen.
Nachdem Sie auf Erstellen geklickt haben, wird ein Bereich angezeigt, in dem Sie einige Details zu Ihrem neuen Machine Learning Studio-Dienst angeben müssen:
Fügen Sie den gewünschten Arbeitsbereichsnamen für diesen Dienst instance ein.
Wählen Sie ein Abonnementaus.
Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit zum Überwachen, Steuern des Zugriffs, Bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. B. diesen Labs) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu halten.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, lesen Sie den Artikel Ressourcengruppe.
Bestimmen Sie den Speicherort für Ihre Ressourcengruppe (wenn Sie eine neue Ressourcengruppe erstellen). Der Speicherort befindet sich idealerweise in der Region, in der die Anwendung ausgeführt wird. Einige Azure-Ressourcen sind nur in bestimmten Regionen verfügbar. Sie sollten dieselbe Ressourcengruppe verwenden, die Sie zum Erstellen von Azure Storage im vorherigen Kapitel verwendet haben.
Klicken Sie im Abschnitt Speicherkonto auf Vorhandene verwenden, klicken Sie dann auf das Dropdownmenü, und klicken Sie dort auf das Speicherkonto , das Sie im letzten Kapitel erstellt haben.
Wählen Sie im Dropdownmenü den entsprechenden Arbeitsbereichstarif aus.
Klicken Sie im Abschnitt Webdienstplan auf Neu erstellen, und fügen Sie dann einen Namen dafür in das Textfeld ein.
Wählen Sie im Abschnitt Webdiensttarif den Tarif Ihrer Wahl aus. Eine Entwicklungstestebene namens DEVTEST Standard sollte kostenlos für Sie verfügbar sein.
Sie müssen auch bestätigen, dass Sie die für diesen Dienst geltenden Geschäftsbedingungen verstanden haben.
Klicken Sie auf Erstellen.
Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. Dies kann eine Minute dauern.
Eine Benachrichtigung wird im Portal angezeigt, sobald der Dienst instance erstellt wurde.
Klicken Sie auf die Benachrichtigung, um Ihre neue Dienst-instance zu erkunden.
Klicken Sie in der Benachrichtigung auf die Schaltfläche Zu Ressource wechseln, um Ihre neue Dienst-instance zu erkunden.
Klicken Sie auf der angezeigten Seite im Abschnitt Zusätzliche Links auf Machine Learning Studio starten, wodurch Ihr Browser zum Machine Learning Studio-Portal weitergeleitet wird.
Verwenden Sie die Schaltfläche Anmelden oben rechts oder in der Mitte, um sich bei Ihrem Machine Learning Studio (klassisch) anzumelden.
Kapitel 3: Machine Learning Studio (klassisch): Datasetsetsetup
Eine der Möglichkeiten, wie Machine Learning-Algorithmen funktionieren, besteht darin, vorhandene Daten zu analysieren und dann zu versuchen, zukünftige Ergebnisse basierend auf dem vorhandenen Dataset vorherzusagen. Dies bedeutet im Allgemeinen, dass der Algorithmus bei der Vorhersage zukünftiger Ergebnisse besser ist, je mehr daten vorhanden sind.
Für diesen Kurs wird ihnen eine Beispieltabelle mit dem Namen ProductsTableCSV bereitgestellt, die hier heruntergeladen werden kann.
Wichtig
Die obige .zip Datei enthält sowohl die ProductsTableCSV als auch das UNITY-Paket, das Sie in Kapitel 6 benötigen. Dieses Paket wird auch in diesem Kapitel bereitgestellt, allerdings getrennt von der CSV-Datei.
Dieses Beispieldataset enthält einen Datensatz der am besten verkauften Objekte zu jeder Stunde jedes Tages des Jahres 2017.
An Tag 1 von 2017, um 13 Uhr (Stunde 13), waren salz und pfeffer die meistverkauften Artikel.
Diese Beispieltabelle enthält 9998 Einträge.
Kehren Sie zum Portal von Machine Learning Studio (classic) zurück, und fügen Sie diese Tabelle als Dataset für Ihr ML hinzu. Klicken Sie dazu in der unteren linken Ecke des Bildschirms auf die Schaltfläche + Neu .
Ein Abschnitt wird von unten nach oben angezeigt, und in diesem befindet sich der Navigationsbereich auf der linken Seite. Klicken Sie auf Dataset, und klicken Sie dann rechts davon auf Aus lokaler Datei.
Laden Sie das neue Dataset hoch, indem Sie die folgenden Schritte ausführen:
Das Uploadfenster wird angezeigt, in dem Sie Ihre Festplatte nach dem neuen Dataset durchsuchen können.
Lassen Sie nach der Auswahl und wieder im Uploadfenster das Kontrollkästchen deaktiviert.
Geben Sie im Textfeld unten ProductsTableCSV.csv als Namen für das Dataset ein (sollte jedoch automatisch hinzugefügt werden).
Wählen Sie im Dropdownmenü für Typdie Option Generische CSV-Datei mit einer Kopfzeile (.csv) aus.
Drücken Sie das Häkchen unten rechts im Uploadfenster, und Ihr Dataset wird hochgeladen.
Kapitel 4: Das Machine Learning Studio (klassisch): Das Experiment
Bevor Sie Ihr Machine Learning-System erstellen können, müssen Sie ein Experiment erstellen, um Ihre Theorie über Ihre Daten zu überprüfen. Mit den Ergebnissen wissen Sie, ob Sie mehr Daten benötigen oder ob keine Korrelation zwischen den Daten und einem möglichen Ergebnis besteht.
So beginnen Sie mit der Erstellung eines Experiments:
Klicken Sie erneut auf die Schaltfläche + Neu unten links auf der Seite, und klicken Sie dann auf Experiment>Leeres Experiment.
Eine neue Seite wird mit einem leeren Experiment angezeigt:
Erweitern Sie im Bereich auf der linken Seite Gespeicherte Datasets>Meine Datasets , und ziehen Sie productsTableCSV auf den Experimentbereich.
Erweitern Sie im Bereich auf der linken Seite Datentransformationsbeispiel>und Teilen. Ziehen Sie dann das Element Daten teilen in den Experimentbereich. Das Element Daten teilen teilt das Dataset in zwei Teile auf. Ein Teil, den Sie zum Trainieren des Machine Learning-Algorithmus verwenden. Der zweite Teil wird verwendet, um die Genauigkeit des generierten Algorithmus zu bewerten.
Bearbeiten Sie im rechten Bereich (während das Element Daten teilen auf der Canvas ausgewählt ist), den Bruch der Zeilen im ersten Ausgabedataset auf 0,7. Dadurch werden die Daten in zwei Teile aufgeteilt. Der erste Teil umfasst 70 % der Daten und der zweite Teil die restlichen 30 %. Um sicherzustellen, dass die Daten nach dem Zufallsprinzip aufgeteilt werden, stellen Sie sicher, dass das Kontrollkästchen Zufällige Aufteilung aktiviert bleibt.
Ziehen Sie eine Verbindung von der Basis des Elements ProductsTableCSV auf der Canvas an den Anfang des Elements Split Data. Dadurch werden die Elemente verbunden und die Ausgabe des ProductsTableCSV-Datasets (die Daten) an die Eingabe Split Data gesendet.
Erweitern Sie im Bereich Experimente auf der linken Seite Machine Learning>Train. Ziehen Sie das Element Train Model in den Experimentbereich. Ihr Zeichenbereich sollte genauso aussehen wie die unten gezeigte.
Ziehen Sie von links unten im Element Daten teilen eine Verbindung nach oben rechts neben dem Element Train Model . Die erste Aufteilung von 70 % aus dem Dataset wird vom Train Model verwendet, um den Algorithmus zu trainieren.
Wählen Sie im Zeichenbereich das Element Modell trainieren aus, und klicken Sie im Bereich Eigenschaften (rechts im Browserfenster) auf die Schaltfläche Spaltenauswahl starten .
Geben Sie im Textfeld product ein, und drücken Sie dann die EINGABETASTE. Product wird als Spalte zum Trainieren von Vorhersagen festgelegt. Klicken Sie anschließend auf das Häkchen in der unteren rechten Ecke, um das Auswahldialogfeld zu schließen.
Sie werden einen Multiclass Logistic Regression-Algorithmus trainieren, um das am meisten verkaufte Produkt basierend auf der Stunde des Tages und dem Datum vorherzusagen. Es geht über den Rahmen dieses Dokuments hinaus, die Details der verschiedenen Algorithmen zu erläutern, die vom Azure Machine Learning Studio bereitgestellt werden. Weitere Informationen finden Sie jedoch im Spickzettel für Machine Learning-Algorithmen.
Erweitern Sie im Bereich Experimentelemente auf der linken Seite Machine Learning>Modellklassifizierung>initialisieren, und ziehen Sie das Element Multiclass Logistic Regression auf den Experimentbereich.
Verbinden Sie die Ausgabe vom unteren Rand der Multiclass Logistic Regression mit der eingabe oben links des Elements Train Model .
Erweitern Sie in der Liste der Experimentelemente im Bereich auf der linken Seite Machine Learning-Bewertung>, und ziehen Sie das Element Score Model auf die Canvas.
Verbinden Sie die Ausgabe vom unteren Rand des Train Model mit der eingabe oben links des Bewertungsmodells.
Verbinden Sie die untere rechte Ausgabe von Split Data mit der Eingabe oben rechts des Score Model-Elements .
Erweitern Sie in der Liste der Experimentelemente im Bereich auf der linken Seite Machine Learning>Evaluate , und ziehen Sie das Element Evaluate Model (Modell auswerten ) auf die Canvas.
Verbinden Sie die Ausgabe des Bewertungsmodells mit der eingabe oben links des Evaluate Model.
Sie haben Ihr erstes Machine Learning-Experiment erstellt. Sie können das Experiment jetzt speichern und ausführen. Klicken Sie im Menü am unteren Rand der Seite auf die Schaltfläche Speichern , um Ihr Experiment zu speichern, und klicken Sie dann auf Ausführen , um das Experiment zu starten.
Die status des Experiments wird oben rechts im Zeichenbereich angezeigt. Warten Sie einige Augenblicke, bis das Experiment abgeschlossen ist.
Wenn Sie über ein großes (reales) Dataset verfügen, kann es wahrscheinlich mehrere Stunden dauern, bis das Experiment ausgeführt wird.
Klicken Sie im Zeichenbereich mit der rechten Maustaste auf das Element Modell auswerten , und zeigen Sie im Kontextmenü mit dem Mauszeiger auf Auswertungsergebnisse, und wählen Sie dann Visualisieren aus.
Die Auswertungsergebnisse werden mit den vorhergesagten Ergebnissen im Vergleich zu den tatsächlichen Ergebnissen angezeigt. Dabei werden die 30 % des ursprünglichen Datasets, das zuvor aufgeteilt wurde, für die Auswertung des Modells verwendet. Sie können sehen, dass die Ergebnisse nicht großartig sind, im Idealfall haben Sie die höchste Zahl in jeder Zeile, das hervorgehobene Element in den Spalten.
Schließen Sie die Ergebnisse.
Um Ihr neu trainiertes Machine Learning-Modell zu verwenden, müssen Sie es als Webdienst verfügbar machen. Klicken Sie dazu im Menü unten auf der Seite auf das Menüelement Webdienst einrichten , und klicken Sie dann auf Predictive Web Service.
Eine neue Registerkarte wird erstellt, und das Trainmodell wird zusammengeführt, um den neuen Webdienst zu erstellen.
Klicken Sie im Menü unten auf der Seite auf Speichern und dann auf Ausführen. Die status wird in der oberen rechten Ecke des Experimentbereichs aktualisiert.
Nach Abschluss der Ausführung wird unten auf der Seite die Schaltfläche Webdienst bereitstellen angezeigt. Sie können den Webdienst bereitstellen. Klicken Sie im Menü unten auf der Seite auf Webdienst bereitstellen (klassisch).
Ihr Browser fordert möglicherweise auf, ein Popup zuzulassen, das Sie zulassen sollten, obwohl Sie möglicherweise erneut auf Webdienst bereitstellen drücken müssen, wenn die Bereitstellungsseite nicht angezeigt wird.
Nachdem das Experiment erstellt wurde, werden Sie zu einer Dashboardseite weitergeleitet, auf der Ihr API-Schlüssel angezeigt wird. Kopieren Sie es für den Moment in einen Editor, und Sie benötigen es sehr bald in Ihrem Code. Nachdem Sie Ihren API-Schlüssel notiert haben, klicken Sie im Abschnitt Standardendpunkt unter dem Schlüssel auf die Schaltfläche REQUEST/RESPONSE.
Hinweis
Wenn Sie auf dieser Seite auf Testen klicken, können Sie Eingabedaten eingeben und die Ausgabe anzeigen. Geben Sie den Tag und die Stunde ein. Lassen Sie den Produkteintrag leer. Klicken Sie dann auf die Schaltfläche Bestätigen . Die Ausgabe am unteren Rand der Seite zeigt den JSON-Code an, der die Wahrscheinlichkeit darstellt, dass jedes Produkt die Wahl hat.
Eine neue Webseite wird geöffnet, auf der die Anweisungen und einige Beispiele zur Anforderungsstruktur angezeigt werden, die für Machine Learning Studio (klassisch) erforderlich ist. Kopieren Sie den auf dieser Seite angezeigten Anforderungs-URI in Ihren Editor.
Sie haben jetzt ein Machine Learning-System erstellt, das das produkt bereitstellt, das am wahrscheinlichsten verkauft werden kann, basierend auf historischen Kaufdaten, die mit der Tageszeit und dem Tag des Jahres korreliert sind.
Zum Aufrufen des Webdiensts benötigen Sie die URL für den Dienstendpunkt und einen API-Schlüssel für den Dienst. Klicken Sie im oberen Menü auf die Registerkarte Verbrauch .
Auf der Seite Verbrauchsinformationen werden die Informationen angezeigt, die Sie benötigen, um den Webdienst über Ihren Code aufzurufen. Erstellen Sie eine Kopie des Primärschlüssels und der Anforderungsantwort-URL . Diese benötigen Sie im nächsten Kapitel.
Kapitel 5: Einrichten des Unity-Projekts
Richten Sie Ihr Mixed Reality Immersive Headset ein und testen Sie es.
Hinweis
Für diesen Kurs benötigen Sie keine Bewegungscontroller. Wenn Sie Unterstützung beim Einrichten des immersiven Headsets benötigen, klicken Sie hier.
Öffnen Sie Unity , und erstellen Sie ein neues Unity-Projekt namens MR_MachineLearning. Stellen Sie sicher, dass der Projekttyp auf 3D festgelegt ist.
Wenn Unity geöffnet ist, lohnt es sich, zu überprüfen, ob der Standardskript-Editor auf Visual Studio festgelegt ist. Navigieren Sie zu Einstellungen bearbeiten>, und navigieren Sie dann im neuen Fenster zu Externe Tools. Ändern Sie den externen Skript-Editor in Visual Studio 2017. Schließen Sie das Fenster Einstellungen.
Wechseln Sie als Nächstes zuDateierstellungseinstellungen>, und wechseln Sie die Plattform auf Universelle Windows-Plattform, indem Sie auf die Schaltfläche Plattform wechseln klicken.
Stellen Sie außerdem folgendes sicher:
Zielgerät ist auf Beliebiges Gerät festgelegt.
Legen Sie für die Microsoft HoloLens Zielgerät auf HoloLens fest.
Buildtyp ist auf D3D festgelegt.
SDK ist auf Zuletzt installiert festgelegt.
Visual Studio Version ist auf Zuletzt installiert festgelegt.
Build and Run ist auf Lokaler Computer festgelegt.
Machen Sie sich jetzt keine Gedanken über die Einrichtung von Szenen , da diese später bereitgestellt werden.
Die restlichen Einstellungen sollten vorerst als Standard beibehalten werden.
Klicken Sie im Fenster Buildeinstellungen auf die Schaltfläche Playereinstellungen . Dadurch wird der zugehörige Bereich in dem Bereich geöffnet, in dem sich der Inspektor befindet.
In diesem Bereich müssen einige Einstellungen überprüft werden:
Auf der Registerkarte Andere Einstellungen :
Die Skriptlaufzeitversion sollte experimentell (.NET 4.6 gleichwertig) sein.
Skript-Back-End sollte .NET sein
API-Kompatibilitätsgrad sollte .NET 4.6 sein
Überprüfen Sie auf der Registerkarte Veröffentlichungseinstellungen unter Funktionen Folgendes:
InternetClient
Wählen Sie weiter unten im Bereich unter XR-Einstellungen (unter Veröffentlichungseinstellungen) das Kontrollkästchen Virtual Reality Supported (Virtual Reality Supported) an, vergewissern Sie sich, dass das Windows Mixed Reality SDK hinzugefügt wurde.
Zurück in BuildeinstellungenUnity C#- Projekte ist nicht mehr abgeblendet. aktivieren Sie das Kontrollkästchen neben diesem.
Schließen Sie das Fenster „Build Settings“ (Buildeinstellungen).
Speichern Sie Ihr Projekt (FILE > SAVE PROJECT).
Kapitel 6: Importieren des MLProducts Unity-Pakets
Für diesen Kurs müssen Sie ein Unity-Ressourcenpaket namens Azure-MR-307.unitypackage herunterladen. Dieses Paket wird mit einer Szene mit allen Objekten in diesem vordefinierten Paket bereitgestellt, sodass Sie sich darauf konzentrieren können, dass alles funktioniert. Das ShelfKeeper-Skript wird bereitgestellt, enthält jedoch nur die öffentlichen Variablen für die Struktur des Szenensetups. Sie müssen alle anderen Abschnitte ausführen.
So importieren Sie dieses Paket:
Klicken Sie mit dem Unity-Dashboard vor Ihnen im Menü oben auf dem Bildschirm auf Ressourcen, und klicken Sie dann auf Paket importieren, Benutzerdefiniertes Paket.
Wählen Sie mit der Dateiauswahl das Paket Azure-MR-307.unitypackage aus, und klicken Sie auf Öffnen.
Eine Liste der Komponenten für dieses Asset wird Angezeigt. Bestätigen Sie den Import, indem Sie auf Importieren klicken.
Sobald der Import abgeschlossen ist, werden Sie feststellen, dass einige neue Ordner in Ihrem Unity-Projektbereich angezeigt wurden. Dies sind die 3D-Modelle und die entsprechenden Materialien, die Teil der vorgefertigten Szene sind, an der Sie arbeiten werden. Sie schreiben den Großteil des Codes in diesem Kurs.
Klicken Sie im Ordner Projektbereich auf den Ordner Szenen , und doppelklicken Sie auf die Szene darin ( MR_MachineLearningScene genannt). Die Szene wird geöffnet (siehe Abbildung unten). Wenn die roten Diamanten fehlen, klicken Sie einfach oben rechts im Spielbereich auf die Schaltfläche Gizmos.
Kapitel 7: Überprüfen der DLLs in Unity
Um die Verwendung von JSON-Bibliotheken (die zum Serialisieren und Deserialisieren verwendet werden) zu nutzen, wurde eine Newtonsoft-DLL mit dem von Ihnen bereitgestellten Paket implementiert. Die Bibliothek sollte über die richtige Konfiguration verfügen, es lohnt sich jedoch zu überprüfen (insbesondere, wenn Probleme mit nicht funktionierendem Code auftreten).
Gehen Sie folgendermaßen vor:
Klicken Sie mit der linken Maustaste auf die Newtonsoft-Datei im Ordner Plugins, und sehen Sie sich den Bereich Inspector an. Stellen Sie sicher , dass "Beliebige Plattform " aktiviert ist. Wechseln Sie zur Registerkarte UWP , und stellen Sie sicher, dass Nicht verarbeiten aktiviert ist.
Kapitel 8: Erstellen der ShelfKeeper-Klasse
Die ShelfKeeper-Klasse hostet Methoden, die die Benutzeroberfläche und die in der Szene erzeugten Produkte steuern.
Als Teil des importierten Pakets haben Sie diese Klasse erhalten, obwohl sie unvollständig ist. Es ist jetzt an der Zeit, diese Klasse abzuschließen:
Doppelklicken Sie im Ordner Skripts auf das Skript ShelfKeeper, um es mit Visual Studio 2017 zu öffnen.
Ersetzen Sie den gesamten im Skript vorhandenen Code durch den folgenden Code, der die Uhrzeit und das Datum festlegt und über eine Methode zum Anzeigen eines Produkts verfügt.
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); } }
Speichern Sie ihre Änderungen in Visual Studio , bevor Sie zu Unity zurückkehren.
Überprüfen Sie im Unity-Editor, ob die ShelfKeeper-Klasse wie folgt aussieht:
Wichtig
Wenn Ihr Skript nicht über die Referenzziele verfügt (d. h. Datum (Textgitter)), ziehen Sie einfach die entsprechenden Objekte aus dem Hierarchiebereich in die Zielfelder. Erläuterungen finden Sie bei Bedarf weiter unten:
Öffnen Sie das Spawn Point-Array im ShelfKeeper-Komponentenskript , indem Sie mit der linken Maustaste darauf klicken. Es wird ein Unterabschnitt namens Size angezeigt, der die Größe des Arrays angibt. Geben Sie 3 in das Textfeld neben Größe ein, und drücken Sie die EINGABETASTE, und darunter werden drei Slots erstellt.
Erweitern Sie innerhalb der Hierarchie das Objekt Zeitanzeige (indem Sie mit der linken Maustaste auf den Pfeil daneben klicken). Klicken Sie als Nächstes in der Hierarchie auf die Hauptkamera, damit der Inspektor seine Informationen anzeigt.
Wählen Sie im Hierarchiebereich die Hauptkamera aus. Ziehen Sie die Date - und Time-Objekte aus dem Hierarchiebereich in die Datumstext - und Zeittextslots im Inspektor der Hauptkamera in der ShelfKeeper-Komponente .
Ziehen Sie die Spawnpunkte aus dem Hierarchiebereich (unter dem Shelf-Objekt ) auf die 3Element-Referenzziele unter dem Array Spawn-Punkt , wie in der Abbildung gezeigt.
Kapitel 9: Erstellen der ProductPrediction-Klasse
Die nächste Klasse, die Sie erstellen, ist die ProductPrediction-Klasse .
Diese Klasse ist verantwortlich für:
Abfragen des Machine Learning Service-instance, wobei das aktuelle Datum und die aktuelle Uhrzeit angegeben werden.
Deserialisieren der JSON-Antwort in nutzbare Daten.
Interpretieren der Daten, Abrufen der 3 empfohlenen Produkte.
Rufen Sie die Methoden der ShelfKeeper-Klasse auf, um die Daten in der Scene anzuzeigen.
So erstellen Sie diese Klasse:
Wechseln Sie im Projektbereich zum Ordner Skripts.
Klicken Sie mit der rechten Maustaste in den OrdnerC#-Skript erstellen>. Rufen Sie das Skript ProductPrediction auf.
Doppelklicken Sie auf das neue ProductPrediction-Skript , um es mit Visual Studio 2017 zu öffnen.
Wenn das Dialogfeld Dateiänderung erkannt angezeigt wird, klicken Sie auf *Projektmappe neu laden.
Fügen Sie die folgenden Namespaces am Anfang der ProductPrediction-Klasse hinzu:
using System; using System.Collections.Generic; using UnityEngine; using System.Linq; using Newtonsoft.Json; using UnityEngine.Networking; using System.Runtime.Serialization; using System.Collections;
Fügen Sie in die ProductPrediction-Klasse die beiden folgenden Objekte ein, die aus einer Reihe geschachtelter Klassen bestehen. Diese Klassen werden verwendet, um den JSON-Code für den Machine Learning Service zu serialisieren und zu deserialisieren.
/// <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; } }
Fügen Sie dann die folgenden Variablen über dem vorherigen Code hinzu (sodass sich der JSON-bezogene Code am unteren Rand des Skripts, unter allen anderen Code und nicht im Weg befindet):
/// <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;
Wichtig
Fügen Sie hier unbedingt den Primärschlüssel und den Anforderungsantwortendpunkt aus dem Machine Learning-Portal in die Variablen ein. Die folgenden Bilder zeigen, wo Sie den Schlüssel und den Endpunkt genommen hätten.
Fügen Sie diesen Code in die Start()- Methode ein. Die Start()- Methode wird aufgerufen, wenn die -Klasse initialisiert:
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)); }
Im Folgenden finden Sie die Methode, die Datum und Uhrzeit von Windows erfasst und in ein Format konvertiert, das unser Machine Learning-Experiment verwenden kann, um mit den in der Tabelle gespeicherten Daten zu vergleichen.
/// <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(); }
Sie können die Update()-Methode löschen, da diese Klasse sie nicht verwendet.
Fügen Sie die folgende Methode hinzu, die das aktuelle Datum und die aktuelle Uhrzeit an den Machine Learning-Endpunkt kommuniziert und eine Antwort im JSON-Format empfängt.
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); } }
Fügen Sie die folgende Methode hinzu, die für das Deserialisieren der JSON-Antwort und die Kommunikation des Ergebnisses der Deserialisierung an die ShelfKeeper-Klasse verantwortlich ist. Dieses Ergebnis sind die Namen der drei Elemente, die zum aktuellen Datum und zur aktuellen Zeit am meisten verkauft werden. Fügen Sie den folgenden Code unter der vorherigen Methode in die ProductPrediction-Klasse ein.
/// <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(); }
Speichern Sie Visual Studio , und wechseln Sie zurück zu Unity.
Ziehen Sie das ProductPrediction-Klassenskript aus dem Ordner Skript auf das Hauptkameraobjekt .
Speichern Sie Ihre Szene und Ihr Projekt Datei>speichern Szene/Datei>speichern Projekt.
Kapitel 10: Erstellen der UWP-Lösung
Es ist jetzt an der Zeit, Ihr Projekt als UWP-Lösung zu erstellen, damit es als eigenständige Anwendung ausgeführt werden kann.
So erstellen Sie Folgendes:
Speichern Sie die aktuelle Szene, indem Sie auf Datei>speichern Szenen klicken.
Wechseln Sie zuDateibuildeinstellungen.>
Aktivieren Sie das Kontrollkästchen Unity C#-Projekte (dies ist wichtig, da Sie die Klassen nach Abschluss des Buildvorgangs bearbeiten können).
Klicken Sie auf Offene Szenen hinzufügen,
Klicken Sie auf Erstellen.
Sie werden aufgefordert, den Ordner auszuwählen, in dem Sie die Projektmappe erstellen möchten.
Erstellen Sie einen BUILDS-Ordner , und erstellen Sie in diesem Ordner einen anderen Ordner mit einem entsprechenden Namen Ihrer Wahl.
Klicken Sie auf Ihren neuen Ordner, und klicken Sie dann auf Ordner auswählen, um mit dem Build an diesem Speicherort zu beginnen.
Sobald Unity das Erstellen abgeschlossen hat (es kann einige Zeit dauern), öffnet es ein Explorer Fenster am Speicherort Ihres Builds (überprüfen Sie Ihre Taskleiste, da es möglicherweise nicht immer über Ihren Fenstern angezeigt wird, Sie aber über das Hinzufügen eines neuen Fensters benachrichtigt).
Kapitel 11: Bereitstellen Ihrer Anwendung
So stellen Sie Ihre Anwendung bereit:
Navigieren Sie zu Ihrem neuen Unity-Build (dem Ordner App ), und öffnen Sie die Projektmappendatei mit Visual Studio.
Wenn Visual Studio geöffnet ist, müssen Sie NuGet-Pakete wiederherstellen. Klicken Sie dazu mit der rechten Maustaste auf Ihre MachineLearningLab_Build Projektmappe, über die Projektmappen-Explorer (rechts neben Visual Studio), und klicken Sie dann auf NuGet-Pakete wiederherstellen:
Wählen Sie in der Projektmappenkonfiguration debuggen aus.
Wählen Sie auf der Lösungsplattform die Option x86, Lokaler Computer aus.
Für die Microsoft HoloLens ist es möglicherweise einfacher, dies auf Remotecomputer festzulegen, sodass Sie nicht an Ihren Computer angebunden werden. Sie müssen jedoch auch die folgenden Schritte ausführen:
- Kennen Sie die IP-Adresse Ihrer HoloLens, die Sie im Einstellungsnetzwerk > & Internet > Wi-Fi > Erweiterten Optionen finden können. IPv4 ist die Adresse, die Sie verwenden sollten.
- Stellen Sie sicher , dass der Entwicklermodusaktiviert ist. finden Sie unter Einstellungen > Update & Sicherheit > für Entwickler.
Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen , um die Anwendung auf Ihren PC querzuladen.
Ihre App sollte nun in der Liste der installierten Apps angezeigt werden, die zum Starten bereit sind.
Wenn Sie die Mixed Reality-Anwendung ausführen, sehen Sie die Bank, die in Ihrer Unity-Szene eingerichtet wurde, und nach der Initialisierung werden die Daten abgerufen, die Sie in Azure eingerichtet haben. Die Daten werden in Ihrer Anwendung deserialisiert, und die drei besten Ergebnisse für Ihr aktuelles Datum und Ihre aktuelle Uhrzeit werden visuell als drei Modelle auf der Bank bereitgestellt.
Ihre fertige Machine Learning-Anwendung
Herzlichen Glückwunsch! Sie haben eine Mixed Reality-App erstellt, die Azure Machine Learning nutzt, um Datenvorhersagen zu treffen und in Ihrer Szene anzuzeigen.
Übung
Übung 1
Experimentieren Sie mit der Sortierreihenfolge Ihrer Anwendung, und lassen Sie die drei unteren Vorhersagen im Regal erscheinen, da diese Daten möglicherweise auch nützlich wären.
Übung 2
Füllen Sie mithilfe von Azure Tables eine neue Tabelle mit Wetterinformationen auf, und erstellen Sie mithilfe der Daten ein neues Experiment.