HoloLens (prima generazione) e Azure 307: Machine Learning


Nota

Le esercitazioni di Mixed Reality Academy sono state progettate in base a HoloLens (prima generazione) e ai visori VR immersive di realtà mista. Pertanto, riteniamo importante lasciarle a disposizione degli sviluppatori a cui serve ancora materiale sussidiario per lo sviluppo di questi dispositivi. Queste esercitazioni non verranno aggiornate con i set di strumenti o le interazioni più recenti usati per HoloLens 2. Rimarranno invariate per consentire di continuare a lavorare sui dispositivi supportati. Ci sarà una nuova serie di esercitazioni che verranno pubblicate in futuro che dimostreranno come sviluppare per HoloLens 2. Questo avviso verrà aggiornato con un collegamento a tali esercitazioni quando vengono pubblicate.


prodotto finale -start

In questo corso si apprenderà come aggiungere funzionalità di Machine Learning (ML) a un'applicazione di realtà mista usando Azure Machine Learning Studio (versione classica).

Azure Machine Learning Studio (versione classica) è un servizio Microsoft che offre agli sviluppatori un numero elevato di algoritmi di Machine Learning, che possono essere utili per l'input, l'output, la preparazione e la visualizzazione dei dati. Da questi componenti è quindi possibile sviluppare un esperimento di analisi predittiva, eseguirne l'iterazione e usarlo per eseguire il training del modello. Dopo il training, è possibile rendere operativo il modello all'interno del cloud di Azure, in modo che possa quindi assegnare un punteggio ai nuovi dati. Per altre informazioni, visitare la pagina Azure Machine Learning Studio (versione classica).

Dopo aver completato questo corso, si avrà un'applicazione visore VR immersive di realtà mista e si sarà appreso come eseguire le operazioni seguenti:

  1. Fornire una tabella dei dati di vendita al portale di Azure Machine Learning Studio (versione classica) e progettare un algoritmo per stimare le vendite future degli articoli più diffusi.
  2. Creare un progetto Unity, che può ricevere e interpretare i dati di stima dal servizio ML.
  3. Visualizzare visivamente i dati di predicazione all'interno del progetto Unity, fornendo gli elementi di vendita più diffusi, su uno scaffale.

Nell'applicazione spetta all'utente come integrare i risultati con la progettazione. Questo corso è progettato per illustrare come integrare un servizio di Azure con il progetto Unity. È il tuo compito usare le conoscenze acquisite da questo corso per migliorare l'applicazione di realtà mista.

Questo corso è un'esercitazione autonoma, che non coinvolge direttamente altri lab di Realtà mista.

Supporto di dispositivi

Corso HoloLens Visori VR immersive
MR e Azure 307: Machine Learning ✔️ ✔️

Nota

Anche se questo corso è incentrato principalmente sui visori VR immersive di Windows Realtà mista, puoi anche applicare ciò che impari in questo corso a Microsoft HoloLens. Mentre segui il corso, vedrai le note su eventuali modifiche che potresti dover usare per supportare HoloLens. Quando si usa HoloLens, è possibile notare un'eco durante l'acquisizione vocale.

Prerequisiti

Nota

Questa esercitazione è progettata per gli sviluppatori che hanno esperienza di base con Unity e C#. Tenere presente anche che i prerequisiti e le istruzioni scritte all'interno di questo documento rappresentano ciò che è stato testato e verificato al momento della scrittura (maggio 2018). Sei libero di usare il software più recente, come elencato all'interno dell'articolo installare gli strumenti, anche se non si deve presumere che le informazioni in questo corso corrispondano perfettamente a ciò che troverai nel software più recente rispetto a quello elencato di seguito.

Per questo corso è consigliabile usare l'hardware e il software seguenti:

Prima di iniziare

Per evitare di riscontrare problemi durante la compilazione di questo progetto, è consigliabile creare il progetto menzionato in questa esercitazione in una cartella radice o quasi radice (i percorsi delle cartelle lunghe possono causare problemi in fase di compilazione).

Capitolo 1 - Configurazione dell'account Archiviazione di Azure

