HoloLens (1. Generation) und Azure 307: Maschinelles Lernen
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 Lernprogrammen geben, die in Zukunft veröffentlicht werden, die zeigen, wie sie für HoloLens 2 entwickelt werden. Dieser Hinweis wird mit einem Link zu diesen Lernprogrammen aktualisiert, wenn sie veröffentlicht werden.
In diesem Kurs erfahren Sie, wie Sie einer Mixed Reality-Anwendung mithilfe von Azure Machine Learning Studio (klassisch) Machine Learning Studio Funktionen (MACHINE Learning Studio) hinzufügen.
Azure Machine Learning Studio (klassisch) ist ein Microsoft-Dienst, der Entwicklern eine große Anzahl von Machine Learning-Algorithmen bietet, die bei der Dateneingabe, Ausgabe, Vorbereitung und Visualisierung helfen können. Aus diesen Komponenten ist es dann möglich, ein Predictive Analytics-Experiment zu entwickeln, es zu durchlaufen und es zu verwenden, um Ihr Modell zu trainieren. Nach der Schulung können Sie Ihr Modell in der Azure-Cloud betriebsbereit machen, damit es dann neue Daten bewertet. Weitere Informationen finden Sie auf der Seite Azure Machine Learning Studio (klassisch).
Nachdem Sie diesen Kurs abgeschlossen haben, haben Sie eine immersive Mixed Reality-Headset-Anwendung und haben erfahren, wie Sie die folgenden Schritte ausführen:
- Stellen Sie eine Tabelle mit Verkaufsdaten für das Azure Machine Learning Studio (klassische) Portal bereit, und entwerfen Sie einen Algorithmus, um zukünftige Verkäufe beliebter Artikel vorherzusagen.
- Erstellen Sie ein Unity-Projekt, das Vorhersagedaten vom ML-Dienst empfangen und interpretieren kann.
- Zeigen Sie die Prädikationsdaten visuell innerhalb des Unity-Projekts an, indem Sie die am häufigsten verwendeten Verkaufsartikel auf einem Regal bereitstellen.
In Ihrer Anwendung liegt es an Ihnen, wie Sie die Ergebnisse in Ihr Design integrieren. Dieser Kurs wurde entwickelt, um Ihnen zu vermitteln, wie Sie einen Azure-Dienst in Ihr Unity-Projekt integrieren. Es ist Ihre Aufgabe, das Wissen zu nutzen, das Sie aus diesem Kurs gewinnen, um Ihre Mixed Reality-Anwendung zu verbessern.
Dieser Kurs ist ein eigenständiges Lernprogramm, das keine anderen Mixed Reality Labs direkt beinhaltet.
Unterstützung für Geräte
Kurs | HoloLens | Immersive Headsets |
---|---|---|
MR und Azure 307: Maschinelles Lernen | ✔️ | ✔️ |
Hinweis
Während sich dieser Kurs in erster Linie auf immersive Windows Mixed Reality-Headsets (VR) konzentriert, können Sie auch das, was Sie in diesem Kurs lernen, auf Microsoft HoloLens anwenden. Während Sie den Kurs befolgen, werden Notizen zu allen Änderungen angezeigt, die Sie möglicherweise zur Unterstützung von HoloLens verwenden müssen. Wenn Sie HoloLens verwenden, bemerken Sie möglicherweise ein Echo während der Sprachaufnahme.
Voraussetzungen
Hinweis
Dieses Lernprogramm wurde für Entwickler entwickelt, die grundlegende Erfahrung mit Unity und C# haben. Bitte beachten Sie auch, dass die Voraussetzungen und schriftlichen Anweisungen in diesem Dokument das zum Zeitpunkt der Schriftlichkeit (Mai 2018) getestet und überprüft wurden. Sie sind kostenlos, die neueste Software zu verwenden, wie im Artikel "Tools installieren" aufgeführt, aber es sollte nicht angenommen werden, dass die Informationen in diesem Kurs perfekt mit dem übereinstimmen, was Sie in neuerer Software finden als die unten aufgeführten.
Wir empfehlen die folgende Hardware 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 aktivierter Entwicklermodus
- Das neueste Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Ein immersives Windows Mixed Reality-Headset (VR) oder Microsoft HoloLens mit aktiviertem Entwicklermodus
- Internetzugriff für Azure-Setup und ML-Datenabruf
Vor der Installation
Um Probleme beim Erstellen dieses Projekts zu vermeiden, wird dringend empfohlen, das in diesem Lernprogramm erwähnte Projekt in einem Stamm- oder Near-Root-Ordner zu erstellen (lange Ordnerpfade können zu Buildzeit zu Problemen führen).
Kapitel 1 – Einrichten des Azure Storage-Kontos
Um die Azure Translator-API zu verwenden, müssen Sie eine Instanz des Diensts konfigurieren, die Für Ihre Anwendung verfügbar gemacht werden soll.
Melden Sie sich beim Azure-Portalan.
Hinweis
Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie ein Konto erstellen. Wenn Sie diesem Lernprogramm in einer Unterrichts- oder Laborsituation folgen, bitten Sie Ihren Kursleiter oder einen der Betreuer, Hilfe beim Einrichten Ihres neuen Kontos zu erhalten.
Sobald Sie angemeldet sind, klicken Sie im linken Menü auf "Speicherkonten ".
Hinweis
Das Wort "Neu" wurde möglicherweise durch "Ressource erstellen" in neueren Portalen ersetzt.
Klicken Sie auf der Registerkarte "Speicherkonten " auf " Hinzufügen".
Im Bereich "Speicherkonto erstellen":
Fügen Sie einen Namen für Ihr Konto ein, beachten Sie, dass in diesem Feld nur Zahlen und Kleinbuchstaben akzeptiert werden.
Wählen Sie für das Bereitstellungsmodell den Ressourcen-Manager aus.
Wählen Sie für "Kontotyp" die Option "Speicher" (allgemeiner Zweck v1) aus.
Wählen Sie für Leistung die Option Standard aus.
Wählen Sie für die Replikation "Read-access-geo-redundant storage (RA-GRS)" aus.
Verlassen Sie die sichere Übertragung, die als deaktiviert erforderlich ist.
Wählen Sie ein Abonnementaus.
Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit, die Abrechnung für eine Sammlung von Azure-Ressourcen zu überwachen, zu steuern, den Zugriff zu steuern, bereitzustellen und zu verwalten. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. B. diesen Laboren) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu halten.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, besuchen Sie bitte den Artikel zur Ressourcengruppe.
Bestimmen Sie den Speicherort für Ihre Ressourcengruppe (wenn Sie eine neue Ressourcengruppe erstellen). Der Standort wäre idealerweise in der Region, in der die Anwendung ausgeführt würde. Einige Azure-Ressourcen sind nur in bestimmten Regionen verfügbar.
Sie müssen auch bestätigen, dass Sie die auf diesen Dienst angewendeten Allgemeinen Geschäftsbedingungen verstanden haben.
Nachdem Sie auf "Erstellen" geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. Dies kann eine Minute dauern.
Sobald die Dienstinstanz erstellt wurde, wird im Portal eine Benachrichtigung angezeigt.
Kapitel 2 – Das Azure Machine Learning Studio (klassisch)
Um azure Machine Learning zu verwenden, müssen Sie eine Instanz des Machine Learning-Diensts konfigurieren, damit sie Ihrer Anwendung zur Verfügung gestellt werden.
Klicken Sie im Azure-Portal in der oberen linken Ecke auf "Neu ", und suchen Sie nach Machine Learning Studio Workspace, und drücken Sie die EINGABETASTE.
Die neue Seite enthält eine Beschreibung des Machine Learning Studio Workspace-Diensts . Klicken Sie unten links in dieser Eingabeaufforderung auf die Schaltfläche "Erstellen ", um eine Zuordnung mit 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 ihren gewünschten Arbeitsbereichsnamen für diese Dienstinstanz ein.
Wählen Sie ein Abonnementaus.
Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue. Eine Ressourcengruppe bietet eine Möglichkeit, die Abrechnung für eine Sammlung von Azure-Ressourcen zu überwachen, zu steuern, den Zugriff zu steuern, bereitzustellen und zu verwalten. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. B. diesen Laboren) zugeordnet sind, unter einer gemeinsamen Ressourcengruppe zu halten.
Wenn Sie mehr über Azure-Ressourcengruppen erfahren möchten, besuchen Sie bitte den Artikel zur Ressourcengruppe.
Bestimmen Sie den Speicherort für Ihre Ressourcengruppe (wenn Sie eine neue Ressourcengruppe erstellen). Der Standort wäre idealerweise in der Region, in der die Anwendung ausgeführt würde. Einige Azure-Ressourcen sind nur in bestimmten Regionen verfügbar. Sie sollten dieselbe Ressourcengruppe verwenden, die Sie zum Erstellen des Azure Storage im vorherigen Kapitel verwendet haben.
Klicken Sie für den Abschnitt "Speicherkonto" auf "Vorhandenes Verwenden", dann auf das Dropdownmenü, und klicken Sie dort auf das Speicherkonto, das Sie im letzten Kapitel erstellt haben.
Wählen Sie im Dropdownmenü das entsprechende Preisniveau für Arbeitsbereiche 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 "Preisniveau für Webdienstplan" das Preisniveau Ihrer Wahl aus. Eine Entwicklungsteststufe namens DEVTEST Standard sollte ihnen kostenlos zur Verfügung stehen.
Sie müssen auch bestätigen, dass Sie die auf diesen Dienst angewendeten Allgemeinen 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.
Sobald die Dienstinstanz erstellt wurde, wird im Portal eine Benachrichtigung angezeigt.
Klicken Sie auf die Benachrichtigung, um Ihre neue Dienstinstanz zu erkunden.
Klicken Sie in der Benachrichtigung auf die Schaltfläche "Zur Ressource wechseln", um Ihre neue Dienstinstanz zu erkunden.
Klicken Sie auf der angezeigten Seite unter dem Abschnitt "Zusätzliche Links " auf "Machine Learning Studio starten", das Ihren Browser zum Machine Learning Studio-Portal leitet.
Verwenden Sie die Schaltfläche "Anmelden " oben rechts oder in der Mitte, um sich bei Ihrem Machine Learning Studio (klassisch) anzumelden.
Kapitel 3 – Das Machine Learning Studio (klassisch): Setup des Datasets
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 je mehr vorhandene Daten Sie haben, desto besser ist der Algorithmus bei der Vorhersage zukünftiger Ergebnisse.
Eine Beispieltabelle wird Ihnen für diesen Kurs mit dem Namen ProductsTableCSV bereitgestellt und kann hier heruntergeladen werden.
Wichtig
Die obige .zip Datei enthält sowohl die ProductsTableCSV als auch das Unitypackage, das Sie in Kapitel 6 benötigen. Dieses Paket wird auch innerhalb dieses Kapitels bereitgestellt, jedoch getrennt von der CSV-Datei.
Dieser Beispieldatensatz enthält einen Datensatz der am besten verkauften Objekte zu jeder Stunde jedes Tages des Jahres 2017.
Zum Beispiel am 1. Tag 2017, um 13 Uhr (Stunde 13), war der meistverkaufte Artikel Salz und Pfeffer.
Diese Beispieltabelle enthält 9998 Einträge.
Kehren Sie zum Portal Machine Learning Studio (klassisch) zurück, und fügen Sie diese Tabelle als Dataset für Ihre ML hinzu. Klicken Sie dazu in der unteren linken Ecke des Bildschirms auf die Schaltfläche +Neu .
Ein Abschnitt wird von unten nach oben und innerhalb des Navigationsbereichs auf der linken Seite angezeigt. Klicken Sie auf "Dataset" und dann rechts neben der Datei " Von lokaler Datei".
Laden Sie das neue Dataset hoch, indem Sie die folgenden Schritte ausführen:
Das Uploadfenster wird angezeigt, in dem Sie Ihre Festplatte für das neue Dataset durchsuchen können.
Lassen Sie das Kontrollkästchen nach der Auswahl und wieder im Uploadfenster unbemerkt.
Geben Sie im folgenden Textfeld ProductsTableCSV.csv als Namen für das Dataset ein (sollte jedoch automatisch hinzugefügt werden).
Wählen Sie im Dropdownmenü für "Typ" die Option "Generische CSV-Datei" mit einer Kopfzeile (.csv) aus.
Drücken Sie den Teilstrich 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 zu Ihren Daten zu überprüfen. Mit den Ergebnissen wissen Sie, ob Sie mehr Daten benötigen oder ob es keine Korrelation zwischen den Daten und einem möglichen Ergebnis gibt.
So beginnen Sie mit dem Erstellen eines Experiments:
Klicken Sie erneut auf die Schaltfläche +Neu unten links auf der Seite, und klicken Sie dann auf "Leeres Experiment experimentieren>".
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 Experiment-Canvas.
Erweitern Sie im Bereich auf der linken Seite das Datentransformationsbeispiel>und "Teilen". Ziehen Sie dann das Element "Geteilte Daten " in den Experiment-Zeichenbereich. Das Element "Geteilte Daten" teilt den Datensatz 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 dem Zeichenbereich ausgewählt ist), den Bruch der Zeilen im ersten Ausgabe-Dataset auf 0,7. Dadurch werden die Daten in zwei Teile aufgeteilt, der erste Teil beträgt 70 % der Daten, und der zweite Teil ist die verbleibenden 30 %. Um sicherzustellen, dass die Daten zufällig geteilt werden, vergewissern Sie sich, dass das Kontrollkästchen "Zufällig verteilt " aktiviert bleibt.
Ziehen Sie eine Verbindung von der Basis des ProductsTableCSV-Elements auf dem Zeichenbereich bis zum oberen Rand des Elements "Geteilte Daten". Dadurch werden die Elemente verbunden und die ProductsTableCSV-Datasetausgabe (die Daten) an die Eingabe "Geteilte Daten" gesendet.
Erweitern Sie im Bereich "Experimente" auf der linken Seite den Machine Learning-Zug>. Ziehen Sie das Element "Train Model " in den Zeichenbereich "Experiment". Ihr Zeichenbereich sollte mit der folgenden Aussehen übereinstimmen.
Ziehen Sie von unten links im Element "Geteilte Daten" eine Verbindung nach oben rechts im Element "Train Model". Die erste 70 %-Aufteilung aus dem Dataset wird vom Train-Modell verwendet, um den Algorithmus zu trainieren.
Wählen Sie das Element "Train Model " auf der Canvas aus, und klicken Sie im Eigenschaftenbereich (auf der rechten Seite des Browserfensters) auf die Schaltfläche "Spaltenauswahl starten".
Geben Sie im Textfeld Produkt ein, und drücken Sie dann die EINGABETASTE, und das Produkt wird als Spalte festgelegt, um Vorhersagen zu trainieren. Klicken Sie anschließend auf das Teilstrich 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 des Datums vorherzusagen. Es liegt außerhalb des Umfangs dieses Dokuments, um die Details der verschiedenen Algorithmen zu erläutern, die vom Azure Machine Learning Studio bereitgestellt werden, aber Sie können mehr über das Machine Learning Algorithm Cheat Sheet erfahren.
Erweitern Sie im Bereich "Experimentelemente" auf der linken Seite die Machine Learning>Initialize-Modellklassifizierung>, und ziehen Sie das Element "Multiclass Logistic Regression" auf den Experiment-Canvas.
Verbinden Sie die Ausgabe von unten in der Multiclass Logistic Regression mit der oberen linken Eingabe des Train Model-Elements .
Erweitern Sie in der Liste der Experimentelemente im Bereich auf der linken Seite die Machine Learning>Score, und ziehen Sie das Score Model-Element auf den Zeichenbereich.
Verbinden Sie die Ausgabe vom unteren Rand des Train-Modells mit der oberen linken Eingabe des Bewertungsmodells.
Verbinden Sie die untere rechte Ausgabe aus geteilten Daten mit der oberen rechten Eingabe des Bewertungsmodellelements .
Erweitern Sie in der Liste der Experimentelemente im Bereich auf der linken Seite machine Learning>Evaluate, und ziehen Sie das Element "Evaluate Model" auf den Zeichenbereich.
Verbinden Sie die Ausgabe vom Bewertungsmodell mit der linken oberen Eingabe des Auswertungsmodells.
Sie haben Ihr erstes Machine Learning Experiment erstellt. Sie können das Experiment jetzt speichern und ausführen. Klicken Sie im Menü unten auf der Seite auf die Schaltfläche "Speichern ", um Ihr Experiment zu speichern, und klicken Sie dann auf "Ausführen ", um das Experiment zu starten.
Sie können den Status des Experiments oben rechts im Zeichenbereich sehen. Warten Sie einige Augenblicke, bis das Experiment abgeschlossen ist.
Wenn Sie über ein großes (reales) Dataset verfügen, ist es wahrscheinlich, dass das Experiment Stunden dauern kann.
Klicken Sie mit der rechten Maustaste auf das Element "Modell auswerten" im Zeichenbereich, und zeigen Sie im Kontextmenü mit der Maus auf Auswertungsergebnisse, und wählen Sie dann "Visualisieren" aus.
Die Auswertungsergebnisse werden angezeigt, die die vorhergesagten Ergebnisse im Vergleich zu den tatsächlichen Ergebnissen anzeigen. Dies verwendet die 30 % des ursprünglichen Datasets, das zuvor geteilt wurde, zur Auswertung des Modells. Sie können sehen, dass die Ergebnisse nicht großartig sind, idealerweise haben Sie die höchste Zahl in jeder Zeile als 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".
Es wird eine neue Registerkarte erstellt, und das Zugmodell wird zusammengeführt, um den neuen Webdienst zu erstellen.
Klicken Sie im Menü unten auf der Seite auf " Speichern", und klicken Sie dann auf "Ausführen". Der Status wird in der oberen rechten Ecke des Experiment-Canvass aktualisiert.
Nach Abschluss der Ausführung wird unten auf der Seite eine 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 "Webdienst bereitstellen" drücken müssen, wenn die Bereitstellungsseite nicht angezeigt wird.
Nachdem das Experiment erstellt wurde, werden Sie zu einer Dashboardseite umgeleitet, auf der Ihr API-Schlüssel angezeigt wird. Kopieren Sie es in einen Editor für den Moment, sie benötigen Sie in Ihrem Code sehr bald. Nachdem Sie Ihren API-Schlüssel angegeben haben, klicken Sie im Abschnitt "Standardendpunkt" unter dem Schlüssel auf die Schaltfläche "ANFORDERUNG/ANTWORT".
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 ist.
Eine neue Webseite wird geöffnet, zeigt die Anweisungen und einige Beispiele zur Anforderungsstruktur an, die vom Machine Learning Studio (klassisch) benötigt wird. Kopieren Sie den anforderungs-URI, der auf dieser Seite angezeigt wird, in Ihr Editor.
Sie haben jetzt ein Machine Learning-System erstellt, das das höchstwahrscheinliche Produkt basierend auf historischen Einkaufsdaten verkauft, korreliert mit der Uhrzeit des Tages und des Tages des Jahres.
Um den Webdienst aufzurufen, 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 "Nutzen ".
Auf der Seite "Verbrauchsinformationen " werden die Informationen angezeigt, die Sie benötigen, um den Webdienst aus Ihrem Code aufzurufen. Erstellen Sie eine Kopie des Primärschlüssels und der Anforderungsantwort-URL . Sie benötigen diese im nächsten Kapitel.
Kapitel 5 – Einrichten des Unity-Projekts
Richten Sie Ihr immersives Mixed Reality-Headset ein, und testen Sie es.
Hinweis
Für diesen Kurs benötigen Sie keine Motion Controller. Wenn Sie Unterstützung beim Einrichten des immersiven Headsets benötigen, klicken Sie bitte 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, den Standardmäßigen Skript-Editor auf Visual Studio festzulegen. Wechseln 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 zu "Dateibuildeinstellungen>", und wechseln Sie zur Plattform zu Universelle Windows-Plattform, indem Sie auf die Schaltfläche "Plattform wechseln" klicken.
Stellen Sie außerdem sicher, dass:
Das Zielgerät ist auf "Beliebiges Gerät" festgelegt.
Legen Sie für Microsoft HoloLens das Zielgerät auf HoloLens fest.
Buildtyp ist auf D3D festgelegt.
SDK ist auf "Neueste Installation" festgelegt.
Visual Studio-Version ist auf "Neueste Installation" festgelegt.
Build und Run ist auf den lokalen Computer festgelegt.
Machen Sie sich im Moment keine Sorgen über das Einrichten von Szenen , da diese später bereitgestellt werden.
Die restlichen Einstellungen sollten jetzt als Standard beibehalten werden.
Klicken Sie im Fenster "Buildeinstellungen " auf die Schaltfläche "Spielereinstellungen ". Dadurch wird der zugehörige Bereich im Bereich geöffnet, in dem sich der Inspektor befindet.
In diesem Bereich müssen einige Einstellungen überprüft werden:
Auf der Registerkarte "Andere Einstellungen" folgendes:
Skripting-Runtime-Version sollte experimental sein (.NET 4.6-Entsprechung)
Scripting Back-End sollte .NET sein
API-Kompatibilitätsstufe sollte .NET 4.6 sein
Aktivieren Sie auf der Registerkarte "Veröffentlichungseinstellungen " unter "Funktionen" Folgendes:
InternetClient
Klicken Sie weiter unten im Panel unter "XR-Einstellungen" (unter "Veröffentlichungseinstellungen" zu finden), und vergewissern Sie sich, dass das Windows Mixed Reality SDK hinzugefügt wird.
Zurück in Buildeinstellungen Unity C# -Projekte ist nicht mehr abgeblentet. Aktivieren Sie das Kontrollkästchen neben diesem.
Schließen Sie das Fenster Buildeinstellungen.
Speichern Sie Ihr Projekt (FILE > SAVE PROJECT).
Kapitel 6 – Importieren des MLProducts Unity-Pakets
Für diesen Kurs müssen Sie ein Unity Asset Package namens Azure-MR-307.unitypackage herunterladen. Dieses Paket ist vollständig mit einer Szene ausgestattet, mit allen Objekten in diesem vordefinierten Bereich, sodass Sie sich darauf konzentrieren können, alles zu erledigen. Das ShelfKeeper-Skript wird bereitgestellt, enthält jedoch nur die öffentlichen Variablen für den Zweck der Szeneneinrichtungsstruktur. 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 "Assets ", und klicken Sie dann auf " Paket importieren", "Benutzerdefiniertes Paket".
Verwenden Sie die Dateiauswahl, um das Azure-MR-307.unitypackage-Paket auszuwählen und auf "Öffnen" zu klicken.
Ihnen wird eine Liste der Komponenten für dieses Objekt angezeigt. Bestätigen Sie den Import, indem Sie auf "Importieren" klicken.
Nachdem der Import abgeschlossen ist, werden Sie feststellen, dass einige neue Ordner in Ihrem Unity-Projektbereich angezeigt wurden. Dies sind die 3D-Modelle und die jeweiligen 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 innerhalb (MR_MachineLearningScene genannt). Die Szene wird geöffnet (siehe Abbildung unten). Wenn die roten Diamanten fehlen, klicken Sie einfach auf die Gizmos-Schaltfläche oben rechts im Game Panel.
Kapitel 7 – Überprüfen der DLLs in Unity
Um die Verwendung von JSON-Bibliotheken (zum Serialisieren und Deserialisieren) zu nutzen, wurde eine Newtonsoft-DLL mit dem Paket implementiert, das Sie mitgebracht haben. Die Bibliothek sollte über die richtige Konfiguration verfügen, aber es lohnt sich, zu überprüfen (insbesondere, wenn Probleme mit Code nicht funktionieren).
Dazu gehen Sie wie folgt vor:
Klicken Sie mit der linken Maustaste auf die Newtonsoft-Datei im Ordner "Plugins", und sehen Sie sich den Inspektorbereich an. Stellen Sie sicher, dass "Beliebige Plattform " angekreuzt ist. Wechseln Sie zur Registerkarte "UWP" , und stellen Sie sicher, dass "Nicht verarbeiten " angekreuzt ist.
Kapitel 8 – Erstellen der ShelfKeeper-Klasse
Die ShelfKeeper-Klasse hostet Methoden, die die Benutzeroberfläche und produkte steuern, die in der Szene verfügbar sind.
Im Rahmen des importierten Pakets erhalten Sie diese Klasse, obwohl sie unvollständig ist. Es ist jetzt an der Zeit, diese Klasse abzuschließen:
Doppelklicken Sie auf das ShelfKeeper-Skript im Ordner "Skripts", um es mit Visual Studio 2017 zu öffnen.
Ersetzen Sie den gesamten code, der im Skript vorhanden ist, 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); } }
Achten Sie darauf, ihre Änderungen in Visual Studio zu speichern, 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. Eine Erläuterung finden Sie unten, falls erforderlich:
Öffnen Sie das Spawn Point-Array innerhalb des ShelfKeeper-Komponentenskripts , indem Sie mit der linken Maustaste darauf klicken. Ein Unterabschnitt wird als "Größe" 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 Steckplätze erstellt.
Erweitern Sie innerhalb der Hierarchie das Time Display-Objekt (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 die Hauptkamera im Hierarchiebereich aus. Ziehen Sie die Objekte "Datum " und "Uhrzeit " aus dem Hierarchiebereich in den Bereich "Datumstext " und "Uhrzeittext " innerhalb des Inspektors der Hauptkamera in der Komponente "ShelfKeeper ".
Ziehen Sie die Spawn-Punkte aus dem Hierarchiebereich (unter dem Shelf-Objekt) auf die 3 Elementverweisziele unter dem Spawn Point-Array, wie in der Abbildung dargestellt.
Kapitel 9 – Erstellen der ProductPrediction-Klasse
Die nächste Klasse, die Sie erstellen werden, ist die ProductPrediction-Klasse .
Diese Klasse ist für Folgendes verantwortlich:
Abfragen der Machine Learning Service-Instanz , die das aktuelle Datum und die aktuelle Uhrzeit bereitstellt.
Deserialisieren der JSON-Antwort in verwendbare Daten.
Interpretieren der Daten, Abrufen der 3 empfohlenen Produkte.
Aufrufen der ShelfKeeper-Klassenmethoden zum Anzeigen der Daten in der Szene.
So erstellen Sie diese Klasse:
Wechseln Sie im Projektbereich zum Ordner "Skripts".
Klicken Sie mit der rechten Maustaste in den Ordner, C#-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 erneut 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 der ProductPrediction-Klasse die folgenden beiden 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 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 oberhalb des vorherigen Codes hinzu (sodass sich der JSON-bezogene Code am Ende des Skripts befindet, unter allen anderen Code und nicht mehr):
/// <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
Stellen Sie sicher, dass Sie den Primärschlüssel und den Anforderungsantwortendpunkt aus dem Machine Learning-Portal hier in die Variablen einfügen. Die folgenden Bilder zeigen, von 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 wird:
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 das Datum und die Uhrzeit von Windows sammelt und in ein Format konvertiert, mit dem unser Machine Learning Experiment zum Vergleichen mit den in der Tabelle gespeicherten Daten verwendet werden kann.
/// <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 dem Machine Learning-Endpunkt das aktuelle Datum und die aktuelle Uhrzeit mitteilen und eine Antwort im JSON-Format erhalten soll.
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 die Deserialisierung der JSON-Antwort verantwortlich ist, und das Ergebnis der Deserialisierung an die ShelfKeeper-Klasse kommuniziert. Dieses Ergebnis wird die Namen der drei Elemente sein, die vorhergesagt wurden, die meisten zu dem aktuellen Datum und zur aktuellen Uhrzeit zu verkaufen. 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 Skriptordner auf das Hauptkameraobjekt .
Speichern Sie Ihre Szene und projektDatei >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 "Szenen speichern">klicken.
Wechseln Sie zu " Dateibuildeinstellungen>".
Aktivieren Sie das Kontrollkästchen "Unity C#-Projekte " (dies ist wichtig, da es Ihnen ermöglicht, die Klassen nach Abschluss des Builds zu bearbeiten).
Klicken Sie auf " Offene Szenen hinzufügen",
Klicken Sie auf Erstellen.
Sie werden aufgefordert, den Ordner auszuwählen, in dem Sie die Lösung erstellen möchten.
Erstellen Sie einen BUILDS-Ordner , und erstellen Sie in diesem Ordner einen anderen Ordner mit einem geeigneten Namen Ihrer Wahl.
Klicken Sie auf Ihren neuen Ordner, und klicken Sie dann auf "Ordner auswählen", um den Build an diesem Speicherort zu starten.
Nachdem Unity das Erstellen abgeschlossen hat (es kann einige Zeit dauern), öffnet es ein Explorer Fenster an der Position Ihres Builds (überprüfen Sie Ihre Taskleiste, da sie möglicherweise nicht immer über Ihren Fenstern angezeigt wird, sondern Sie über dem Hinzufügen eines neuen Fensters informiert).
Kapitel 11 – Bereitstellen Ihrer Anwendung
So stellen Sie Ihre Anwendung bereit:
Navigieren Sie zu Ihrem neuen Unity-Build (dem App-Ordner ), und öffnen Sie die Projektmappendatei mit Visual Studio.
Wenn Visual Studio geöffnet ist, müssen Sie NuGet-Pakete wiederherstellen, die durch Klicken mit der rechten Maustaste auf Ihre MachineLearningLab_Build-Lösung erfolgen können, aus dem Projektmappen-Explorer (rechts neben Visual Studio gefunden), und klicken Sie dann auf "NuGet-Pakete wiederherstellen":
Wählen Sie in der Lösungskonfiguration "Debuggen" aus.
Wählen Sie in der Lösungsplattform x86, lokaler Computer aus.
Für Microsoft HoloLens ist es möglicherweise einfacher, dies auf Remotecomputer festzulegen, sodass Sie nicht an Ihren Computer angebunden sind. Sie müssen jedoch auch die folgenden Schritte ausführen:
- Kennen Sie die IP-Adresse Ihrer HoloLens, die sich in den erweiterten Optionen für Netzwerkeinstellungen > und Internet > wi-Fi > befindet. IPv4 ist die Adresse, die Sie verwenden sollten.
- Stellen Sie sicher, dass der Entwicklermodus aktiviert ist; finden Sie in "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 aus der Initialisierung werden die daten, die Sie in Azure eingerichtet haben, abgerufen. Die Daten werden in Ihrer Anwendung deserialisiert, und die drei wichtigsten Ergebnisse für Ihr aktuelles Datum und Ihre aktuelle Uhrzeit werden visuell bereitgestellt, als drei Modelle auf der Bank.
Ihre fertige Machine Learning-Anwendung
Herzlichen Glückwunsch, Sie haben eine Mixed Reality-App erstellt, die azure Machine Learning nutzt, um Datenvorhersagen zu erstellen und in Ihrer Szene anzuzeigen.
Übung
Übung 1
Experimentieren Sie mit der Sortierreihenfolge Ihrer Anwendung, und lassen Sie die drei untersten Vorhersagen im Regal erscheinen, da diese Daten möglicherweise auch nützlich wären.
Übung 2
Verwenden von Azure-Tabellen füllen Sie eine neue Tabelle mit Wetterinformationen auf, und erstellen Sie mithilfe der Daten ein neues Experiment.