HoloLens (1. generációs) és Azure 307: Gépi tanulás
Megjegyzés
A Mixed Reality Academy oktatóanyagait a HoloLens (1. generációs) és Mixed Reality modern headsetek szem előtt tartásával tervezték. Ezért fontosnak tartjuk, hogy ezeket az oktatóanyagokat helyben hagyjuk azoknak a fejlesztőknek, akik továbbra is útmutatást keresnek az ilyen eszközök fejlesztéséhez. Ezek az oktatóanyagok nem frissülnek az HoloLens 2 legújabb eszközkészleteivel vagy interakcióival. A támogatott eszközökön továbbra is működni fognak. A jövőben egy új oktatóanyag-sorozat jelenik meg, amely bemutatja, hogyan fejleszthet HoloLens 2. Ezt az értesítést a közzétételükkor az oktatóanyagokra mutató hivatkozással frissítjük.
Ebben a tanfolyamban megtanulhatja, hogyan adhat hozzá Machine Learning-képességeket egy vegyes valóságú alkalmazáshoz az Azure Machine Learning Studio (klasszikus) használatával.
Az Azure Machine Learning Studio (klasszikus) egy Microsoft-szolgáltatás, amely számos gépi tanulási algoritmust biztosít a fejlesztőknek, amelyek segíthetnek az adatbevitelben, a kimenetben, az előkészítésben és a vizualizációban. Ezekből az összetevőkből ezután létrehozhat egy prediktív elemzési kísérletet, iterálhat rajta, és betaníthatja a modellt. A betanítást követően üzembe helyezheti a modellt az Azure-felhőben, hogy aztán új adatokat értékelhessenek. További információért látogasson el az Azure Machine Learning Studio (klasszikus) oldalára.
Miután elvégezte ezt a tanfolyamot, egy vegyes valósági modern headset-alkalmazással fog rendelkezni, és megtanulta, hogyan teheti meg az alábbiakat:
- Adjon meg egy értékesítési adatokat tartalmazó táblázatot az Azure Machine Learning Studio (klasszikus) portálján, és tervezzen meg egy algoritmust a népszerű elemek jövőbeli értékesítésének előrejelzéséhez.
- Hozzon létre egy Unity-projektet, amely képes fogadni és értelmezni az előrejelzési adatokat az ML-szolgáltatásból.
- Megjelenítheti a predikációs adatokat vizuálisan a Unity-projektben a legnépszerűbb értékesítési cikkek biztosításával egy polcon.
Az alkalmazásban ön múlik, hogyan fogja integrálni az eredményeket a tervével. Ez a tanfolyam arra szolgál, hogy megtanítsa, hogyan integrálhat egy Azure-szolgáltatást a Unity-projekttel. Az Ön feladata, hogy az ebből a tanfolyamból megszerzett tudást felhasználva továbbfejlesztse a vegyes valóság alkalmazását.
Ez a tanfolyam egy önálló oktatóanyag, amely közvetlenül nem tartalmaz semmilyen más Mixed Reality Labs-t.
Eszköztámogatás
Tanfolyam | HoloLens | Modern headsetek |
---|---|---|
MR és Azure 307: Gépi tanulás | ✔️ | ✔️ |
Megjegyzés
Bár ez a kurzus elsősorban Windows Mixed Reality magával ragadó (VR) headsetekre összpontosít, a tanfolyamban tanultakat alkalmazhatja a Microsoft HoloLens. Ahogy követi a tanfolyamot, jegyzeteket fog látni a HoloLens támogatásához esetleg szükséges módosításokról. A HoloLens használatakor visszhangot tapasztalhat a hangrögzítés során.
Előfeltételek
Megjegyzés
Ez az oktatóanyag olyan fejlesztőknek készült, akik alapszintű tapasztalattal rendelkeznek a Unityben és a C#-ben. Felhívjuk a figyelmét arra is, hogy a jelen dokumentumban szereplő előfeltételek és írásos utasítások az íráskor (2018. május) tesztelt és ellenőrzött adatokat jelölik. Szabadon használhatja a legújabb szoftvert, ahogy az az eszközök telepítéséről szóló cikkben szerepel, bár nem szabad feltételezni, hogy a tanfolyam információi tökéletesen megfelelnek az újabb szoftverekben található információknak, mint az alább felsoroltak.
Ehhez a tanfolyamhoz a következő hardvereket és szoftvereket javasoljuk:
- A modern (VR) headsetek fejlesztéséhez Windows Mixed Reality kompatibilis fejlesztőszámítógép
- Windows 10 Fall Creators Update (vagy újabb) a fejlesztői mód engedélyezésével
- A legújabb Windows 10 SDK
- Unity 2017.4
- Visual Studio 2017
- Windows Mixed Reality modern (VR) headset vagy Microsoft HoloLens, amelyen engedélyezve van a Fejlesztői mód
- Internet-hozzáférés az Azure beállításához és a gépi tanulási adatok lekéréséhez
Előkészületek
A projekt létrehozásával kapcsolatos problémák elkerülése érdekében javasoljuk, hogy az oktatóanyagban említett projektet gyökérszintű vagy gyökérszintű mappában hozza létre (a hosszú mappaelérési utak problémákat okozhatnak buildeléskor).
1. fejezet – Azure Storage-fiók beállítása
Az Azure Translator API használatához konfigurálnia kell a szolgáltatás egy példányát, amelyet elérhetővé kell tenni az alkalmazás számára.
Jelentkezzen be az Azure Portalra.
Megjegyzés
Ha még nem rendelkezik Azure-fiókkal, létre kell hoznia egyet. Ha tantermi vagy laborhelyzetben követi ezt az oktatóanyagot, kérjen segítséget az oktatótól vagy az egyik szakembertől az új fiók beállításához.
Miután bejelentkezett, kattintson a bal oldali menü Tárfiókok elemére.
Megjegyzés
Előfordulhat, hogy az Új szót az Erőforrás létrehozása kifejezésre cserélték az újabb portálokon.
A Tárfiókok lapon kattintson a Hozzáadás gombra.
A Tárfiók létrehozása panelen:
Adjon nevet a fióknak, ne feledje, hogy ez a mező csak számokat és kisbetűket fogad el.
Az Üzembehelyezési modell beállításnál válassza aResource Manager lehetőséget.
A Fiók típusa beállításnál válassza a Tárolás (általános célú v1) lehetőséget.
A Teljesítmény mezőben válassza a Standard lehetőséget.
A Replikáció beállításnál válassza az Írásvédett georedundáns tárolás (RA-GRS) lehetőséget.
Hagyja letiltva a Biztonságos átvitel szükséges beállítást.
Válasszon ki egy előfizetést.
Válasszon egy erőforráscsoportot , vagy hozzon létre egy újat. Az erőforráscsoportokkal monitorozhat, szabályozhat hozzáférést, kiépíteni és kezelni tudja az Azure-objektumok gyűjteményének számlázását. Javasoljuk, hogy az egyetlen projekthez társított összes Azure-szolgáltatást (például ezeket a tesztkörnyezeteket) egy közös erőforráscsoport alatt tartsa.
Ha többet szeretne megtudni az Azure-erőforráscsoportokról, látogasson el az erőforráscsoportról szóló cikkre.
Határozza meg az erőforráscsoport helyét (ha új erőforráscsoportot hoz létre). A hely ideális esetben abban a régióban lenne, ahol az alkalmazás futna. Egyes Azure-eszközök csak bizonyos régiókban érhetők el.
Azt is meg kell erősítenie, hogy megértette a szolgáltatásra vonatkozó feltételeket.
Miután a Létrehozás gombra kattintott, meg kell várnia a szolgáltatás létrehozását, ez eltarthat egy percig.
A szolgáltatáspéldány létrehozása után megjelenik egy értesítés a portálon.
2. fejezet – Az Azure Machine Learning Studio (klasszikus)
Az Azure Machine Learning használatához konfigurálnia kell a Machine Learning szolgáltatás egy példányát, hogy elérhetővé legyen téve az alkalmazás számára.
Az Azure Portalon kattintson a bal felső sarokban az Új elemre, és keresse meg a Machine Learning Studio-munkaterületet, és nyomja le az Enter billentyűt.
Az új oldalon megjelenik a Machine Learning Studio Workspace szolgáltatás leírása. A parancssor bal alsó részén kattintson a Létrehozás gombra a szolgáltatással való társítás létrehozásához.
Miután a Létrehozás gombra kattintott, megjelenik egy panel, ahol meg kell adnia néhány részletet az új Machine Learning Studio szolgáltatásról:
Szúrja be a szolgáltatáspéldány kívánt munkaterületnevét .
Válasszon ki egy előfizetést.
Válasszon egy erőforráscsoportot , vagy hozzon létre egy újat. Az erőforráscsoportokkal monitorozhat, szabályozhat hozzáférést, kiépíteni és kezelni tudja az Azure-objektumok gyűjteményének számlázását. Javasoljuk, hogy az egyetlen projekthez társított összes Azure-szolgáltatást (például ezeket a tesztkörnyezeteket) egy közös erőforráscsoport alatt tartsa.
Ha többet szeretne megtudni az Azure-erőforráscsoportokról, látogasson el az erőforráscsoportról szóló cikkre.
Határozza meg az erőforráscsoport helyét (ha új erőforráscsoportot hoz létre). A hely ideális esetben abban a régióban lenne, ahol az alkalmazás futna. Egyes Azure-eszközök csak bizonyos régiókban érhetők el. Ugyanazt az erőforráscsoportot kell használnia, amelyet az előző fejezetben az Azure Storage létrehozásához használt.
A Tárfiók szakaszban kattintson a Meglévő használata elemre, majd a legördülő menüre, majd onnan kattintson az előző fejezetben létrehozott tárfiókra .
Válassza ki a megfelelő munkaterület tarifacsomagot a legördülő menüből.
A Webszolgáltatás-csomag szakaszban kattintson az Új létrehozása elemre, majd szúrjon be egy nevet a szövegmezőbe.
A Webszolgáltatás-csomag tarifacsomag szakaszában válassza ki az Ön által választott árszintet. A DEVTEST Standard nevű fejlesztési tesztelési szintnek ingyenesen elérhetőnek kell lennie.
Azt is meg kell erősítenie, hogy megértette a szolgáltatásra vonatkozó feltételeket.
Kattintson a Létrehozás lehetőségre.
Miután a Létrehozás gombra kattintott, meg kell várnia a szolgáltatás létrehozását, ez eltarthat egy percig.
A szolgáltatáspéldány létrehozása után megjelenik egy értesítés a portálon.
Kattintson az értesítésre az új szolgáltatáspéldány megismeréséhez.
Az értesítésben kattintson az Erőforrás megnyitása gombra az új szolgáltatáspéldány megismeréséhez.
A megjelenő lapon, a További hivatkozások szakaszban kattintson a Machine Learning Studio indítása elemre, amely átirányítja a böngészőt a Machine Learning Studio portáljára.
Jelentkezzen be a Machine Learning Studióba (klasszikus) a jobb felső vagy középen található Bejelentkezés gombra.
3. fejezet – A Machine Learning Studio (klasszikus): Adathalmaz beállítása
A Machine Learning-algoritmusok működésének egyik módja a meglévő adatok elemzése, majd a jövőbeli eredmények előrejelzése a meglévő adatkészlet alapján. Ez általában azt jelenti, hogy minél több meglévő adata van, annál jobb lesz az algoritmus a jövőbeli eredmények előrejelzésében.
Ehhez a tanfolyamhoz egy mintatáblát kap ProductsTableCSV néven, és innen tölthető le.
Fontos
A fenti .zip fájl tartalmazza a ProductsTableCSV és a .unitypackage fájlt is, amelyre a 6. fejezetben szüksége lesz. Ez a csomag a fejezeten belül is elérhető, bár külön a csv-fájltól.
Ez a mintaadatkészlet a 2017-es év minden napjának minden órájában rögzíti a legkelendőbb objektumokat.
Például 2017 1. napján 13 órakor (13 óra) a legkelendőbb termék a só és a bors volt.
Ez a mintatábla 9998 bejegyzést tartalmaz.
Lépjen vissza a Machine Learning Studio (klasszikus) portáljára, és adja hozzá ezt a táblát adatkészletként az ML-hez. Ehhez kattintson a képernyő bal alsó sarkában található + Új gombra.
A szakasz alulról jelenik meg, és ezen belül a bal oldalon található a navigációs panel. Kattintson az Adathalmaz elemre, majd az attól jobbra lévő Helyi fájlból elemre.
Töltse fel az új adatkészletet az alábbi lépésekkel:
Megjelenik a feltöltési ablak, ahol tallózhat a merevlemezen az új adatkészlethez.
Miután kiválasztotta, majd vissza a feltöltési ablakban, hagyja a jelölőnégyzetet észrevétlenül.
Az alábbi szövegmezőben adja meg ProductsTableCSV.csvaz adathalmaz neveként (bár automatikusan hozzá kell adni).
A Típus legördülő menüben válassza az Általános CSV-fájl fejléccel (.csv) lehetőséget.
Nyomja le az osztást a feltöltési ablak jobb alsó sarkában, és a rendszer feltölti az Adathalmazt .
4. fejezet – A Machine Learning Studio (klasszikus): A kísérlet
Mielőtt felépítené a gépi tanulási rendszert, létre kell hoznia egy kísérletet az adatokkal kapcsolatos elméletének érvényesítéséhez. Az eredmények alapján tudni fogja, hogy több adatra van-e szüksége, vagy nincs-e korreláció az adatok és a lehetséges eredmények között.
Kísérlet létrehozásának megkezdése:
Kattintson ismét a lap bal alsó részén található + Új gombra, majd kattintson az Üres kísérlet kísérlet elemre>.
Egy új oldal jelenik meg egy üres kísérlettel:
A bal oldali panelen bontsa ki a Mentett adathalmazokSaját adathalmazok> elemet, és húzza a ProductsTableCSV elemet a kísérletvászonra.
A bal oldali panelen bontsa ki az Adatátalakítási>minta és a Felosztás elemet. Ezután húzza az Adatok felosztása elemet a kísérletvászonra. Az Adatok felosztása elem két részre osztja az adatkészletet. Az egyik rész a gépi tanulási algoritmus betanítására használható. A második rész a létrehozott algoritmus pontosságának kiértékelésére szolgál.
A jobb oldali panelen (miközben a vásznon az Adatok felosztása elem van kiválasztva) szerkessze az első kimeneti adathalmaz sorainak törtrészét0,7-re. Ez két részre osztja az adatokat, az első rész az adatok 70%-a, a második pedig a fennmaradó 30%. Annak érdekében, hogy az adatok véletlenszerűen legyenek felosztva, győződjön meg arról, hogy a Véletlenszerű felosztás jelölőnégyzet be van jelölve.
Húzzon egy kapcsolatot a ProductsTableCSV elem alapjáról a vásznon az Adatok felosztása elem tetejére. Ezzel összekapcsolja az elemeket, és elküldi a ProductsTableCSV adathalmaz kimenetét (az adatokat) az Adatok felosztása bemenethez.
A bal oldali Kísérletek panelen bontsa ki a Machine Learning>Train elemet. Húzza ki a Modell betanítása elemet a Kísérletvászonra. A vászonnak ugyanúgy kell kinéznie, mint az alábbinak.
Az Adatok felosztása elem bal alsó sarkából húzza a kapcsolatot a Modell betanítása elem jobb felső sarkába. Az adathalmaz első 70%-os felosztását a Modell betanítása az algoritmus betanításához fogja használni.
Válassza a Modell betanítása elemet a vásznon, majd a Tulajdonságok panelen (a böngészőablak jobb oldalán) kattintson a Launch column selector gombra.
A szövegmezőbe írja be a terméket , majd nyomja le az Enter billentyűt, a termék oszlopként lesz beállítva az előrejelzések betanítása érdekében. Ezt követően kattintson a jobb alsó sarokban lévő pipára a kijelölési párbeszédpanel bezárásához.
Egy többosztályos logisztikai regressziós algoritmust fog betaníteni, amely előrejelzi a legtöbb eladott terméket a nap órája és a dátum alapján. A jelen dokumentum hatókörén kívül esik a Azure Machine Learning stúdió által biztosított különböző algoritmusok részleteinek magyarázata, azonban többet is megtudhat a Machine Learning Algorithm Cheat Sheet-ből.
A bal oldali kísérletelemek panelen bontsa ki a Machine Learning>Inicializáljaamodellbesorolást>, és húzza a többosztályos logisztikai regressziós elemet a kísérletvászonra.
Csatlakoztassa a kimenetet a többosztályos logisztikai regresszió aljáról a Modell betanítása elem bal felső bemenetéhez.
A bal oldali panelen található kísérletelemek listájában bontsa ki a Machine Learning Score (Gépi tanulási>pontszám) elemet, és húzza a Modell pontszáma elemet a vászonra.
Csatlakoztassa a kimenetet a Modell betanítása alulról a Score Model bal felső bemenetéhez.
Csatlakoztassa az Adatok felosztása elem jobb alsó kimenetét a Modell pontozása elem jobb felső bemenetéhez.
A bal oldali panel kísérletelemeinek listájában bontsa ki a MachineLearning-kiértékelés> elemet, és húzza a Modell kiértékelése elemet a vászonra.
Csatlakoztassa a Score Model kimenetét a Modell kiértékelése bal felső bemenetéhez.
Elkészítette az első Machine Learning-kísérletet. Most már mentheti és futtathatja a kísérletet. A lap alján található menüben kattintson a Mentés gombra a kísérlet mentéséhez, majd kattintson a Futtatás gombra a kísérlet elindításához.
A kísérlet állapotát a vászon jobb felső sarkában láthatja. Várjon néhány percet, amíg a kísérlet befejeződik.
Ha nagy (valós) adathalmazsal rendelkezik, valószínű, hogy a kísérlet futtatása több órát is igénybe vehet.
Kattintson a jobb gombbal a modell kiértékelése elemre a vásznon, és a helyi menüben vigye az egérmutatót a Kiértékelési eredmények fölé, majd válassza a Vizualizáció lehetőséget.
A kiértékelési eredmények az előrejelzett eredményeket és a tényleges eredményeket jelenítik meg. Ez a modell kiértékeléséhez az eredeti adatkészlet 30%-át használja, amely korábban fel lett osztva. Láthatja, hogy az eredmények nem nagyszerűek, ideális esetben minden sorban a legmagasabb szám lenne az oszlopok kiemelt eleme.
Zárja be az Eredményeket.
Az újonnan betanított Machine Learning-modell használatához webszolgáltatásként kell elérhetővé tennie. Ehhez kattintson a lap alján található menü Webszolgáltatás beállítása menüpontjára, majd a Prediktív webszolgáltatás elemre.
Létrejön egy új lap, és a betanított modell egyesítve jön létre az új webszolgáltatás létrehozásához.
A lap alján lévő menüben kattintson a Mentés, majd a Futtatás elemre. Az állapot frissül a kísérletvászon jobb felső sarkában.
Ha végzett a futtatásával, megjelenik a Webszolgáltatás üzembe helyezése gomb a lap alján. Készen áll a webszolgáltatás üzembe helyezésére. Kattintson a webszolgáltatás (klasszikus) üzembe helyezése elemre a lap alján található menüben.
Előfordulhat, hogy a böngésző egy előugró ablak engedélyezését kéri, amelyet engedélyeznie kell, de előfordulhat, hogy újra le kell nyomnia a Deploy Web Service (Webszolgáltatás üzembe helyezése ) gombot, ha az üzembe helyezési lap nem jelenik meg.
A kísérlet létrehozása után a rendszer átirányítja egy Irányítópult lapra, ahol megjelenik az API-kulcs . Másolja egy jegyzettömbbe egyelőre, hamarosan szüksége lesz rá a kódban. Miután feljegyezte az API-kulcsot, kattintson a Kulcs alatti Alapértelmezett végpont szakaszban található REQUEST/RESPONSE gombra.
Megjegyzés
Ha ezen a lapon a Tesztelés gombra kattint, beírhatja a bemeneti adatokat, és megtekintheti a kimenetet. Adja meg a napot és az órát. Hagyja üresen a termékbejegyzést . Ezután kattintson a Megerősítés gombra. A lap alján látható kimenetben a JSON látható, amely azt jelzi, hogy az egyes termékek milyen valószínűséggel választanak.
Ekkor megnyílik egy új weblap, amelyen megjelennek a Machine Learning Studio (klasszikus) által igényelt kérelemstruktúrára vonatkozó utasítások és példák. Másolja a jegyzettömbbe az ezen az oldalon megjelenő Kérelem URI-t .
Most már létrehozott egy gépi tanulási rendszert, amely a legvalószínűbb terméket kínálja az előzményvásárlási adatok alapján, az év napjának és napjának idejével korrelálva.
A webszolgáltatás meghívásához szüksége lesz a szolgáltatásvégpont URL-címére és a szolgáltatás API-kulcsára. Kattintson a felső menü Felhasználás lapjára.
A Használati adatok lapon megjelennek a webszolgáltatás kódból való meghívásához szükséges információk. Készítsen másolatot az elsődleges kulcsról és a kérés-válasz URL-címről . Ezekre a következő fejezetben lesz szüksége.
5. fejezet – A Unity-projekt létrehozása
Állítsa be és tesztelje Mixed Reality Modern headsetet.
Megjegyzés
Ehhez a tanfolyamhoz nem lesz szükség Mozgásvezérlőkre. Ha segítségre van szüksége a Modern headset beállításához, kattintson IDE.
Nyissa meg a Unityt , és hozzon létre egy új Unity-projektet MR_MachineLearning néven. Győződjön meg arról, hogy a projekttípus 3D értékre van állítva.
Ha a Unity meg van nyitva, érdemes ellenőrizni, hogy az alapértelmezett SzkriptszerkesztőVisual Studióra van-e állítva. Lépjen aBeállításokszerkesztése> elemre, majd az új ablakban lépjen a Külső eszközök elemre. Módosítsa a Külső szkriptszerkesztőtVisual Studio 2017-re. Zárja be a Beállítások ablakot.
Ezután lépjen a Fájl>buildelési beállításai területre, és váltson Univerzális Windows-platform platformra aPlatformváltás gombra kattintva.
Győződjön meg arról is, hogy:
A Céleszköz bármely eszköz értékre van állítva.
A Microsoft HoloLens állítsa a Céleszköz beállítást HoloLens értékre.
A build típusaD3D értékre van állítva.
Az SDK a Legújabb telepített értékre van állítva.
A Visual Studio verziója a Legújabb telepítve értékre van állítva.
A Build and Run (Létrehozás és futtatás ) beállítás helyi gépre van állítva.
Ne aggódjon a jelenetek beállítása miatt, mivel ezek később lesznek elérhetők.
A többi beállításnak egyelőre alapértelmezettként kell maradnia.
A Build Settings (Összeállítási beállítások ) ablakban kattintson a Player Settings (Lejátszó beállításai ) gombra. Ekkor megnyílik a kapcsolódó panel azon a helyen, ahol az Inspector található.
Ebben a panelen ellenőrizni kell néhány beállítást:
Az Egyéb beállítások lapon:
A szkriptelésifuttatókörnyezet verziójánakkísérletinek kell lennie (.NET 4.6 egyenértékű)
A szkriptelési háttérrendszernek.NET-nek kell lennie
Az API-kompatibilitási szintnek.NET 4.6-osnak kell lennie
A Közzétételi beállítások lap Képességek területén ellenőrizze a következőket:
InternetClient
A panelen lejjebb, az XR-beállítások területen (amely a Közzétételi beállítások alatt található) jelölje be a Virtual Reality támogatott jelölőnégyzetet, és győződjön meg arról, hogy a Windows Mixed Reality SDK hozzá van adva
A buildbeállításokban a Unity C#-projektek már nem szürkén jelennek meg; jelölje be a mellette lévő jelölőnégyzetet.
Zárja be a Build Settings (Összeállítási beállítások) ablakot.
Mentse a projektet (FÁJL > MENTÉSE PROJEKT).
6. fejezet – Az MLProducts Unity csomag importálása
Ehhez a tanfolyamhoz le kell töltenie egy Azure-MR-307.unitypackage nevű Unity Asset-csomagot. Ez a csomag egy jelenettel rendelkezik, amely az előre összeállított összes objektumot tartalmaz, így az összesre összpontosíthat. A ShelfKeeper szkriptet a rendszer biztosítja, de csak a nyilvános változókat tárolja a jelenetbeállítási struktúra érdekében. Az összes többi szakaszt el kell végeznie.
A csomag importálása:
A Unity irányítópultja előtt kattintson a képernyő tetején lévő menü Eszközök elemére, majd kattintson az Import Package , Custom Package (Csomag importálása, egyéni csomag) elemre.
A fájlválasztóval válassza ki az Azure-MR-307.unitypackage csomagot, és kattintson a Megnyitás gombra.
Ekkor megjelenik az eszköz összetevőinek listája. Az Importálás gombra kattintva erősítse meg az importálást.
Miután befejezte az importálást, láthatja, hogy néhány új mappa megjelent a Unity-projektpanelen. Ezek a 3D modellek és a megfelelő anyagok, amelyek részét képezik az előre elkészített jelenet fog dolgozni. A kód nagy részét ebben a kurzusban fogja megírni.
A Projektpanel mappában kattintson a Jelenetek mappára, majd kattintson duplán a jelenetre (az úgynevezett MR_MachineLearningScene). Ekkor megnyílik a jelenet (lásd az alábbi képet). Ha a piros rombuszok hiányoznak, egyszerűen kattintson a Gizmos gombra a Játék panel jobb felső sarkában.
7. fejezet – A DLL-ek ellenőrzése a Unityben
A (szerializáláshoz és deszerializáláshoz használt) JSON-kódtárak használatának kihasználásához egy Newtonsoft DLL-t implementáltunk a behozott csomaggal. A kódtárnak megfelelő konfigurációval kell rendelkeznie, de érdemes ellenőrizni (különösen akkor, ha a kód nem működik).
Ehhez tegye a következőket:
Kattintson a Bal gombbal a Newtonsoft fájlra a Beépülő modulok mappában, és tekintse meg az Inspector panelt. Győződjön meg arról, hogy az Any Platform (Bármely platform ) jelölőnégyzet be van jelölve. Lépjen az UWP lapra , és győződjön meg arról, hogy a Folyamat mellőzése jelölőnégyzet be van jelölve.
8. fejezet – A ShelfKeeper osztály létrehozása
A ShelfKeeper osztály olyan metódusokat üzemeltet, amelyek a jelenetben ívelt felhasználói felületet és termékeket szabályozzák.
Az importált csomag részeként megkapja ezt az osztályt, bár az nem teljes. Itt az ideje, hogy befejezze az osztályt:
Kattintson duplán a ShelfKeeper szkriptre a Szkriptek mappában a Visual Studio 2017-ben való megnyitásához.
Cserélje le a szkriptben meglévő összes kódot a következő kódra, amely beállítja az időpontot és a dátumot, és rendelkezik egy termék megjelenítésére szolgáló metódussal.
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); } }
Mielőtt visszatér a Unitybe, mentse a módosításokat a Visual Studióban.
A Unity-szerkesztőben ellenőrizze, hogy a ShelfKeeper osztály az alábbihoz hasonlóan néz-e ki:
Fontos
Ha a szkript nem rendelkezik hivatkozási célokkal (pl. Date (Text Mesh)), egyszerűen húzza a megfelelő objektumokat a Hierarchia panelről a célmezőkbe. Ha szükséges, az alábbiakban talál magyarázatot:
Nyissa meg a Spawn Point tömböt a ShelfKeeper összetevőszkriptben a bal gombbal kattintva. Ekkor megjelenik egy Méret nevű alszakasz, amely a tömb méretét jelzi. Írja be a 3-at a Méret melletti szövegmezőbe, és nyomja le az Enter billentyűt, és alatta három tárolóhely jön létre.
A Hierarchia területén bontsa ki az Időmegjelenítés objektumot (a mellette lévő nyílra kattintva). Ezután kattintson a Fő kamerára a hierarchián belül, hogy az Inspector megnyissa az adatait.
Válassza ki a Fő kamerát a Hierarchia panelen. Húzza a Dátum és idő objektumokat a Hierarchia panelről a ShelfKeeper összetevő fő kamerájánakFelügyelőjénekDátumszöveg és Időszöveg tárolóhelyeire.
Húzza az ívási pontokat a Hierarchia panelről (a Polc objektum alatt) a Ívási pont tömb alatti 3elem referenciapéldányára, ahogy az a képen látható.
9. fejezet – A ProductPrediction osztály létrehozása
A következő létrehozandó osztály a ProductPrediction osztály.
Ez az osztály felel a következőért:
A Machine Learning Service-példány lekérdezése az aktuális dátum és idő megadásával.
A JSON-válasz deszerializálása használható adatokba.
Az adatok értelmezése, a 3 ajánlott termék lekérése.
A ShelfKeeper osztály metódusainak meghívásával megjelenítheti az adatokat a Jelenetben.
Az osztály létrehozása:
Nyissa meg a Szkriptek mappát a Projekt panelen.
Kattintson a jobb gombbal a mappába, és hozza létre> aC# szkriptet. Hívja meg a ProductPrediction szkriptet.
Kattintson duplán az új ProductPrediction szkriptre a Visual Studio 2017-ben való megnyitásához.
Ha megjelenik a Fájlmódosítás észlelve párbeszédpanel, kattintson a *Megoldás betöltése elemre.
Adja hozzá a következő névtereket a ProductPrediction osztály elejéhez:
using System; using System.Collections.Generic; using UnityEngine; using System.Linq; using Newtonsoft.Json; using UnityEngine.Networking; using System.Runtime.Serialization; using System.Collections;
A ProductPrediction osztályba szúrja be a következő két objektumot, amelyek több beágyazott osztályból állnak. Ezek az osztályok a Machine Learning Service JSON-jának szerializálására és deszerializálására szolgálnak.
/// <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; } }
Ezután adja hozzá a következő változókat az előző kód fölé (hogy a JSON-hez kapcsolódó kód a szkript alján, az összes többi kód alatt legyen, és ne legyen útban):
/// <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;
Fontos
Mindenképpen szúrja be az elsődleges kulcsot és a kérés-válasz végpontot a Machine Learning Portalról az itt található változókba. Az alábbi képeken látható, hogy honnan származik a kulcs és a végpont.
Szúrja be ezt a kódot a Start() metódusba. A Rendszer meghívja a Start() metódust a osztály inicializálásakor:
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)); }
Az alábbi módszer gyűjti össze a windowsos dátumot és időt, és olyan formátummá alakítja, amelyet a Machine Learning-kísérlet a táblázatban tárolt adatok összehasonlítására használhat.
/// <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(); }
Törölheti az Update() metódust, mivel ez a osztály nem fogja használni.
Adja hozzá a következő metódust, amely közli az aktuális dátumot és időt a Machine Learning-végpontgal, és JSON formátumban kap választ.
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); } }
Adja hozzá a következő metódust, amely a JSON-válasz deszerializálásáért felelős, és a deszerializálás eredményét a ShelfKeeper osztálynak adja meg. Ez az eredmény annak a három elemnek a neve lesz, amely az aktuális dátum és időpont szerint a legjobban értékesíthető. Szúrja be az alábbi kódot a ProductPrediction osztályba az előző metódus alá.
/// <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(); }
Mentse a Visual Studiót , és térjen vissza a Unitybe.
Húzza a ProductPrediction osztály szkriptet a Szkript mappából a Fő kamera objektumra.
Mentse a jelenetet és a projektet : Fájl>mentése jelenet/Fájl>mentése projekt.
10. fejezet – Az UWP-megoldás létrehozása
Itt az ideje, hogy a projektet UWP-megoldásként hozza létre, hogy önálló alkalmazásként fusson.
Buildelés:
Mentse az aktuális jelenetet aFájlmentési> jelenetek elemre kattintva.
Nyissa meg a Fájl>buildelési beállításait
Jelölje be a Unity C#-projektek nevű jelölőnégyzetet (ez azért fontos, mert lehetővé teszi az osztályok szerkesztését a buildelés befejezése után).
Kattintson a Nyitott jelenetek hozzáadása elemre,
Kattintson a Build (Build) gombra.
A rendszer kérni fogja, hogy válassza ki azt a mappát, amelyben létre szeretné készíteni a megoldást.
Hozzon létre egy BUILDS mappát, és ebben a mappában hozzon létre egy másik mappát, amelynek a neve megfelelő.
Kattintson az új mappára, majd a Mappa kiválasztása elemre a build ezen a helyen való megkezdéséhez.
Miután a Unity befejezte az építést (ez eltarthat egy ideig), megnyit egy Fájlkezelő ablakot a build helyén (ellenőrizze a tálcát, mivel előfordulhat, hogy nem mindig jelenik meg az ablakok felett, de értesítést küld az új ablak hozzáadásáról).
11. fejezet – Az alkalmazás üzembe helyezése
Az alkalmazás üzembe helyezése:
Lépjen az új Unity-buildre (az Alkalmazás mappára), és nyissa meg a megoldásfájlt a Visual Studióval.
A Visual Studio megnyitásakor vissza kell állítania a NuGet-csomagokat, amelyeket a jobb gombbal a MachineLearningLab_Build megoldásra kattintva végezhet el a Megoldáskezelő (a Visual Studio jobb oldalán található), majd kattintson a NuGet-csomagok visszaállítása elemre:
A Megoldáskonfiguráció területen válassza a Hibakeresés lehetőséget.
A Megoldásplatformon válassza az x86, Helyi gép lehetőséget.
A Microsoft HoloLens egyszerűbb lehet a Távoli gép beállítás, hogy ne legyen a számítógéphez kötve. Azonban a következőket is el kell végeznie:
- Ismerje a HoloLens IP-címét , amely a Beállítások > hálózat & Internet > Wi-Fi > Speciális beállítások területen található; az IPv4 a használni kívánt cím.
- Győződjön meg arról, hogy a fejlesztői módbe van kapcsolva; a Beállítások > frissítési & Fejlesztőknek című témakörben >található.
Nyissa meg a Build (Build) menüt , és kattintson a Megoldás telepítése elemre az alkalmazás pc-hez való közvetlen telepítéséhez.
Az alkalmazásnak most már meg kell jelennie a telepített alkalmazások listájában, készen áll az indításra.
A Mixed Reality alkalmazás futtatásakor megjelenik a Unity-jelenetben beállított pad, és az inicializálástól kezdve lekéri az Azure-ban beállított adatokat. Az adatok deszerializálva lesznek az alkalmazásban, és az aktuális dátum és idő három legfontosabb eredménye vizuálisan, három modellként jelenik meg a padon.
A kész Machine Learning-alkalmazás
Gratulálunk, olyan vegyes valósági alkalmazást készített, amely az Azure Machine Learning használatával készít adat-előrejelzéseket, és megjeleníti azt a jelenetben.
Gyakorlat
1. gyakorlat
Kísérletezzen az alkalmazás rendezési sorrendjével, és jelenik meg a polcon a három alsó előrejelzés, mivel ezek az adatok szintén hasznosak lehetnek.
2. gyakorlat
Az Azure Tables használatával feltölthet egy új táblát az időjárási adatokkal, és új kísérletet hozhat létre az adatok használatával.