Per usare l'API Di Azure Translator, è necessario configurare un'istanza del servizio da rendere disponibile per l'applicazione.

  1. Accedere al portale di Azure.

    Nota

    Se non si ha già un account Azure, è necessario crearne uno. Se si segue questa esercitazione in una classe o in una situazione di laboratorio, chiedere all'insegnante o a uno dei prottori di assistenza per configurare il nuovo account.

  2. Dopo aver eseguito l'accesso, fare clic su Account di archiviazione nel menu a sinistra.

    Screenshot della finestra di Microsoft Azure, che mostra la voce Account di archiviazione nel menu di spostamento a sinistra.

    Nota

    La parola New potrebbe essere stata sostituita con Crea una risorsa, nei portali più recenti.

  3. Nella scheda Account di archiviazione fare clic su Aggiungi.

    Screenshot della finestra di Microsoft Azure, che mostra la schermata Account di archiviazione e il pulsante Aggiungi evidenziato.

  4. Nel pannello Crea account di archiviazione:

    1. Inserire un nome per l'account, tenere presente che questo campo accetta solo numeri e lettere minuscole.

    2. In Modello di distribuzione selezionare Resource Manager.

    3. Per Tipo di account selezionare Archiviazione (utilizzo generico v1).

    4. Per Prestazioni selezionare Standard.

    5. Per Replica selezionare Archiviazione con ridondanza geografica e accesso in lettura.For Replication select Read-access-geo-redundant storage (RA-GRS) (Archiviazione con ridondanza geografica e accesso in lettura).

    6. Lasciare Obbligatorio trasferimento sicuro come Disabilitato.

    7. Selezionare una Sottoscrizione.

    8. Scegliere un gruppo di risorse o crearne uno nuovo. Un gruppo di risorse consente di monitorare, controllare l'accesso, effettuare il provisioning e gestire la fatturazione per una raccolta di asset di Azure. È consigliabile mantenere tutti i servizi di Azure associati a un singolo progetto (ad esempio, questi lab) in un gruppo di risorse comune.

      Per altre informazioni sui gruppi di risorse di Azure, vedere l'articolo relativo al gruppo di risorse.

    9. Determinare la località per il gruppo di risorse (se si sta creando un nuovo gruppo di risorse). La posizione si trova idealmente nell'area in cui verrà eseguita l'applicazione. Alcuni asset di Azure sono disponibili solo in determinate aree.

  5. Sarà anche necessario verificare di aver compreso le condizioni e le condizioni applicate al servizio.

    Screenshot della finestra di dialogo Crea account di archiviazione, che mostra le informazioni compilate dall'utente nei campi di testo necessari.

  6. Dopo aver fatto clic su Crea, è necessario attendere che il servizio venga creato, l'operazione potrebbe richiedere un minuto.

  7. Una notifica verrà visualizzata nel portale dopo la creazione dell'istanza del servizio.

    Screenshot della notifica Distribuzione riuscita, che informa l'utente che la distribuzione al gruppo di risorse ha avuto esito positivo.

Capitolo 2 - Azure Machine Learning Studio (versione classica)

Per usare Azure Machine Learning, è necessario configurare un'istanza del servizio Machine Learning da rendere disponibile per l'applicazione.

  1. Nel portale di Azure fare clic su Nuovo nell'angolo in alto a sinistra e cercare Area di lavoro di Machine Learning Studio, premere INVIO.

    Screenshot della finestra di Microsoft Azure, che mostra l'area di lavoro di Machine Learning Studio nel riquadro del contenuto.

  2. La nuova pagina fornirà una descrizione del servizio Area di lavoro di Machine Learning Studio . Nella parte inferiore sinistra di questa richiesta fare clic sul pulsante Crea per creare un'associazione con questo servizio.

  3. Dopo aver fatto clic su Crea, verrà visualizzato un pannello in cui è necessario fornire alcuni dettagli sul nuovo servizio Machine Learning Studio:

    1. Inserire il nome dell'area di lavoro desiderato per questa istanza del servizio.

    2. Selezionare una Sottoscrizione.

    3. Scegliere un gruppo di risorse o crearne uno nuovo. Un gruppo di risorse consente di monitorare, controllare l'accesso, effettuare il provisioning e gestire la fatturazione per una raccolta di asset di Azure. È consigliabile mantenere tutti i servizi di Azure associati a un singolo progetto (ad esempio, questi lab) in un gruppo di risorse comune.

      Per altre informazioni sui gruppi di risorse di Azure, vedere l'articolo relativo al gruppo di risorse.

    4. Determinare la località per il gruppo di risorse (se si sta creando un nuovo gruppo di risorse). La posizione si trova idealmente nell'area in cui verrà eseguita l'applicazione. Alcuni asset di Azure sono disponibili solo in determinate aree. È consigliabile usare lo stesso gruppo di risorse usato per creare il Archiviazione di Azure nel capitolo precedente.

    5. Per la sezione Account di archiviazione fare clic su Usa esistente, quindi scegliere il menu a discesa e quindi fare clic sull'account di archiviazione creato nell'ultimo capitolo.

    6. Selezionare il piano tariffario dell'area di lavoro appropriato dal menu a discesa.

    7. Nella sezione Piano di servizio Web fare clic su Crea nuovo, quindi inserire un nome nel campo di testo.

    8. Nella sezione Piano tariffario del piano di servizio Web selezionare il piano tariffario preferito. Un livello di test di sviluppo denominato DEVTEST Standard deve essere disponibile gratuitamente.

    9. Sarà anche necessario verificare di aver compreso le condizioni e le condizioni applicate al servizio.

    10. Cliccare su Crea.

      Screenshot della finestra di dialogo di Azure Machine Learning Studio, che mostra le informazioni immesse dall'utente nei campi di testo.

  4. Dopo aver fatto clic su Crea, è necessario attendere che il servizio venga creato, l'operazione potrebbe richiedere un minuto.

  5. Una notifica verrà visualizzata nel portale dopo la creazione dell'istanza del servizio.

    Screenshot della finestra di Microsoft Azure, che mostra una notifica non letta nel menu di spostamento.

  6. Fare clic sulla notifica per esplorare la nuova istanza del servizio.

    Screenshot della notifica Distribuzione riuscita, che informa l'utente che la distribuzione dell'area di lavoro nel gruppo di risorse è riuscita.

  7. Fare clic sul pulsante Vai alla risorsa nella notifica per esplorare la nuova istanza del servizio.

  8. Nella pagina visualizzata, nella sezione Collegamenti aggiuntivi fare clic su Avvia Machine Learning Studio, che indiricherà il browser al portale di Machine Learning Studio.

    Screenshot della finestra di Microsoft Azure, che mostra il collegamento Launch Machine Learning Studio evidenziato nel riquadro del contenuto.

  9. Usare il pulsante Accedi , in alto a destra o al centro, per accedere a Machine Learning Studio (versione classica).

    Screenshot della finestra di Machine Learning Studio, che mostra il pulsante Di accesso evidenziato.

