Urządzenia HoloLens (1. generacji) i Azure 307: Uczenie maszynowe
Uwaga
Samouczki akademii rzeczywistości mieszanej zostały zaprojektowane z myślą o urządzeniach HoloLens (1. generacji) i zestawach słuchawkowych immersyjnych rzeczywistości mieszanej. W związku z tym uważamy, że ważne jest pozostawienie tych samouczków na miejscu dla deweloperów, którzy nadal szukają wskazówek dotyczących opracowywania tych urządzeń. Te samouczki nie zostaną zaktualizowane przy użyciu najnowszych zestawów narzędzi ani interakcji używanych dla urządzenia HoloLens 2. Będą one utrzymywane w celu kontynuowania pracy na obsługiwanych urządzeniach. W przyszłości zostanie opublikowana nowa seria samouczków, które pokażą, jak opracowywać urządzenia HoloLens 2. To powiadomienie zostanie zaktualizowane za pomocą linku do tych samouczków po ich opublikowaniu.
Z tego kursu dowiesz się, jak dodać możliwości usługi Machine Learning (ML) do aplikacji rzeczywistości mieszanej przy użyciu usługi Azure Machine Learning Studio (wersja klasyczna).
Azure Machine Learning Studio (wersja klasyczna) to usługa firmy Microsoft, która udostępnia deweloperom dużą liczbę algorytmów uczenia maszynowego, które mogą pomóc w danych wejściowych, wyjściowych, przygotowywania i wizualizacji. Na podstawie tych składników można utworzyć eksperyment analizy predykcyjnej, wykonać iterowanie i użyć go do wytrenowania modelu. Po zakończeniu trenowania możesz sprawić, że model działa w chmurze platformy Azure, aby następnie ocenić nowe dane. Aby uzyskać więcej informacji, odwiedź stronę usługi Azure Machine Learning Studio (wersja klasyczna).
Po ukończeniu tego kursu będziesz mieć aplikację immersywnego zestawu słuchawkowego rzeczywistości mieszanej i nauczysz się wykonywać następujące czynności:
- Podaj tabelę danych sprzedaży w portalu usługi Azure Machine Learning Studio (klasycznym) i zaprojektuj algorytm w celu przewidywania przyszłej sprzedaży popularnych elementów.
- Utwórz projekt aparatu Unity, który może odbierać i interpretować dane przewidywania z usługi ML.
- Wyświetl dane predykacji wizualnie w projekcie aparatu Unity, udostępniając na półce najbardziej popularne elementy sprzedaży.
W aplikacji należy do Ciebie, jak zintegrować wyniki z projektem. Ten kurs został zaprojektowany, aby nauczyć cię, jak zintegrować usługę platformy Azure z projektem aparatu Unity. Twoim zadaniem jest wykorzystanie wiedzy uzyskanych z tego kursu w celu ulepszenia aplikacji rzeczywistości mieszanej.
Ten kurs jest samodzielnym samouczkiem, który nie obejmuje bezpośrednio żadnych innych laboratoriów rzeczywistości mieszanej.
Obsługa urządzeń
Kurs | HoloLens | Immersyjne zestawy nagłowne |
---|---|---|
MR i Azure 307: Uczenie maszynowe | ✔️ | ✔️ |
Uwaga
Chociaż ten kurs koncentruje się głównie na zestawach nagłownych immersywnych windows Mixed Reality (VR), możesz również zastosować to, czego nauczysz się w tym kursie do urządzenia Microsoft HoloLens. Zgodnie z kursem zobaczysz notatki dotyczące wszelkich zmian, które mogą być konieczne do zastosowania w celu obsługi urządzenia HoloLens. Podczas korzystania z urządzenia HoloLens można zauważyć echo podczas przechwytywania głosu.
Wymagania wstępne
Uwaga
Ten samouczek jest przeznaczony dla deweloperów, którzy mają podstawowe doświadczenie w językach Unity i C#. Należy również pamiętać, że wymagania wstępne i pisemne instrukcje zawarte w tym dokumencie reprezentują to, co zostało przetestowane i zweryfikowane w momencie pisania (maj 2018 r.). Możesz bezpłatnie korzystać z najnowszego oprogramowania, jak wymieniono w artykule dotyczącym instalacji narzędzi, choć nie należy zakładać, że informacje zawarte w tym kursie doskonale pasują do tego, co znajdziesz w nowszym oprogramowaniu niż wymienione poniżej.
Na potrzeby tego kursu zalecamy następujące oprogramowanie i sprzęt:
- Komputer deweloperzy zgodny z windows Mixed Reality na potrzeby programowania immersyjnego zestawu słuchawkowego (VR)
- Windows 10 Fall Creators Update (lub nowszy) z włączonym trybem dewelopera
- Najnowszy zestaw SDK systemu Windows 10
- Unity 2017.4
- Visual Studio 2017
- Zestaw słuchawkowy windows Mixed Reality immersywny (VR) lub Microsoft HoloLens z włączonym trybem dewelopera
- Dostęp do Internetu dla konfiguracji platformy Azure i pobierania danych uczenia maszynowego
Przed rozpoczęciem
Aby uniknąć problemów podczas tworzenia tego projektu, zdecydowanie zaleca się utworzenie projektu wymienionego w tym samouczku w folderze głównym lub niemal głównym (długie ścieżki folderów mogą powodować problemy w czasie kompilacji).
Rozdział 1 — Konfiguracja konta usługi Azure Storage
Aby korzystać z interfejsu API usługi Azure Translator, należy skonfigurować wystąpienie usługi, które ma zostać udostępnione aplikacji.
Zaloguj się do Portalu Azure.
Uwaga
Jeśli nie masz jeszcze konta platformy Azure, musisz je utworzyć. Jeśli obserwujesz ten samouczek w sytuacji w klasie lub laboratorium, poproś instruktora lub jednego z opiekunów o pomoc przy konfigurowaniu nowego konta.
Po zalogowaniu się kliknij pozycję Konta magazynu w menu po lewej stronie.
Uwaga
Wyraz Nowy mógł zostać zastąpiony ciągiem Create a resource (Utwórz zasób) w nowszych portalach.
Na karcie Konta magazynu kliknij pozycję Dodaj.
W panelu Tworzenie konta magazynu:
Wstaw nazwę konta, pamiętaj, że to pole akceptuje tylko cyfry i małe litery.
W obszarze Model wdrażania wybierz pozycję Resource Manager.
W polu Rodzaj konta wybierz pozycję Magazyn (ogólnego przeznaczenia w wersji 1).
W obszarze Wydajność wybierz opcję Standardowa.
W obszarze Replikacja wybierz pozycję Magazyn geograficznie nadmiarowy z dostępem do odczytu (RA-GRS).
Pozostaw opcję Wymagany bezpieczny transfer jako Wyłączony.
Wybierz subskrypcję.
Wybierz grupę zasobów lub utwórz nową. Grupa zasobów umożliwia monitorowanie, kontrolowanie dostępu, aprowizowania i zarządzania rozliczeniami dla kolekcji zasobów platformy Azure. Zaleca się zachowanie wszystkich usług platformy Azure skojarzonych z jednym projektem (np. takich jak te laboratoria) w ramach wspólnej grupy zasobów.
Jeśli chcesz dowiedzieć się więcej na temat grup zasobów platformy Azure, odwiedź artykuł grupy zasobów.
Określ lokalizację dla grupy zasobów (jeśli tworzysz nową grupę zasobów). Lokalizacja najlepiej znajdować się w regionie, w którym aplikacja będzie uruchamiana. Niektóre zasoby platformy Azure są dostępne tylko w niektórych regionach.
Musisz również potwierdzić, że rozumiesz warunki i postanowienia zastosowane do tej usługi.
Po kliknięciu pozycji Utwórz trzeba będzie poczekać na utworzenie usługi. Może to potrwać minutę.
Po utworzeniu wystąpienia usługi w portalu zostanie wyświetlone powiadomienie.
Rozdział 2 — Azure Machine Learning Studio (wersja klasyczna)
Aby korzystać z usługi Azure Machine Learning, należy skonfigurować wystąpienie usługi Machine Learning, które ma zostać udostępnione aplikacji.
W witrynie Azure Portal kliknij pozycję Nowy w lewym górnym rogu i wyszukaj pozycję Obszar roboczy usługi Machine Learning Studio, naciśnij Enter.
Nowa strona zawiera opis usługi Obszaru roboczego usługi Machine Learning Studio. W lewym dolnym rogu tego monitu kliknij przycisk Utwórz , aby utworzyć skojarzenie z tą usługą.
Po kliknięciu pozycji Utwórz zostanie wyświetlony panel, w którym musisz podać pewne szczegóły dotyczące nowej usługi Machine Learning Studio:
Wstaw żądaną nazwę obszaru roboczego dla tego wystąpienia usługi.
Wybierz subskrypcję.
Wybierz grupę zasobów lub utwórz nową. Grupa zasobów umożliwia monitorowanie, kontrolowanie dostępu, aprowizowania i zarządzania rozliczeniami dla kolekcji zasobów platformy Azure. Zaleca się zachowanie wszystkich usług platformy Azure skojarzonych z jednym projektem (np. takich jak te laboratoria) w ramach wspólnej grupy zasobów.
Jeśli chcesz dowiedzieć się więcej na temat grup zasobów platformy Azure, odwiedź artykuł grupy zasobów.
Określ lokalizację dla grupy zasobów (jeśli tworzysz nową grupę zasobów). Lokalizacja najlepiej znajdować się w regionie, w którym aplikacja będzie uruchamiana. Niektóre zasoby platformy Azure są dostępne tylko w niektórych regionach. Należy użyć tej samej grupy zasobów, która była używana do tworzenia usługi Azure Storage w poprzednim rozdziale.
W sekcji Konto magazynu kliknij pozycję Użyj istniejącej, a następnie kliknij menu rozwijane, a następnie kliknij konto magazynu utworzone w ostatnim rozdziale.
Wybierz odpowiednią warstwę cenową Obszar roboczy z menu rozwijanego.
W sekcji Plan usługi sieci Web kliknij pozycję Utwórz nową, a następnie wstaw nazwę w polu tekstowym.
W sekcji Warstwa cenowa planu usługi internetowej wybierz wybraną warstwę cenową. Warstwa testowania programowania o nazwie DEVTEST Standard powinna być dostępna bezpłatnie.
Musisz również potwierdzić, że rozumiesz warunki i postanowienia zastosowane do tej usługi.
Kliknij pozycję Utwórz.
Po kliknięciu pozycji Utwórz trzeba będzie poczekać na utworzenie usługi. Może to potrwać minutę.
Po utworzeniu wystąpienia usługi w portalu zostanie wyświetlone powiadomienie.
Kliknij powiadomienie, aby zapoznać się z nowym wystąpieniem usługi.
Kliknij przycisk Przejdź do zasobu w powiadomieniu, aby zapoznać się z nowym wystąpieniem usługi.
Na wyświetlonej stronie w sekcji Dodatkowe linki kliknij pozycję Uruchom usługę Machine Learning Studio, co spowoduje przekierowanie przeglądarki do portalu usługi Machine Learning Studio .
Użyj przycisku Zaloguj się w prawym górnym rogu lub w środku, aby zalogować się do usługi Machine Learning Studio (klasycznej).
Rozdział 3 — Machine Learning Studio (wersja klasyczna): Konfiguracja zestawu danych
Jednym ze sposobów działania algorytmów uczenia maszynowego jest analizowanie istniejących danych, a następnie próba przewidywania przyszłych wyników na podstawie istniejącego zestawu danych. Zazwyczaj oznacza to, że im więcej istniejących danych, tym lepiej algorytm będzie przewidywał przyszłe wyniki.
Na potrzeby tego kursu udostępniono przykładową tabelę o nazwie ProductsTableCSV i można je pobrać tutaj.
Ważne
Powyższy plik .zip zawiera pliki ProductsTableCSV i unitypackage, które będą potrzebne w rozdziale 6. Ten pakiet jest również udostępniany w tym rozdziale, choć oddzielony od pliku CSV.
Ten przykładowy zestaw danych zawiera rekord najlepiej sprzedających się obiektów w każdej godzinie każdego dnia roku 2017.
Na przykład w dniu 1 z 2017 r., o godzinie 13:00 (godzina 13), najlepiej sprzedającym się produktem było sól i pieprz.
Ta przykładowa tabela zawiera 9998 wpisów.
Wróć do portalu usługi Machine Learning Studio (klasycznego) i dodaj tę tabelę jako zestaw danych dla swojego uczenia maszynowego. W tym celu kliknij przycisk + Nowy w lewym dolnym rogu ekranu.
Sekcja pojawi się z dołu, a w niej znajduje się panel nawigacyjny po lewej stronie. Kliknij pozycję Zestaw danych, a następnie z prawej strony pozycji Z pliku lokalnego.
Przekaż nowy zestaw danych , wykonując następujące kroki:
Zostanie wyświetlone okno przekazywania, w którym można przeglądać dysk twardy dla nowego zestawu danych.
Po zaznaczeniu i powrocie do okna przekazywania pozostaw pole wyboru niezaznaczone.
W polu tekstowym poniżej wprowadź ProductsTableCSV.csv jako nazwę zestawu danych (choć należy go dodać automatycznie).
Korzystając z menu rozwijanego dla pozycji Typ, wybierz pozycję Ogólny plik CSV z nagłówkiem (.csv).
Naciśnij znacznik w prawym dolnym rogu okna przekazywania, a zestaw danych zostanie przekazany.
Rozdział 4 — Machine Learning Studio (wersja klasyczna): Eksperyment
Przed utworzeniem systemu uczenia maszynowego należy utworzyć eksperyment, aby zweryfikować teorię danych. W wynikach będziesz wiedzieć, czy potrzebujesz większej ilości danych, czy też nie ma korelacji między danymi a możliwym wynikiem.
Aby rozpocząć tworzenie eksperymentu:
Kliknij ponownie przycisk + Nowy w lewym dolnym rogu strony, a następnie kliknij pozycję Eksperymentuj>pusty eksperyment.
Zostanie wyświetlona nowa strona z pustym eksperymentem:
Z panelu po lewej stronie rozwiń pozycję Zapisane zestawy danych Moje zestawy> danych i przeciągnij element ProductsTableCSV na kanwę eksperymentu.
W panelu po lewej stronie rozwiń pozycję Przykład przekształcania>danych i Podziel. Następnie przeciągnij element Split Data (Podział danych) na kanwę eksperymentu. Element Split Data (Podział danych) podzieli zestaw danych na dwie części. Jedna część, której użyjesz do trenowania algorytmu uczenia maszynowego. Druga część zostanie użyta do oceny dokładności wygenerowanego algorytmu.
W panelu po prawej stronie (podczas wybierania elementu Podziel dane na kanwie) zmodyfikuj pozycję Ułamek wierszy w pierwszym wyjściowym zestawie danych na 0,7. Spowoduje to podzielenie danych na dwie części, pierwsza część będzie wynosić 70% danych, a druga część to pozostałe 30%. Aby upewnić się, że dane są podzielone losowo, upewnij się, że pole wyboru Losowe dzielenie pozostaje zaznaczone.
Przeciągnij połączenie z podstawy elementu ProductsTableCSV na kanwie do góry elementu Split Data (Podział danych). Spowoduje to połączenie elementów i wysłanie danych wyjściowych zestawu danych ProductsTableCSV (danych) do danych wejściowych Split Data (Podział danych).
W panelu Eksperymenty po lewej stronie rozwiń węzeł Uczenie usługi Machine Learning>. Przeciągnij element Train Model (Trenowanie modelu) do obszaru roboczego Experiment (Eksperyment). Kanwa powinna wyglądać tak samo jak poniżej.
W lewym dolnym rogu elementu Split Data (Podział danych) przeciągnij połączenie z prawym górnym rogu elementu Train Model (Trenowanie modelu). Pierwszy podział na 70% z zestawu danych będzie używany przez model trenowania do trenowania algorytmu.
Wybierz element Train Model (Trenowanie modelu) na kanwie, a następnie w panelu Właściwości (po prawej stronie okna przeglądarki) kliknij przycisk Launch column selector (Uruchom selektor kolumn).
W polu tekstowym wpisz product , a następnie naciśnij Enter, produkt zostanie ustawiony jako kolumna do trenowania przewidywań. Następnie kliknij znacznik w prawym dolnym rogu, aby zamknąć okno dialogowe wyboru.
Zamierzasz wytrenować algorytm regresji logistycznej w wielu klasach, aby przewidzieć najbardziej sprzedany produkt na podstawie godziny dnia i daty. Ten dokument wykracza poza zakres tego dokumentu, aby wyjaśnić szczegóły różnych algorytmów dostarczonych przez usługę Azure Machine Learning Studio, jednak więcej informacji można znaleźć w ściągawce algorytmu uczenia maszynowego
W panelu elementy eksperymentu po lewej stronie rozwiń węzeł Machine Learning>Initialize Model Classification (Inicjowanie klasyfikacji modeli>) i przeciągnij element Multiclass Logistics Regression (Regresja logistyczna) na kanwę eksperymentu.
Połącz dane wyjściowe z dołu wieloklasowej regresji logistycznej z lewym górnym wejściem elementu Train Model (Trenowanie modelu ).
Na liście elementów eksperymentu w panelu po lewej stronie rozwiń węzeł Wynik uczenia>maszynowego i przeciągnij element Score Model (Generowanie wyników dla modelu) na kanwę.
Połącz dane wyjściowe z dolnej części modułu Train Model (Trenowanie modelu) z lewym górnymi danymi wejściowymi score model (Generowanie wyników dla modelu).
Połącz prawe dane wyjściowe z obszaru Split Data ( Podział danych) z prawym górnym wejściem elementu Score Model ( Generowanie wyników dla modelu ).
Na liście elementów Experiment (Eksperyment) w panelu po lewej stronie rozwiń węzeł Machine Learning Evaluate (Ocena uczenia>maszynowego) i przeciągnij element Evaluate Model (Ocena modelu) na kanwę.
Połącz dane wyjściowe z modelu Score Model ( Generowanie wyników dla modelu ) z lewym górnym wejściem modelu Evaluate Model (Ocena modelu).
Utworzono swój pierwszy eksperyment usługi Machine Learning. Teraz możesz zapisać i uruchomić eksperyment. W menu w dolnej części strony kliknij przycisk Zapisz , aby zapisać eksperyment, a następnie kliknij przycisk Uruchom , aby rozpocząć eksperyment.
Stan eksperymentu można zobaczyć w prawym górnym rogu kanwy. Poczekaj chwilę na zakończenie eksperymentu.
Jeśli masz duży (rzeczywisty) zestaw danych, prawdopodobnie eksperyment może potrwać kilka godzin.
Kliknij prawym przyciskiem myszy element Evaluate Model (Ocena modelu) na kanwie, a następnie w menu kontekstowym umieść wskaźnik myszy na obszarze Wyniki oceny, a następnie wybierz pozycję Visualize (Wizualizacja).
Wyniki oceny zostaną wyświetlone z przewidywanymi wynikami w porównaniu z rzeczywistymi wynikami. W tym celu użyto 30% oryginalnego zestawu danych, który został wcześniej podzielony na potrzeby oceny modelu. Wyniki nie są świetne, najlepiej, aby w każdym wierszu był wyróżniony element w kolumnach.
Zamknij wyniki.
Aby korzystać z nowo wytrenowanego modelu uczenia maszynowego, musisz udostępnić go jako usługę internetową. W tym celu kliknij element menu Skonfiguruj usługę internetową w menu w dolnej części strony, a następnie kliknij pozycję Predykcyjna usługa sieci Web.
Zostanie utworzona nowa karta, a model trenowania scalony w celu utworzenia nowej usługi internetowej.
W menu w dolnej części strony kliknij przycisk Zapisz, a następnie kliknij przycisk Uruchom. Stan zostanie zaktualizowany w prawym górnym rogu kanwy eksperymentu.
Po zakończeniu działania w dolnej części strony zostanie wyświetlony przycisk Wdróż usługę internetową. Wszystko jest gotowe do wdrożenia usługi internetowej. Kliknij pozycję Wdróż usługę internetową (klasyczną) w menu w dolnej części strony.
W przeglądarce może pojawić się monit o zezwolenie na wyskakujące okienko, które powinno być dozwolone, ale może być konieczne ponowne naciśnięcie przycisku Wdróż usługę internetową, jeśli strona wdrażania nie jest wyświetlana.
Po utworzeniu eksperymentu nastąpi przekierowanie do strony pulpitu nawigacyjnego, na której będzie wyświetlany klucz interfejsu API. Skopiuj go do Notatnika na chwilę, będzie on potrzebny w kodzie bardzo szybko. Po zanotowanie klucza interfejsu API kliknij przycisk REQUEST/RESPONSE w sekcji Domyślny punkt końcowy poniżej klucza.
Uwaga
Jeśli klikniesz pozycję Testuj na tej stronie, będzie można wprowadzić dane wejściowe i wyświetlić dane wyjściowe. Wprowadź dzień i godzinę. Pozostaw pusty wpis produktu . Następnie kliknij przycisk Potwierdź . Dane wyjściowe w dolnej części strony będą pokazywać dane JSON reprezentujące prawdopodobieństwo wyboru każdego produktu.
Zostanie otwarta nowa strona internetowa zawierająca instrukcje i kilka przykładów dotyczących struktury żądania wymaganej przez usługę Machine Learning Studio (klasyczną). Skopiuj identyfikator URI żądania wyświetlany na tej stronie do Notatnika.
Masz teraz utworzony system uczenia maszynowego, który zapewnia najbardziej prawdopodobny produkt do sprzedaży na podstawie historycznych danych zakupów skorelowanych z godziną dnia i dnia roku.
Aby wywołać usługę internetową, musisz mieć adres URL punktu końcowego usługi i klucz interfejsu API dla usługi. Kliknij kartę Użycie w górnym menu.
Na stronie Informacje o użyciu zostaną wyświetlone informacje potrzebne do wywołania usługi internetowej z kodu. Wykonaj kopię klucza podstawowego i adresu URL odpowiedzi na żądanie. Będą one potrzebne w następnym rozdziale.
Rozdział 5 . Konfigurowanie projektu aparatu Unity
Skonfiguruj i przetestuj immersywny zestaw słuchawkowy rzeczywistości mieszanej.
Uwaga
Na potrzeby tego kursu nie będzie wymagane kontrolery ruchu. Jeśli potrzebujesz obsługi konfigurowania immersyjnego zestawu słuchawkowego, kliknij tutaj.
Otwórz środowisko Unity i utwórz nowy projekt aparatu Unity o nazwie MR_MachineLearning. Upewnij się, że typ projektu jest ustawiony na wartość 3D.
Po otwarciu aparatu Unity warto sprawdzić, czy domyślny edytor skryptów jest ustawiony na program Visual Studio. Przejdź do pozycji Edytuj>preferencje, a następnie w nowym oknie przejdź do pozycji Narzędzia zewnętrzne. Zmień edytor skryptów zewnętrznych na Visual Studio 2017. Zamknij okno Preferencje.
Następnie przejdź do pozycji Ustawienia kompilacji pliku>i przełącz platformę na platforma uniwersalna systemu Windows, klikając przycisk Przełącz platformę.
Upewnij się również, że:
Urządzenie docelowe jest ustawione na dowolne urządzenie.
W przypadku urządzenia Microsoft HoloLens ustaw wartość Urządzenie docelowe na HoloLens.
Typ kompilacji jest ustawiony na D3D.
Zestaw SDK jest ustawiony na wartość Najnowsza zainstalowana.
Dla wersji programu Visual Studio jest ustawiona wartość Najnowsza zainstalowana.
Polecenie Build and Run (Kompilacja i uruchamianie ) ma wartość Local Machine (Maszyna lokalna).
Nie martw się o skonfigurowanie scen w tej chwili, ponieważ są one udostępniane później.
Pozostałe ustawienia powinny być na razie pozostawione jako domyślne.
W oknie Ustawienia kompilacji kliknij przycisk Ustawienia odtwarzacza, spowoduje to otwarcie powiązanego panelu w obszarze, w którym znajduje się inspektor.
W tym panelu należy zweryfikować kilka ustawień:
Na karcie Inne ustawienia:
Wersja środowiska uruchomieniowego skryptów powinna być eksperymentalna (odpowiednik platformy.NET 4.6)
Zaplecze skryptów powinno mieć wartość .NET
Poziom zgodności interfejsu API powinien mieć wartość .NET 4.6
Na karcie Ustawienia publikowania w obszarze Możliwości sprawdź:
InternetClient
W dalszej części panelu w obszarze Ustawienia XR (znaleziono poniżej ustawień publikowania), zaznacz pole Virtual Reality Supported (Obsługiwane w rzeczywistości wirtualnej), upewnij się, że dodano zestaw WINDOWS Mixed Reality SDK
Po powrocie do ustawień kompilacji Projekty języka C# środowiska Unity nie są już wyszarzone; zaznacz pole wyboru obok tego.
Zamknij okno Build Settings (Ustawienia kompilacji).
Zapisz projekt (PLIK > ZAPISZ PROJEKT).
Rozdział 6 . Importowanie pakietu APARATU UNITY MLProducts
Na potrzeby tego kursu należy pobrać pakiet zasobów aparatu Unity o nazwie Azure-MR-307.unitypackage. Ten pakiet zawiera scenę ze wszystkimi obiektami w tym wstępnie skompilowanymi, dzięki czemu można skupić się na tym, aby wszystko działało. Skrypt ShelfKeeper jest dostarczany, choć przechowuje tylko zmienne publiczne, na potrzeby struktury konfiguracji sceny. Należy wykonać wszystkie inne sekcje.
Aby zaimportować ten pakiet:
Po wybraniu pulpitu nawigacyjnego aparatu Unity kliknij pozycję Assets (Zasoby ) w menu w górnej części ekranu, a następnie kliknij pozycję Import Package (Importuj pakiet), Custom Package (Pakiet niestandardowy).
Użyj selektora plików, aby wybrać pakiet Azure-MR-307.unitypackage , a następnie kliknij przycisk Otwórz.
Zostanie wyświetlona lista składników tego zasobu. Potwierdź importowanie, klikając pozycję Importuj.
Po zakończeniu importowania zauważysz, że niektóre nowe foldery zostały wyświetlone w panelu projektu aparatu Unity. Są to modele 3D i odpowiednie materiały, które są częścią wstępnie wykonanej sceny, nad którą będziesz pracować. W tym kursie napiszesz większość kodu.
W folderze Project Panel kliknij folder Sceny i kliknij dwukrotnie scenę wewnątrz (o nazwie MR_MachineLearningScene). Zostanie otwarta scena (zobacz obraz poniżej). Jeśli brakuje czerwonych diamentów, po prostu kliknij przycisk Gizmos , w prawym górnym rogu Panelu gier.
Rozdział 7 . Sprawdzanie bibliotek DLL w a unity
Aby korzystać z bibliotek JSON (używanych do serializacji i deserializacji), biblioteka DLL Newtonsoft została zaimplementowana wraz z wprowadzonym pakietem. Biblioteka powinna mieć poprawną konfigurację, chociaż warto ją sprawdzić (szczególnie jeśli masz problemy z kodem, który nie działa).
Aby to zrobić:
Kliknij lewym przyciskiem myszy plik Newtonsoft w folderze Plugins i przyjrzyj się panelowi Inspector (Inspektor). Upewnij się, że opcja Dowolna platforma jest zaznaczona. Przejdź do karty uwP, a także upewnij się, że nie przetwarzaj jest zaznaczona.
Rozdział 8 . Tworzenie klasy ShelfKeeper
Klasa ShelfKeeper hostuje metody kontrolujące interfejs użytkownika i produkty zduplikowane w scenie.
W ramach zaimportowanego pakietu otrzymasz tę klasę, choć jest niekompletna. Nadszedł czas na ukończenie tej klasy:
Kliknij dwukrotnie skrypt ShelfKeeper w folderze Scripts, aby otworzyć go za pomocą programu Visual Studio 2017.
Zastąp cały kod istniejący w skrypcie następującym kodem, który ustawia godzinę i datę i ma metodę wyświetlania produktu.
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); } }
Przed powrotem do aparatu Unity pamiętaj o zapisaniu zmian w programie Visual Studio.
Wróć do edytora aparatu Unity, sprawdź, czy klasa ShelfKeeper wygląda następująco:
Ważne
Jeśli skrypt nie ma elementów docelowych odwołania (tj. Date (Text Mesh)), po prostu przeciągnij odpowiednie obiekty z Panelu hierarchii do pól docelowych. Zobacz poniżej, aby uzyskać wyjaśnienie, jeśli jest to konieczne:
Otwórz tablicę Spawn Point w skryscie składnika ShelfKeeper , klikając ją lewym przyciskiem myszy. Zostanie wyświetlona sekcja podrzędna o nazwie Size (Rozmiar), która wskazuje rozmiar tablicy. Wpisz 3 w polu tekstowym obok pozycji Rozmiar i naciśnij Enter, a trzy miejsca zostaną utworzone poniżej.
W hierarchii rozwiń obiekt Czas wyświetlania (klikając strzałkę obok niej po lewej stronie). Następnie kliknij kamerę główną z hierarchii, aby inspektor wyświetlał jego informacje.
Wybierz kamerę główną w panelu hierarchii. Przeciągnij obiekty Daty i godziny z panelu hierarchii do miejsc tekstowych daty i godziny w inspektorze głównego aparatu w składniku ShelfKeeper.
Przeciągnij punkty spawn z panelu hierarchii (pod obiektem Półka ) do elementów docelowych odwołań 3 elementów poniżej tablicy Spawn Point , jak pokazano na ilustracji.
Rozdział 9 — Tworzenie klasy ProductPrediction
Następną klasą, którą utworzysz, jest klasa ProductPrediction .
Ta klasa jest odpowiedzialna za:
Wykonywanie zapytań względem wystąpienia usługi Machine Learning Service , podając bieżącą datę i godzinę.
Deserializowanie odpowiedzi JSON na dane użyteczne.
Interpretowanie danych, pobieranie 3 zalecanych produktów.
Wywołanie metod klasy ShelfKeeper w celu wyświetlenia danych w scenie.
Aby utworzyć tę klasę:
Przejdź do folderu Scripts (Skrypty ) w panelu projektu.
Kliknij prawym przyciskiem myszy wewnątrz folderu Utwórz >skrypt języka C#. Wywołaj skrypt ProductPrediction.
Kliknij dwukrotnie nowy skrypt ProductPrediction , aby otworzyć go za pomocą programu Visual Studio 2017.
Jeśli zostanie wyświetlone okno dialogowe Wykryto modyfikację pliku, kliknij pozycję *Załaduj ponownie rozwiązanie.
Dodaj następujące przestrzenie nazw na początku klasy 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;
Wewnątrz klasy ProductPrediction wstaw następujące dwa obiekty składające się z wielu klas zagnieżdżonych. Te klasy służą do serializacji i deserializacji kodu JSON dla usługi Machine Learning Service.
/// <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; } }
Następnie dodaj następujące zmienne powyżej poprzedniego kodu (aby kod pokrewny JSON był w dolnej części skryptu, poniżej wszystkich innych kodów i poza tym):
/// <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;
Ważne
Pamiętaj, aby wstawić klucz podstawowy i punkt końcowy odpowiedzi na żądanie z portalu usługi Machine Learning do zmiennych w tym miejscu. Na poniższych obrazach pokazano, skąd zostałby pobrany klucz i punkt końcowy.
Wstaw ten kod w metodzie Start(). Metoda Start() jest wywoływana, gdy klasa inicjuje:
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)); }
Poniżej przedstawiono metodę, która zbiera datę i godzinę z systemu Windows i konwertuje ją na format, którego nasz eksperyment usługi Machine Learning może użyć do porównania z danymi przechowywanymi w tabeli.
/// <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(); }
Możesz usunąć metodę Update(), ponieważ ta klasa nie będzie jej używać.
Dodaj następującą metodę, która przekaże bieżącą datę i godzinę do punktu końcowego usługi Machine Learning i otrzyma odpowiedź w formacie JSON.
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); } }
Dodaj następującą metodę, która jest odpowiedzialna za deserializowanie odpowiedzi JSON i przekazanie wyniku deserializacji do klasy ShelfKeeper . Ten wynik będzie nazwami trzech pozycji przewidywanych do sprzedaży najwięcej w bieżącej dacie i godzinie. Wstaw poniższy kod do klasy ProductPrediction poniżej poprzedniej metody.
/// <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(); }
Zapisz program Visual Studio i wróć do środowiska Unity.
Przeciągnij skrypt klasy ProductPrediction z folderu Script do obiektu Main Camera .
Zapisz scenę i projekt Zapisz>scenę/Plik>zapisz projekt.
Rozdział 10 — Tworzenie rozwiązania platformy UNIWERSALNEJ systemu Windows
Nadszedł czas, aby skompilować projekt jako rozwiązanie platformy UWP, aby można było go uruchomić jako autonomiczną aplikację.
Aby skompilować:
Zapisz bieżącą scenę, klikając pozycję Zapisz sceny pliku>.
Przejdź do ustawień kompilacji pliku>
Zaznacz pole wyboru o nazwie Projekty języka C# aparatu Unity (jest to ważne, ponieważ umożliwi edytowanie klas po zakończeniu kompilacji).
Kliknij pozycję Dodaj otwarte sceny,
Kliknij pozycję Kompiluj.
Zostanie wyświetlony monit o wybranie folderu, w którym chcesz skompilować rozwiązanie.
Utwórz folder BUILDS i w tym folderze utwórz inny folder z wybraną odpowiednią nazwą.
Kliknij nowy folder, a następnie kliknij pozycję Wybierz folder, aby rozpocząć kompilację w tej lokalizacji.
Po zakończeniu kompilowania środowiska Unity (może to zająć trochę czasu), zostanie otwarte okno Eksplorator plików w lokalizacji kompilacji (sprawdź pasek zadań, ponieważ może nie zawsze pojawiać się nad oknami, ale powiadomi o dodaniu nowego okna).
Rozdział 11 — Wdrażanie aplikacji
Aby wdrożyć aplikację:
Przejdź do nowej kompilacji aparatu Unity ( folderu App ) i otwórz plik rozwiązania za pomocą programu Visual Studio.
Po otwarciu programu Visual Studio należy przywrócić pakiety NuGet, które można wykonać, klikając prawym przyciskiem myszy rozwiązanie MachineLearningLab_Build z Eksplorator rozwiązań (znajdującego się po prawej stronie programu Visual Studio), a następnie klikając polecenie Przywróć pakiety NuGet:
W obszarze Konfiguracja rozwiązania wybierz pozycję Debuguj.
W polu Platforma rozwiązania wybierz pozycję x86, Komputer lokalny.
W przypadku urządzenia Microsoft HoloLens można łatwiej ustawić tę opcję na maszynę zdalną, aby nie być naciągniętym na komputer. Należy jednak również wykonać następujące czynności:
- Poznaj adres IP urządzenia HoloLens, który można znaleźć w obszarze Ustawienia > Sieć i Internet > Wi-Fi > Advanced Options. Adres IPv4 jest adresem, którego należy użyć.
- Upewnij się, że tryb dewelopera jest włączony; znajduje się w obszarze Ustawienia > Aktualizacja i zabezpieczenia > dla deweloperów.
Przejdź do menu Kompilacja i kliknij pozycję Wdróż rozwiązanie , aby załadować aplikację bezpośrednio na komputer.
Aplikacja powinna być teraz wyświetlana na liście zainstalowanych aplikacji gotowych do uruchomienia.
Po uruchomieniu aplikacji rzeczywistości mieszanej zobaczysz ławę, która została skonfigurowana w scenie aparatu Unity, a po zainicjowaniu dane skonfigurowane na platformie Azure zostaną pobrane. Dane zostaną zdeserializowane w aplikacji, a trzy najlepsze wyniki bieżącej daty i godziny zostaną udostępnione wizualnie, ponieważ trzy modele na ławce.
Zakończona aplikacja usługi Machine Learning
Gratulacje, utworzono aplikację rzeczywistości mieszanej, która wykorzystuje usługę Azure Machine Learning do przewidywania danych i wyświetlania jej na scenie.
Ćwiczenie
Ćwiczenie 1
Poeksperymentuj z kolejnością sortowania aplikacji i masz na półce trzy dolne przewidywania, ponieważ te dane mogą być również przydatne.
Ćwiczenie 2
Użycie tabel platformy Azure umożliwia wypełnienie nowej tabeli informacjami o pogodzie i utworzenie nowego eksperymentu przy użyciu danych.