Capitolo 3 - Configurazione del set di dati di Machine Learning Studio (versione classica): Configurazione del set di dati

Uno dei modi in cui funzionano gli algoritmi di Machine Learning consiste nell'analizzare i dati esistenti e quindi tentare di stimare i risultati futuri in base al set di dati esistente. Ciò significa in genere che i dati più esistenti sono disponibili, migliore sarà l'algoritmo a prevedere i risultati futuri.

Per questo corso viene fornita una tabella di esempio denominata ProductsTableCSV e può essere scaricata qui.

Importante

Il file .zip precedente contiene sia ProductsTableCSV che il pacchetto unity, che sarà necessario nel capitolo 6. Questo pacchetto viene fornito anche all'interno di tale capitolo, anche se separato dal file CSV.

Questo set di dati di esempio contiene un record degli oggetti più venduti ogni ora di ogni giorno dell'anno 2017.

Screenshot della finestra di Microsoft Excel, che mostra un set di dati di esempio di oggetti più venduti ogni ora di ogni giorno nell'anno 2017.

Ad esempio, il giorno 1 del 2017, alle ore 13 (ora 13), l'articolo più venduto era sale e pepe.

Questa tabella di esempio contiene 9998 voci.

  1. Tornare al portale di Machine Learning Studio (versione classica) e aggiungere questa tabella come set di dati per ml. A tale scopo, fare clic sul pulsante + Nuovo nell'angolo inferiore sinistro della schermata.

    Screenshot del portale di Microsoft Azure Machine Learning Studio classico, che mostra il pulsante Nuovo evidenziato nel menu.

  2. Una sezione verrà visualizzata dal basso e all'interno del pannello di spostamento a sinistra. Fare clic su Set di dati, quindi a destra di tale elemento, Da file locale.

    Screenshot della finestra di dialogo Nuovo, che mostra le voci di menu Set di dati e Da file locale evidenziate.

  3. Caricare il nuovo set di dati seguendo questa procedura:

    1. Verrà visualizzata la finestra di caricamento, in cui è possibile esplorare il disco rigido per il nuovo set di dati.

      Screenshot della finestra di dialogo Carica un nuovo set di dati, che mostra il pulsante Sfoglia per l'utente per trovare e selezionare i dati da caricare.

    2. Dopo aver selezionato e tornare nella finestra di caricamento, lasciare deselezionata la casella di controllo.

    3. Nel campo di testo seguente immettere ProductsTableCSV.csv come nome per il set di dati (anche se deve essere aggiunto automaticamente).

    4. Usando il menu a discesa per Tipo, selezionare File CSV generico con un'intestazione (.csv).

    5. Premere il segno di spunta nella parte inferiore destra della finestra di caricamento e il set di dati verrà caricato.

Capitolo 4 - Machine Learning Studio (versione classica): Esperimento

Prima di poter compilare il sistema di Machine Learning, è necessario creare un esperimento per convalidare la teoria dei dati. Con i risultati, si saprà se sono necessari più dati o se non esiste alcuna correlazione tra i dati e un possibile risultato.

Per iniziare a creare un esperimento:

  1. Fare di nuovo clic sul pulsante + Nuovo nella parte inferiore sinistra della pagina, quindi fare clic su Esperimento vuoto esperimento>.

    Screenshot della finestra di Microsoft Azure Machine Learning Studio, che mostra la voce di menu Esperimento selezionata.

  2. Verrà visualizzata una nuova pagina con un esperimento vuoto:

  3. Nel pannello a sinistra espandere Set di dati salvati My Datasets> e trascinare ProductsTableCSV nell'area di disegno dell'esperimento.

    Screenshot della finestra Esperimento, che mostra la cartella My Datasets espansa nel menu e nella tabella Products C V nell'area di disegno dell'esperimento.

  4. Nel pannello a sinistra espandere Esempio di trasformazione>dati e Divisione. Trascinare quindi l'elemento Split Data in nell'area di disegno dell'esperimento. L'elemento Split Data suddividerà il set di dati in due parti. Una parte verrà usata per il training dell'algoritmo di Machine Learning. La seconda parte verrà usata per valutare l'accuratezza dell'algoritmo generato.

    Screenshot della finestra Esperimento, che mostra le voci Partition e Sample e Split Data nel menu con Split Data applicato all'area di disegno.

  5. Nel pannello destro (mentre è selezionato l'elemento Split Data nell'area di disegno), modificare la frazione di righe nel primo set di dati di output su 0,7. I dati verranno suddivisi in due parti, la prima parte sarà il 70% dei dati e la seconda parte sarà il 30%. Per assicurarsi che i dati vengano suddivisi in modo casuale, assicurarsi che la casella di controllo Suddivisione casuale rimanga selezionata.

    Screenshot del pannello Proprietà, che mostra la casella di controllo suddivisione casuale compilata e il campo Frazione di righe è stato impostato su 0 punto 7.

  6. Trascinare una connessione dalla base dell'elemento ProductsTableCSV nell'area di disegno all'inizio dell'elemento Split Data .Drag a connection from the base of the ProductsTableCSV item on the canvas to the top of the Split Data item. Questo connetti gli elementi e invierà l'output del set di dati ProductsTableCSV (i dati) all'input Split Data.

    Screenshot dell'area di disegno dell'esperimento, che mostra una connessione disegnata tra Products Table C V V v s v e Split Data.

  7. Nel pannello Esperimenti a sinistra espandere Machine Learning Train (Training di Machine Learning>). Trascinare l'elemento Train Model (Esegui training modello ) nell'area di disegno Experiment (Esperimento). L'area di disegno dovrebbe essere identica a quella riportata di seguito.

    Screenshot dell'area di disegno dell'esperimento, che mostra una connessione disegnata tra Products Table C V V v s v e Split Data, con Train Model di seguito.

  8. Nella parte inferiore sinistra dell'elemento Split Data trascinare una connessione in alto a destra dell'elemento Train Model (Esegui training modello). La prima divisione del 70% dal set di dati verrà usata dal modello di training per eseguire il training dell'algoritmo.

    Screenshot dell'area di disegno dell'esperimento, che mostra una connessione disegnata tra Products Table C V v s v, Split Data e Train Model.

  9. Selezionare l'elemento Train Model (Esegui training modello ) nell'area di disegno e nel pannello Proprietà (sul lato destro della finestra del browser) fare clic sul pulsante Avvia selettore colonna.

  10. Nella casella di testo digitare prodotto e quindi premere INVIO, il prodotto verrà impostato come colonna per eseguire il training delle stime. A questo punto, fare clic sul segno di spunta nell'angolo inferiore destro per chiudere la finestra di dialogo di selezione.

    Screenshot della finestra di dialogo Seleziona una singola colonna, che mostra la colonna del prodotto evidenziata nel menu colonne.

  11. Si eseguirà il training di un algoritmo Multiclass Logistic Regression per stimare il prodotto più venduto in base all'ora del giorno e alla data. Oltre l'ambito di questo documento per spiegare i dettagli dei diversi algoritmi forniti dal studio di Azure Machine Learning, tuttavia, è possibile ottenere altre informazioni dal foglio informativo sugli algoritmi di Machine Learning

  12. Nel pannello degli elementi dell'esperimento a sinistra espandere Machine Learning>Initialize Model>Classification (Inizializza classificazione modello) e trascinare l'elemento Multiclass Logistic Regression (Regressione logistica multiclasse) nell'area di disegno dell'esperimento.

  13. Connettere l'output, dalla parte inferiore della regressione logistica multiclasse, all'input in alto a sinistra dell'elemento Train Model .Connect the output, from the Bottom of the Multiclass Logistic Regression, to the top-left input of the Train Model item.

    Screenshot dell'area di disegno dell'esperimento, che mostra Training modello connesso alla regressione logistica multiclasse e alla suddivisione dei dati.

  14. Nell'elenco di elementi dell'esperimento nel pannello a sinistra espandere Punteggio di Machine Learning>e trascinare l'elemento Score Model (Punteggio modello) nell'area di disegno.

  15. Connettere l'output, dalla parte inferiore del modello di training, all'input in alto a sinistra del modello score.

  16. Connettere l'output in basso a destra da Split Data (Split Data) all'input in alto a destra dell'elemento Score Model (Punteggio modello ).

    Screenshot dell'area di disegno dell'esperimento, che mostra il punteggio del modello connesso a Train Model (Esegui training modello) e Split Data (Split Data).

  17. Nell'elenco di elementi Experiment nel pannello a sinistra espandere Machine Learning>Evaluate e trascinare l'elemento Evaluate Model (Valuta modello) nell'area di disegno.

  18. Connettere l'output dal modello di punteggio all'input in alto a sinistra del modello di valutazione.

    Screenshot dell'area di disegno dell'esperimento, che mostra il modello evaluate connesso al modello di punteggio.

  19. È stato creato il primo esperimento di Machine Learning. È ora possibile salvare ed eseguire l'esperimento. Nel menu nella parte inferiore della pagina fare clic sul pulsante Salva per salvare l'esperimento e quindi fare clic su Esegui per avviare l'esperimento.

    Screenshot del menu Canvas dell'esperimento, che mostra i pulsanti Salva ed Esegui evidenziati.

  20. È possibile visualizzare lo stato dell'esperimento in alto a destra nell'area di disegno. Attendere alcuni istanti per il completamento dell'esperimento.

    Se si dispone di un set di dati grande (reale), è probabile che l'esperimento possa richiedere ore per l'esecuzione.

    Screenshot della finestra Canvas dell'esperimento, che mostra lo stato dell'esperimento nell'angolo in alto a destra.

  21. Fare clic con il pulsante destro del mouse sull'elemento Evaluate Model (Valuta modello ) nell'area di disegno e nel menu di scelta rapida passare il mouse su Evaluation Results (Risultati valutazione), quindi selezionare Visualize ( Visualizza).

    Screenshot del menu di scelta rapida valuta modello, che mostra i risultati della valutazione evidenziati e le voci di menu Visualizza.

  22. I risultati della valutazione verranno visualizzati con i risultati stimati rispetto ai risultati effettivi. In questo modo viene usato il 30% del set di dati originale, suddiviso in precedenza, per la valutazione del modello. È possibile notare che i risultati non sono ottimali, idealmente il numero più alto in ogni riga è l'elemento evidenziato nelle colonne.

    Screenshot del grafico Risultati, che mostra i risultati dell'esperimento in un grafico di caselle con percentuali.

  23. Chiudere i risultati.

  24. Per usare il modello di Machine Learning appena sottoposto a training, è necessario esporlo come servizio Web. A tale scopo, fare clic sulla voce di menu Configura servizio Web nel menu nella parte inferiore della pagina e fare clic su Servizio Web predittivo.

    Screenshot del menu Esperimento, che mostra la voce di menu Configura servizio Web evidenziata.

  25. Verrà creata una nuova scheda e verrà unito il modello di training per creare il nuovo servizio Web.

  26. Nel menu nella parte inferiore della pagina fare clic su Salva, quindi fare clic su Esegui. Lo stato verrà aggiornato nell'angolo superiore destro dell'area di disegno dell'esperimento.

    Screenshot del menu Esperimento, che mostra il pulsante di menu Esegui evidenziato e la voce di menu Esegui.

  27. Al termine dell'esecuzione, verrà visualizzato un pulsante Deploy Web Service (Distribuisci servizio Web) nella parte inferiore della pagina. Si è pronti per distribuire il servizio Web. Fare clic su Distribuisci servizio Web (versione classica) nel menu nella parte inferiore della pagina.

    Screenshot del menu Esperimento, che mostra la voce di menu Distribuisci servizio Web classico evidenziata dal pulsante di menu Distribuisci servizio Web.

    Il browser potrebbe richiedere di consentire un popup, che dovrebbe essere consentito, anche se potrebbe essere necessario premere di nuovo Distribuisci servizio Web, se la pagina di distribuzione non viene visualizzata.

  28. Dopo aver creato l'esperimento, si verrà reindirizzati a una pagina dashboard in cui verrà visualizzata la chiave API. Copiarlo in un Blocco note per il momento, sarà necessario nel codice molto presto. Dopo aver annotato la chiave API, fare clic sul pulsante REQUEST/RESPONSE nella sezione Endpoint predefinito sotto la chiave.

    Screenshot della finestra di Microsoft Azure Machine Learning Studio, che mostra il tasto A P E il collegamento Richiesta risposta barra evidenziata.

    Nota

    Se si fa clic su Test in questa pagina, sarà possibile immettere i dati di input e visualizzare l'output. Immettere il giorno e l'ora. Lasciare vuota la voce del prodotto . Fare quindi clic sul pulsante Conferma . L'output nella parte inferiore della pagina mostrerà il codice JSON che rappresenta la probabilità che ogni prodotto sia la scelta.

  29. Verrà aperta una nuova pagina Web, con le istruzioni e alcuni esempi sulla struttura della richiesta richiesta richiesta da Machine Learning Studio (versione classica). Copiare l'URI della richiesta visualizzato in questa pagina nel Blocco note.

    Screenshot della pagina Request Response A P I Documentation (Richiesta risposta A P I) che mostra l'opzione Request U R I evidenziata.

È stato creato un sistema di Machine Learning che fornisce il prodotto più probabile da vendere in base ai dati di acquisto cronologici, correlati all'ora del giorno e del giorno dell'anno.

Per chiamare il servizio Web, è necessario l'URL per l'endpoint del servizio e una chiave API per il servizio. Fare clic sulla scheda Consume (Consuma ) dal menu in alto.

Nella pagina Informazioni sul consumo verranno visualizzate le informazioni necessarie per chiamare il servizio Web dal codice. Eseguire una copia della chiave primaria e dell'URL di richiesta-risposta . Questi saranno necessari nel capitolo successivo.

Capitolo 5 - Configurazione del progetto Unity

Configurare e testare il visore VR immersive Realtà mista.

Nota

Per questo corso non saranno necessari controller di movimento. Se è necessario supportare la configurazione del visore VR immersive, fare clic qui.

  1. Aprire Unity e creare un nuovo progetto Unity denominato MR_MachineLearning. Assicurarsi che il tipo di progetto sia impostato su 3D.

  2. Con Unity aperto, vale la pena verificare che l'editor di script predefinito sia impostato su Visual Studio. Passare a Modifica>preferenze e quindi dalla nuova finestra passare a Strumenti esterni. Modificare l'editor di script esterni in Visual Studio 2017. Chiudere la finestra Preferenze .

  3. Passare quindi a Impostazioni compilazione file>e passare alla piattaforma per piattaforma UWP (Universal Windows Platform), facendo clic sul pulsante Cambia piattaforma.

  4. Assicurarsi anche che:

    1. Il dispositivo di destinazione è impostato su Qualsiasi dispositivo.

      Per Microsoft HoloLens impostare Dispositivo di destinazione su HoloLens.

    2. Il tipo di compilazione è impostato su D3D.

    3. L'SDK è impostato su Più recente installato.

    4. La versione di Visual Studio è impostata su Versione più recente installata.

    5. Compilazione ed esecuzione è impostata su Computer locale.

    6. Non preoccuparti della configurazione delle scene in questo momento, perché vengono fornite in un secondo momento.

    7. Le impostazioni rimanenti devono essere lasciate come predefinite per il momento.

      Screenshot della finestra di dialogo Impostazioni di compilazione, che mostra la voce di menu piattaforma UWP (Universal Windows Platform) selezionata.

  5. Nella finestra Impostazioni di compilazione fare clic sul pulsante Impostazioni lettore per aprire il pannello correlato nello spazio in cui si trova il controllo.

  6. In questo pannello è necessario verificare alcune impostazioni:

    1. Nella scheda Altre impostazioni :

      1. La versione del runtime di scripting deve essere sperimentale (equivalente a .NET 4.6)

      2. Il back-end di scripting deve essere .NET

      3. Il livello di compatibilità api deve essere .NET 4.6

        Screenshot della scheda Altre impostazioni, che mostra le impostazioni abilitate in base ai passaggi descritti.

    2. Nella scheda Impostazioni di pubblicazione, in Funzionalità selezionare:

      • InternetClient

        Screenshot della scheda Impostazioni di pubblicazione, che mostra che la funzionalità Client Internet è abilitata sotto Funzionalità.

    3. Più avanti nel pannello, in Impostazioni XR (disponibili sotto Impostazioni di pubblicazione), selezionare Virtual Reality Supported (Realtà virtuale supportata), assicurarsi che Windows Realtà mista SDK sia stato aggiunto

      Screenshot della scheda X R Settings (Impostazioni X R), che mostra windows Realtà mista S D K sotto Virtual Reality S D K s è abilitato.

  7. Tornare in Build Settings Unity C# Projects (Impostazioni di compilazione) I progetti C# non sono più disattivati. Selezionare la casella di controllo accanto a questa opzione.

  8. Chiudere la finestra Build Settings (Impostazioni di compilazione).

  9. Salvare il progetto (FILE > SAVE PROJECT).

Capitolo 6 - Importazione del pacchetto Unity MLProducts

Per questo corso è necessario scaricare un pacchetto di asset Unity denominato Azure-MR-307.unitypackage. Questo pacchetto è completo con una scena, con tutti gli oggetti in quella predefinita, in modo da potersi concentrare su tutto il lavoro. Lo script ShelfKeeper viene fornito, anche se contiene solo le variabili pubbliche, allo scopo della struttura di configurazione della scena. Sarà necessario eseguire tutte le altre sezioni.

Per importare il pacchetto:

  1. Con il dashboard unity davanti a te, fai clic su Asset nel menu nella parte superiore della schermata, quindi fai clic su Importa pacchetto, pacchetto personalizzato.

    Screenshot del dashboard di Unity, che mostra le voci di menu Importa pacchetto e pacchetto personalizzato evidenziate.

  2. Usare la selezione file per selezionare il pacchetto Azure-MR-307.unitypackage e fare clic su Apri.

  3. Verrà visualizzato un elenco di componenti per questo asset. Confermare l'importazione facendo clic su Importa.

    Screenshot della finestra di dialogo Importa pacchetto Unity, che mostra che il pacchetto di Azure Machine Learning è in fase di importazione.

  4. Al termine dell'importazione, si noterà che alcune nuove cartelle sono state visualizzate nel pannello del progetto Unity. Questi sono i modelli 3D e i rispettivi materiali che fanno parte della scena pre-creata si lavorerà su. In questo corso si scriverà la maggior parte del codice.

    Screenshot del pannello del progetto Unity, che mostra le cartelle appena importate nella cartella Assets.

  5. All'interno della cartella Pannello di progetto fare clic sulla cartella Scene e fare doppio clic sulla scena all'interno (denominata MR_MachineLearningScene). La scena verrà aperta (vedere l'immagine seguente). Se mancano i diamanti rossi, basta fare clic sul pulsante Gizmos, in alto a destra nel pannello del gioco.

    Screenshot della finestra Scene di Unity, che mostra la voce di menu Gizmos evidenziata nella barra di spostamento superiore.

Capitolo 7 - Controllo delle DLL in Unity

Per sfruttare l'uso di librerie JSON (usate per la serializzazione e la deserializzazione), è stata implementata una DLL Newtonsoft con il pacchetto in uso. La libreria deve avere la configurazione corretta, anche se vale la pena controllare (in particolare se si verificano problemi con il codice non funziona).

A questo scopo:

  • Fare clic con il pulsante sinistro del mouse sul file Newtonsoft all'interno della cartella Plugins e osservare il pannello Inspector (Controllo). Assicurarsi che qualsiasi piattaforma sia selezionata. Passare alla scheda UWP e verificare anche che Non elaborare sia selezionata.

    Importazione delle DLL in Unity

Capitolo 8 - Creare la classe ShelfKeeper

La classe ShelfKeeper ospita metodi che controllano l'interfaccia utente e i prodotti generati nella scena.

Come parte del pacchetto importato, sarà stata assegnata questa classe, anche se è incompleta. È ora il momento di completare la classe:

  1. Fare doppio clic sullo script ShelfKeeper , all'interno della cartella Scripts , per aprirlo con Visual Studio 2017.

  2. Sostituire tutto il codice esistente nello script con il codice seguente, che imposta l'ora e la data e ha un metodo per mostrare un prodotto.

    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);
        }
    }
    
  3. Assicurarsi di salvare le modifiche in Visual Studio prima di tornare a Unity.

  4. Tornare all'editor di Unity per verificare che la classe ShelfKeeper sia simile alla seguente:

    Screenshot della classe Shelf Keeper, che mostra che le destinazioni di riferimento sono impostate su Data Text Mesh e Time Text Mesh.

    Importante

    Se lo script non ha le destinazioni di riferimento (ad esempio Data (Mesh di testo), trascinare semplicemente gli oggetti corrispondenti dal Pannello gerarchia nei campi di destinazione. Vedere di seguito per una spiegazione, se necessario:

    1. Aprire la matrice Spawn Point all'interno dello script del componente ShelfKeeper facendo clic con il pulsante sinistro del mouse. Verrà visualizzata una sezione secondaria denominata Dimensioni, che indica le dimensioni della matrice. Digitare 3 nella casella di testo accanto a Dimensioni e premere INVIO e tre slot verranno creati sotto.

    2. All'interno della gerarchia espandere l'oggetto Time Display (facendo clic con il pulsante sinistro della freccia accanto). Fare quindi clic sulla fotocamera principale dall'interno della gerarchia, in modo che il controllo mostri le informazioni.

    3. Selezionare la fotocamera principale nel pannello Gerarchia. Trascinare gli oggetti Data e Ora dal pannello Gerarchia agli slot di testo di data e ora all'interno del controllo della fotocamera principale nel componente ShelfKeeper.

    4. Trascinare spawn Points dal pannello gerarchia (sotto l'oggetto Shelf) alle destinazioni di riferimento 3 elemento sotto la matrice Spawn Point, come illustrato nell'immagine.

      Screenshot del pannello Gerarchia, che mostra che le voci di menu Date, Time e i tre punti spawn sono nella classe Shelf Keeper.

Capitolo 9 - Creare la classe ProductPrediction

La classe successiva che si intende creare è la classe ProductPrediction .

Questa classe è responsabile di:

  • Esecuzione di query sull'istanza del servizio Machine Learning, specificando la data e l'ora correnti.

  • Deserializzazione della risposta JSON in dati utilizzabili.

  • Interpretazione dei dati, recupero dei 3 prodotti consigliati.

  • Chiamata dei metodi della classe ShelfKeeper per visualizzare i dati nella scena.

Per creare questa classe:

  1. Passare alla cartella Scripts nel pannello del progetto.

  2. Fare clic con il pulsante destro del mouse all'interno della cartella Crea>script C#. Chiamare lo script ProductPrediction.

  3. Fare doppio clic sul nuovo script ProductPrediction per aprirlo con Visual Studio 2017.

  4. Se viene visualizzata la finestra di dialogo Modifica file rilevata , fare clic su *Ricarica soluzione.

  5. Aggiungere gli spazi dei nomi seguenti all'inizio della classe 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;
    
  6. All'interno della classe ProductPrediction inserire i due oggetti seguenti composti da una serie di classi annidate. Queste classi vengono usate per serializzare e deserializzare il codice JSON per il servizio Machine Learning.

        /// <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; }
        }
    
  7. Aggiungere quindi le variabili seguenti sopra il codice precedente (in modo che il codice correlato a JSON si trova nella parte inferiore dello script, sotto tutti gli altri codice e non sia possibile):

        /// <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;
    

    Importante

    Assicurarsi di inserire la chiave primaria e l'endpoint di richiesta-risposta, dal portale di Machine Learning, nelle variabili qui. Le immagini seguenti mostrano da dove sarebbe stata presa la chiave e l'endpoint.

    Screenshot di Microsoft Azure Machine Learning Studio, che mostra il collegamento Richiesta risposta barra sotto la pagina della Guida di A P I.

    Screenshot della pagina Request Response A P I Documentation ,che mostra l'opzione POST Request U R I evidenziata.

  8. Inserire questo codice all'interno del metodo Start(). Il metodo Start() viene chiamato quando la classe inizializza:

        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));
        }
    
  9. Di seguito è riportato il metodo che raccoglie la data e l'ora da Windows e la converte in un formato che l'esperimento di Machine Learning può usare per confrontare i dati archiviati nella tabella.

        /// <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();
        }
    
  10. È possibile eliminare il metodo Update() perché questa classe non la userà.

  11. Aggiungere il metodo seguente che comunicherà la data e l'ora correnti all'endpoint di Machine Learning e riceverà una risposta in formato 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);
            }
        }
    
  12. Aggiungere il metodo seguente, che è responsabile della deserializzazione della risposta JSON e della comunicazione del risultato della deserializzazione alla classe ShelfKeeper . Questo risultato sarà il nome dei tre articoli stimati per vendere al massimo alla data e all'ora correnti. Inserire il codice seguente nella classe ProductPrediction , sotto il metodo precedente.

        /// <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();
        }
    
  13. Salvare Visual Studio e tornare a Unity.

  14. Trascinare lo script della classe ProductPrediction dalla cartella Script nell'oggetto Main Camera .

  15. Salvare la scena e il progetto File>Salva scena/File>Salva progetto.

Capitolo 10 - Creare la soluzione UWP

È ora il momento di compilare il progetto come soluzione UWP, in modo che possa essere eseguito come applicazione autonoma.

Per compilare:

  1. Salvare la scena corrente facendo clic su Salva>scene.

  2. Passare a Impostazioni di compilazione file>

  3. Selezionare la casella denominata Progetti C# unity. Questo è importante perché consente di modificare le classi al termine della compilazione.

  4. Fare clic su Aggiungi scene aperte,

  5. Fare clic su Compila.

    Screenshot della finestra di dialogo Impostazioni di compilazione, che mostra la voce di menu piattaforma UWP (Universal Windows Platform) evidenziata.

  6. Verrà richiesto di selezionare la cartella in cui si vuole compilare la soluzione.

  7. Creare una cartella BUILD e all'interno di tale cartella creare un'altra cartella con un nome appropriato di propria scelta.

  8. Fare clic sulla nuova cartella e quindi su Seleziona cartella per iniziare la compilazione in tale percorso.

    Screenshot della finestra Esplora file, che mostra la cartella Build evidenziata.

    Screenshot della finestra Esplora file, che mostra il contenuto della cartella Compilazioni e il pulsante Seleziona cartella evidenziato.

  9. Una volta completata la compilazione di Unity (potrebbe essere necessario del tempo), verrà aperta una finestra Esplora file nella posizione della compilazione (controllare la barra delle applicazioni, perché potrebbe non essere sempre visualizzata sopra le finestre, ma invierà una notifica dell'aggiunta di una nuova finestra).

Capitolo 11 - Distribuire l'applicazione

Per distribuire l'applicazione:

  1. Passare alla nuova compilazione unity ( cartella App ) e aprire il file della soluzione con Visual Studio.

  2. Con Visual Studio aperto, è necessario ripristinare i pacchetti NuGet, che possono essere eseguiti facendo clic con il pulsante destro del mouse sulla soluzione MachineLearningLab_Build, dall'Esplora soluzioni (a destra di Visual Studio) e quindi scegliendo Ripristina pacchetti NuGet:

    Screenshot della finestra di Visual Studio, che mostra la voce di menu Ripristina pacchetti Nu Get evidenziata.

  3. Nella configurazione della soluzione selezionare Debug.

  4. Nella piattaforma della soluzione selezionare x86, Computer locale.

    Per Microsoft HoloLens, potrebbe risultare più semplice impostare questa opzione su Computer remoto, in modo che non si sia collegati al computer. Tuttavia, è necessario eseguire anche le operazioni seguenti:

    • Conoscere l'indirizzo IP di HoloLens, che è possibile trovare all'interno di Impostazioni > Rete e > Internet Wi-Fi > Advanced Options. IPv4 è l'indirizzo da usare.
    • Assicurarsi che la modalità sviluppatore sia attivata. Disponibile in Impostazioni > Aggiornamento e sicurezza > per gli sviluppatori.

    Screenshot del menu di Microsoft Visual Studio, che mostra che il computer locale è selezionato nella piattaforma della soluzione.

  5. Passare al menu Compila e fare clic su Distribuisci soluzione per trasferire localmente l'applicazione nel PC.

  6. L'app dovrebbe ora essere visualizzata nell'elenco delle app installate, pronte per l'avvio.

Quando si esegue l'applicazione Realtà mista, verrà visualizzata la panchina configurata nella scena unity e, dall'inizializzazione, verranno recuperati i dati configurati in Azure. I dati verranno deserializzati all'interno dell'applicazione e i tre risultati principali per la data e l'ora correnti verranno forniti visivamente, come tre modelli sul banco.

Applicazione Di Machine Learning completata

È stata creata un'app di realtà mista che sfrutta Azure Machine Learning per eseguire stime dei dati e visualizzarla nella scena.

Screenshot della finestra di Microsoft Visual Studio, che mostra uno scaffale con tre oggetti e una scheda con il testo 15 ore 23 febbraio.

Esercizio

Esercizio 1

Sperimentare con l'ordinamento dell'applicazione e visualizzare le tre stime inferiori sullo scaffale, in quanto questi dati potrebbero essere utili anche.

Esercizio 2

L'uso di tabelle di Azure popola una nuova tabella con le informazioni meteo e crea un nuovo esperimento usando i dati.