HoloLens (1º género) e Azure 307: Machine learning


Nota

Os tutoriais da Academia de Realidade Mista foram concebidos com HoloLens (1ª gen) e Auscultadores Imersivos de Realidade Mista em mente. Como tal, sentimos que é importante deixar estes tutoriais no lugar para os desenvolvedores que ainda estão à procura de orientação no desenvolvimento para esses dispositivos. Estes tutoriais não serão atualizados com os mais recentes instrumentos ou interações a serem utilizados para HoloLens 2. Eles serão mantidos para continuar a trabalhar nos dispositivos suportados. Haverá uma nova série de tutoriais que serão publicados no futuro que demonstrarão como se desenvolver para HoloLens 2. Este aviso será atualizado com um link para esses tutoriais quando forem publicados.


produto final -início

Neste curso, você aprenderá a adicionar Machine Learning (ML) capacidades a uma aplicação de realidade mista usando Azure Machine Learning Studio (clássico).

Azure Machine Learning Studio (clássico) é um serviço da Microsoft, que fornece aos desenvolvedores um grande número de algoritmos de aprendizagem automática, que podem ajudar com a entrada de dados, saída, preparação e visualização. A partir destes componentes, é então possível desenvolver uma experiência de análise preditiva, iterar nele, e usá-lo para treinar o seu modelo. Após o treino, pode tornar o seu modelo operacional dentro da nuvem Azure, para que possa depois obter novos dados. Para mais informações, visite a página Azure Machine Learning Studio (clássico).

Depois de concluído este curso, terá uma aplicação de auscultadores imersivos de realidade mista, e terá aprendido como fazer o seguinte:

  1. Forneça uma tabela de dados de vendas ao portal Azure Machine Learning Studio (clássico) e desenhe um algoritmo para prever futuras vendas de itens populares.
  2. Crie uma unidade Project, que possa receber e interpretar dados de previsão do serviço ML.
  3. Exiba os dados de pré-predicação visualmente dentro do Project De Unidade, através do fornecimento dos itens de vendas mais populares, numa prateleira.

Na sua aplicação, cabe-lhe a si integrar os resultados com o seu design. Este curso destina-se a ensinar-lhe como integrar um Serviço Azure com o seu Project de Unidade. É seu trabalho usar o conhecimento que ganha com este curso para melhorar a sua aplicação de realidade mista.

Este curso é um tutorial independente, que não envolve diretamente nenhum outro Laboratório de Realidade Mista.

Suporte de dispositivos

Curso HoloLens Auscultadores imersivos
MR e Azure 307: Machine learning ✔️ ✔️

Nota

Embora este curso se centre principalmente em auscultadores imersivos Windows Mixed Reality (VR), também pode aplicar o que aprende neste curso para Microsoft HoloLens. À medida que acompanha o curso, verá notas sobre quaisquer alterações que possa precisar de empregar para apoiar HoloLens. Ao utilizar HoloLens, poderá notar algum eco durante a captura de voz.

Pré-requisitos

Nota

Este tutorial é projetado para desenvolvedores que têm experiência básica com Unidade e C#. Tenha também em atenção que os pré-requisitos e instruções escritas neste documento representam o que foi testado e verificado no momento da escrita (maio de 2018). É livre de utilizar o software mais recente, tal como listado no artigo de instalação ,embora não deva presumir-se que as informações neste curso irão corresponder perfeitamente ao que encontrará no software mais recente do que o listado abaixo.

Recomendamos o seguinte hardware e software para este curso:

Antes de começar

Para evitar encontrar problemas na construção deste projeto, sugere-se fortemente que crie o projeto mencionado neste tutorial numa pasta de raiz ou de raiz (caminhos de pastas longas podem causar problemas no tempo de construção).

Capítulo 1 - Configuração da conta Armazenamento Azure

Para utilizar a API Tradutor AZure, terá de configurar uma instância do serviço a disponibilizar à sua aplicação.

  1. Faça login no Portal Azure.

    Nota

    Se ainda não tiver uma conta Azure, terá de criar uma. Se estiver a seguir este tutorial numa sala de aula ou em laboratório, peça ajuda ao seu instrutor ou a um dos proctors para criar a sua nova conta.

  2. Assim que iniciar sessão, clique em Armazenamento Contas no menu esquerdo.

    Configuração da conta de Armazenamento Azure

    Nota

    A palavra Novo pode ter sido substituída por Criar um recurso, em portais mais recentes.

  3. No separador Contas Armazenamento, clique em Adicionar.

    Configuração da conta de Armazenamento Azure

  4. No painel 'Criar Armazenamento Contas':

    1. Insira um Nome para a sua conta, esteja ciente de que este campo só aceita números e letras minúsculas.

    2. Para o modelo de implementação, selecione Resource manager.

    3. Para o tipo conta, selecione Armazenamento (finalidade geral v1).

    4. Em Desempenho, selecione Standard.

    5. Para replicação, selecione Read-access-geo-redundante storage (RA-GRS).

    6. Deixe a transferência Secure necessária como Desativada.

    7. Selecione uma subscrição.

    8. Escolha um Grupo de Recursos ou crie um novo. Um grupo de recursos fornece uma forma de monitorizar, controlar o acesso, fornecer e gerir a faturação para uma recolha de ativos da Azure. Recomenda-se manter todos os serviços Azure associados a um único projeto (por exemplo, como estes laboratórios) sob um grupo de recursos comuns).

      Se desejar ler mais sobre os Grupos de Recursos Azure, visite o artigo do grupo de recursos.

    9. Determine a localização do seu grupo de recursos (se estiver a criar um novo Grupo de Recursos). A localização seria idealmente na região onde a aplicação iria decorrer. Alguns ativos da Azure só estão disponíveis em certas regiões.

  5. Também terá de confirmar que compreendeu os Termos e Condições aplicados a este Serviço.

    Configuração da conta de Armazenamento Azure

  6. Uma vez clicado no Create, terá de esperar pela criação do serviço, pode demorar um minuto.

  7. Uma notificação aparecerá no portal assim que a instância de Serviço for criada.

    Configuração da conta de Armazenamento Azure

Capítulo 2 - The Azure Machine Learning Studio (clássico)

Para utilizar o Azure Machine Learning, terá de configurar uma instância do serviço Machine Learning para ser disponibilizado à sua aplicação.

  1. No Portal Azure, clique em New no canto superior esquerdo e procure Machine Learning Studio Workspace, pressione Enter.

    The Azure Machine Learning Studio (clássico)

  2. A nova página fornecerá uma descrição do serviço Machine Learning Studio Workspace. Na parte inferior esquerda deste pedido, clique no botão Criar, para criar uma associação com este serviço.

  3. Uma vez clicado no Create, aparecerá um painel onde precisa de fornecer alguns detalhes sobre o seu novo serviço Machine Learning Studio:

    1. Insira o nome do espaço de trabalho desejado para esta instância de serviço.

    2. Selecione uma subscrição.

    3. Escolha um Grupo de Recursos ou crie um novo. Um grupo de recursos fornece uma forma de monitorizar, controlar o acesso, fornecer e gerir a faturação para uma recolha de ativos da Azure. Recomenda-se manter todos os serviços Azure associados a um único projeto (por exemplo, como estes laboratórios) sob um grupo de recursos comuns).

      Se desejar ler mais sobre os Grupos de Recursos Azure, visite o artigo do grupo de recursos.

    4. Determine a localização do seu grupo de recursos (se estiver a criar um novo Grupo de Recursos). A localização seria idealmente na região onde a aplicação iria decorrer. Alguns ativos da Azure só estão disponíveis em certas regiões. Deve utilizar o mesmo grupo de recursos que utilizou para criar o Azure Armazenamento no Capítulo Anterior.

    5. Para a secção Armazenamento conta, clique em Utilizar o presente, clique no menu suspenso e, a partir daí, clique na conta Armazenamento criada no último Capítulo.

    6. Selecione o nível de preços apropriado do Espaço de Trabalho para si, a partir do menu suspenso.

    7. Dentro da secção de plano de serviço Web, clique em Criar novo e, em seguida, insira um nome para ele no campo de texto.

    8. A partir da secção de preços do plano de serviço Web, selecione o nível de preço da sua escolha. Um nível de teste de desenvolvimento chamado DEVTEST Standard deve estar disponível gratuitamente para si.

    9. Também terá de confirmar que compreendeu os Termos e Condições aplicados a este Serviço.

    10. Clique em Criar.

      The Azure Machine Learning Studio (clássico)

  4. Uma vez clicado no Create, terá de esperar pela criação do serviço, pode demorar um minuto.

  5. Uma notificação aparecerá no portal assim que a instância de Serviço for criada.

    The Azure Machine Learning Studio (clássico)

  6. Clique na notificação para explorar a sua nova instância de Serviço.

    The Azure Machine Learning Studio (clássico)

  7. Clique no botão 'Ir ao recurso' na notificação para explorar a sua nova instância de Serviço.

  8. Na página apresentada, na secção Links Adicionais, clique em Lançamento Machine Learning Studio, que irá direcionar o seu navegador para o portal Machine Learning Studio.

    The Azure Machine Learning Studio (clássico)

  9. Utilize o botão Sign In, na parte superior direita ou no centro, para iniciar sessão no seu Machine Learning Studio (clássico).

    The Azure Machine Learning Studio (clássico)

Capítulo 3 - O Estúdio Machine Learning (clássico): Configuração do Conjunto de Dados

Uma das formas Machine Learning algoritmos funcionam é analisando os dados existentes e, em seguida, tentando prever resultados futuros com base no conjunto de dados existente. Isto geralmente significa que quanto mais dados existentes tiver, melhor será o algoritmo para prever resultados futuros.

Para este curso, é fornecida uma tabela de amostras, para este curso, denominada ProductsTableCSV e pode ser descarregada aqui.

Importante

O ficheiro de .zip acima contém tanto o ProductsTableCCSV como o .unitypackage, que necessitará no capítulo 6. Esta embalagem é também fornecida no presente capítulo, embora separada do ficheiro CSV.

Este conjunto de dados da amostra contém um registo dos objetos mais vendidos a cada hora de cada dia do ano de 2017.

The Machine Learning Studio (clássico): Configuração do Dataset

Por exemplo, no dia 1 de 2017, às 13h00 (hora 13), o item mais vendido foi o sal e a pimenta.

Esta tabela de amostras contém 9998 entradas.

  1. Volte para o portal Machine Learning Studio (clássico) e adicione esta tabela como um Conjunto de Dados para o seu ML. Faça isto clicando no botão + Novo no canto inferior esquerdo do ecrã.

    The Machine Learning Studio (clássico): Configuração do Dataset

  2. Uma secção virá de baixo, e dentro disso há painel de navegação à esquerda. Clique no Conjunto de Dados e, em seguida, à direita do mesmo, a partir do Arquivo Local.

    The Machine Learning Studio (clássico): Configuração do Dataset

  3. Faça o upload do novo Dataset seguindo estes passos:

    1. A janela de upload aparecerá, onde pode navegar no seu disco rígido para o novo conjunto de dados.

      The Machine Learning Studio (clássico): Configuração do Dataset

    2. Uma vez selecionado, e de volta à janela do upload, deixe a caixa de verificação por escolher.

    3. No campo de texto abaixo, introduza ProductsTableCSV.csv como o nome do conjunto de dados (embora deva ser adicionado automaticamente).

    4. Utilizando o menu suspenso para tipo, selecione Ficheiro CSV genérico com um cabeçalho (.csv).

    5. Pressione o tique-taque no canto inferior direito da janela de upload e o seu Conjunto de Dados será carregado.

Capítulo 4 - The Machine Learning Studio (clássico): A Experiência

Antes de poder construir o seu sistema de aprendizagem automática, terá de construir uma experiência para validar a sua teoria sobre os seus dados. Com os resultados, saberá se precisa de mais dados, ou se não há correlação entre os dados e um possível resultado.

Para começar a criar uma experiência:

  1. Clique novamente no botão + Novo na parte inferior esquerda da página e, em seguida, clique em Experiment > Blank Experiment.

    The Machine Learning Studio (clássico): The Experiment

  2. Uma nova página será exibida com uma experiência em branco:

  3. A partir do painel à esquerda expanda conjuntos de dados guardados > os meus conjuntos de dados e arraste o ProductsTableCSV para a Tela experimentária.

    The Machine Learning Studio (clássico): The Experiment

  4. No painel à esquerda, expanda a amostra de transformação de dados > e a divisão. Em seguida, arraste o item Dados Divididos para a Tela experimentá-lo. O item Dados Divididos dividirá o conjunto de dados em duas partes. Uma parte que vais usar para treinar o algoritmo de aprendizagem automática. A segunda parte será usada para avaliar a precisão do algoritmo gerado.

    The Machine Learning Studio (clássico): The Experiment

  5. No painel direito (enquanto o item Dados Divididos na tela é selecionado), edite a Fração de linhas no primeiro conjunto de dados de saída para 0.7. Isto dividirá os dados em duas partes, a primeira será de 70% dos dados, e a segunda será a restante de 30%. Para garantir que os dados são divididos aleatoriamente, certifique-se de que a caixa de verificação split randomized permanece verificada.

    The Machine Learning Studio (clássico): The Experiment

  6. Arraste uma ligação da base do item ProductsTableCSV na tela até ao topo do item Dados Divididos. Isto ligará os itens e enviará a saída do conjunto de dados ProductsTableCSV (os dados) para a entrada de Dados Divididos.

    The Machine Learning Studio (clássico): The Experiment

  7. No painel Experiments do lado esquerdo, expanda Machine Learning > Train. Arraste o item do Modelo de Comboio para a tela experiment. A sua tela deve ser igual à de baixo.

    The Machine Learning Studio (clássico): The Experiment

  8. A partir do inferior esquerdo _ do _ Dados Divididos item arraste uma ligação para o canto superior direito do item Modelo de Comboio. Os primeiros 70% de divisão do conjunto de dados serão usados pelo Modelo de Comboio para treinar o algoritmo.

    The Machine Learning Studio (clássico): The Experiment

  9. Selecione o item Modelo de Comboio na tela e no painel Propriedades (no lado direito da janela do seu navegador) clique no botão seletor de colunas Launch.

  10. No produto do tipo caixa de texto e, em seguida, prima Enter, o produto será definido como uma coluna para treinar as previsões. Em seguir, clique no tique-taque no canto inferior direito para fechar o diálogo de seleção.

    The Machine Learning Studio (clássico): The Experiment

  11. Você vai treinar um algoritmo de regressão logística multiclasse para prever o produto mais vendido com base na hora do dia e na data. Está fora do âmbito deste documento explicar os detalhes dos diferentes algoritmos fornecidos pelo estúdio Azure Machine Learning, no entanto, você pode descobrir mais a partir da Machine Learning Algoritmo Folha de Batota

  12. Do painel de itens de experiência à esquerda, expanda Machine Learning > Classificação do Modelo inicialize, > e arraste o item de Regressão Logística Multiclass para a tela de experimentação.

  13. Ligação a saída, desde a parte inferior da Regressão Logística Multiclass, até à entrada superior esquerda do item Train Model.

    The Machine Learning Studio (clássico): The Experiment

  14. Na lista de itens experimentais no painel à esquerda, expanda a Machine Learning > Score, e arraste o item do Modelo de Pontuação para a tela.

  15. Ligação a saída, desde a parte inferior do Modelo de Comboio, até à entrada superior esquerda do Modelo de Pontuação.

  16. Ligação a saída inferior-direita de Dados Divididos, para a entrada superior direita do item 'Modelo de Pontuação'.

    The Machine Learning Studio (clássico): The Experiment

  17. Na lista de itens experimentos no painel à esquerda, expanda Machine Learning > Avaliar, e arraste o item do Modelo de Avaliação para a tela.

  18. Ligação a saída do Modelo de Pontuação para a entrada superior esquerda do Modelo de Avaliação.

    The Machine Learning Studio (clássico): The Experiment

  19. Construíste a tua primeira experiência Machine Learning. Agora pode salvar e executar a experiência. No menu na parte inferior da página, clique no botão Guardar para guardar a sua experiência e, em seguida, clique em Executar para o início da experiência.

    The Machine Learning Studio (clássico): The Experiment

  20. Pode ver o estado da experiência no canto superior direito da tela. Espere alguns momentos para a experiência terminar.

    Se tiver um conjunto de dados grande (no mundo real), é provável que a experiência possa demorar horas a ser executada.

    The Machine Learning Studio (clássico): The Experiment

  21. Clique à direita no item 'Avaliar' Modelo na tela e a partir do menu de contexto pairar sobre o rato sobre os Resultados da Avaliação e, em seguida, selecione Visualize.

    The Machine Learning Studio (clássico): The Experiment

  22. Os resultados da avaliação serão apresentados mostrando os resultados previstos em relação aos resultados reais. Isto usa os 30% do conjunto de dados original, que foi dividido anteriormente, para avaliar o modelo. Pode ver que os resultados não são grandes, idealmente teria o número mais alto em cada linha ser o item destacado nas colunas.

    The Machine Learning Studio (clássico): The Experiment

  23. Fechar os Resultados.

  24. Para utilizar o seu modelo de Machine Learning recentemente treinado, tem de o expor como um Serviço Web. Para isso, clique no item do menu 'Configurar's Web Service no menu na parte inferior da página e clique no Serviço Web Preditivo.

    The Machine Learning Studio (clássico): The Experiment

  25. Será criado um novo separador e o modelo do comboio fundiu-se para criar o novo serviço web.

  26. No menu na parte inferior da página clique em Guardar e, em seguida, clique em Executar. Verá o estado atualizado no canto superior direito da tela experimentá-la.

    The Machine Learning Studio (clássico): The Experiment

  27. Uma vez terminado de funcionar, aparecerá um botão de Serviço Web implementar na parte inferior da página. Está pronto para implementar o serviço web. Clique em Implementar o Serviço Web (Clássico) no menu na parte inferior da página.

    The Machine Learning Studio (clássico): The Experiment

    O seu navegador pode solicitar para permitir um pop-up, o que deve permitir, embora possa precisar de voltar a pressionar o Serviço Web de implementação, caso a página de implementação não apareça.

  28. Uma vez criada a Experiência, será redirecionado para uma página do Dashboard onde terá a sua Chave API visualizada. Copie-o num bloco de notas por enquanto, vai precisar dele no seu código muito em breve. Uma vez anotado a sua Chave API, clique no botão REQUEST/RESPONSE na secção Ponto final predefinido por baixo da tecla.

    The Machine Learning Studio (clássico): The Experiment

    Nota

    Se clicar em Testar nesta página, poderá introduzir dados de entrada e visualizar a saída. Entre no dia e hora. Deixe a entrada do produto em branco. Em seguida, clique no botão Confirmar. A saída na parte inferior da página mostrará o JSON representando a probabilidade de cada produto ser a escolha.

  29. Será aberta uma nova página web, exibindo as instruções e alguns exemplos sobre a estrutura Request exigida pelo Machine Learning Studio (clássico). Copie o URI pedido apresentado nesta página, no seu bloco de notas.

    The Machine Learning Studio (clássico): The Experiment

Agora construiu um sistema de aprendizagem automática que fornece o produto mais provável para ser vendido com base em dados históricos de compra, correlacionado com a hora do dia e do dia do ano.

Para ligar para o serviço web, você precisará do URL para o ponto final de serviço e uma chave API para o serviço. Clique no separador Consumir, a partir do menu superior.

A página Informação de Consumo apresentará as informações necessárias para ligar para o serviço web a partir do seu código. Pegue uma cópia da Chave Primária e do URL de Resposta a Pedidos. Vai precisar disto no próximo capítulo.

Capítulo 5 - Criação do Project de Unidade

Configurar e testar os auscultadores imersivos de realidade mista.

Nota

Não vai precisar de controladores de movimento para este curso. Se necessitar de suporte para configurar o Auricular Imersivo, clique aqui.

  1. Open Unitity e criar um novo Project de Unidade chamado MR _ MachineLearning. Certifique-se de que o tipo de projeto está definido para 3D.

  2. Com a Unidade aberta, vale a pena verificar se o Editor de Script padrão está definido para Visual Studio. Vá para Editar > Preferências e, em seguida, a partir da nova janela, navegue para Ferramentas Externas. Alterar editor de script externo para Visual Studio 2017. Feche a janela Preferências.

  3. Em seguida, vá ao File > Build Definições e altere a plataforma para Universal Windows Platform, clicando no botão 'Plataforma Switch'.

  4. Certifique-se também de que:

    1. O dispositivo-alvo está definido para qualquer dispositivo.

      Para o Microsoft HoloLens, desaponte o dispositivo alvo para HoloLens.

    2. O Tipo de Construção está definido para D3D.

    3. A SDK está preparada para o mais recente instalado.

    4. Visual Studio versão está definida para a mais recente instalação.

    5. Build and Run está definido para máquina local.

    6. Não se preocupe em configurar cenas agora, pois estas são fornecidas mais tarde.

    7. As definições restantes devem ser deixadas como padrão por enquanto.

      Criação do Project de Unidade

  5. Na janela Build Definições, clique no botão Player Definições, isto abrirá o painel relacionado no espaço onde o Inspetor está localizado.

  6. Neste painel, é necessário verificar algumas definições:

    1. No separador Other Definições:

      1. A versão de tempo de execução de script deve ser experimental (.NET 4.6 Equivalente)

      2. Scripting Backend deve ser .NET

      3. O nível de compatibilidade da API deve ser .NET 4.6

        Criação do Project de Unidade

    2. No separador Definições de Publicação, em Capacidades, verifique:

      • InternetClient

        Criação do Project de Unidade

    3. Mais abaixo no painel, em XR Definições (encontrado abaixo Definições De Publicação), tick Virtual Reality Supported, certifique-se de que o Windows Mixed Reality SDK é adicionado

      Criação do Project de Unidade

  7. Back in Build Definições Unity C# Os projetos já não estão acinzentados; marque a caixa de verificação ao lado deste.

  8. Feche a janela Build Definições.

  9. Guarde o seu Project (FILE > SAVE PROJECT).

Capítulo 6 - Importação do Pacote de Unidade de Produtos MLProducts

Para este curso, você precisará de baixar um Pacote de Ativos de Unidade chamado Azure-MR-307.unitypackage. Este pacote vem completo com uma cena, com todos os objetos naquela pré-construída, para que você possa se concentrar em começar tudo funcionando. O script ShelfKeeper é fornecido, embora apenas detenha as variáveis públicas, para efeitos de estrutura de configuração de cena. Terá de fazer todas as outras secções.

Para importar este pacote:

  1. Com o painel de instrumentos Unidade à sua frente, clique em Ativos no menu no topo do ecrã e, em seguida, clique no Pacote De Importação, Pacote Personalizado.

    Importação do Pacote de Unidade MLProducts

  2. Utilize o selecionador de ficheiros para selecionar o pacote Azure-MR-307.unitypackage e clique em Abrir.

  3. Será apresentada uma lista de componentes para este ativo. Confirme a importação clicando em Importação.

    Importação do Pacote de Unidade MLProducts

  4. Uma vez terminada a importação, notará que algumas novas pastas apareceram no seu Painel de Project de Unidade . Estes são os modelos 3D e os respetivos materiais que fazem parte da cena pré-fabricada em que vai trabalhar. Escreverá a maior parte do código neste curso.

    Importação do Pacote de Unidade MLProducts

  5. Dentro da pasta Project Painel, clique na pasta Cenas e clique duas vezes na cena interior (chamada MR_MachineLearningScene). A cena abrir-se-á (ver imagem abaixo). Se os diamantes vermelhos estiverem em falta, basta clicar no botão Gizmos, no superior direito do Painel de Jogo.

    Importação do Pacote de Unidade MLProducts

Capítulo 7 - Verificação dos DLLs em Unidade

Para aproveitar o uso de bibliotecas JSON (usadas para serializar e desserizar), um Newtonsoft DLL foi implementado com o pacote que trouxe. A biblioteca deve ter a configuração correta, embora valha a pena verificar (especialmente se estiver a ter problemas com o código não funcionando).

Para tal:

  • Clique à esquerda no ficheiro Newtonsoft dentro da pasta Plugins e olhe para o painel do Inspetor. Certifique-se de que qualquer plataforma está marcada. Vá ao separador UWP e também certifique-se de que não o processo está marcado.

    Importação dos DLLs em Unidade

Capítulo 8 - Criar a classe ShelfKeeper

A classe ShelfKeeper acolhe métodos que controlam a UI e os produtos gerados na cena.

Como parte do pacote importado, terá recebido esta classe, embora esteja incompleta. Está na hora de completar esta aula:

  1. Clique duas vezes no script Do Guardião do Prateleira, dentro da pasta Scripts, para abri-lo com Visual Studio 2017.

  2. Substitua todo o código existente no script pelo seguinte código, que define a hora e a data e tem um método para mostrar um produto.

    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. Certifique-se de que guarda as suas alterações na Visual Studio antes de regressar à Unidade.

  4. De volta ao Editor de Unidade, verifique se a classe ShelfKeeper se parece com a seguinte:

    Criar a classe ShelfKeeper

    Importante

    Se o seu script não tiver os alvos de referência (ou seja, data (malha de texto), basta arrastar os objetos correspondentes do Painel hierárquica para os campos-alvo. Consulte abaixo para obter explicações, se necessário:

    1. Abra a matriz de Ponto de Desova dentro do script do componente ShelfKeeper clicando-o à esquerda. Aparecerá uma sub-secção chamada Tamanho, que indica o tamanho da matriz. Tipo 3 na caixa de texto ao lado do Tamanho e prima Enter, e três ranhuras serão criadas por baixo.

    2. Dentro da Hierarquia expanda o objeto de visualização do tempo (clicando à esquerda na seta ao seu lado). Em seguida clique na Câmara Principal_ a partir da hierarquia _, para que o Inspetor mostre as suas informações.

    3. Selecione a Câmara Principal no Painel hierarquia. Arraste os objetos de data e hora do Painel de Hierarquia para as ranhuras de texto e texto de data dentro do Inspetor da Câmara Principal no componente ShelfKeeper.

    4. Arraste os Pontos de Desova do Painel de Hierarquia (por baixo do objeto da prateleira) para os alvos de referência de 3 elementos abaixo da matriz de Spawn Point, como mostra a imagem.

      Criar a classe ShelfKeeper

Capítulo 9 - Criar a classe ProdutoPrediction

A próxima classe que vai criar é a classe ProductPrediction.

Esta classe é responsável por:

  • Consulta da instância de Serviço Machine Learning, fornecendo a data e hora atuais.

  • Deserializar a resposta do JSON em dados utilizáveis.

  • Interpretação dos dados, recuperação dos 3 produtos recomendados.

  • Chamando os métodos de classe ShelfKeeper para exibir os dados na Cena.

Para criar esta classe:

  1. Aceda à pasta Scripts, no Painel Project.

  2. Clique com o botão direito dentro da pasta, Crie > O Script C#. Ligue para o script ProductPrediction.

  3. Clique duas vezes no novo script de ProdutoPrediction para abri-lo com Visual Studio 2017.

  4. Se a modificação do ficheiro O diálogo detetado aparecer, clique em **Solução de Recarga*.

  5. Adicione os seguintes espaços de nome ao topo da 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. No interior da classe ProdutoPredicação insira os seguintes dois objetos que são compostos por uma série de classes aninhadas. Estas aulas são usadas para serializar e deserizar o JSON para o Serviço de 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. Em seguida, adicione as seguintes variáveis acima do código anterior (de modo que o código relacionado JSON esteja na parte inferior do script, abaixo de todos os outros códigos, e fora do caminho):

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

    Certifique-se de inserir a chave primária e o ponto final de resposta de pedido, a partir do Portal Machine Learning, nas variáveis aqui. As imagens abaixo mostram de onde teria levado a chave e o ponto final.

    The Machine Learning Studio (clássico): The Experiment

    The Machine Learning Studio (clássico): The Experiment

  8. Insira este código dentro do método Iniciar(). O método Iniciar() é chamado quando a classe inicializa:

        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. Segue-se o método que recolhe a data e a hora a partir de Windows e converte-o num formato que a nossa experiência Machine Learning pode usar para comparar com os dados armazenados na tabela.

        /// <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. Pode eliminar o método 'Actualizar') uma vez que esta classe não a utilizará.

  11. Adicione o seguinte método que comunicará a data e hora atuais ao ponto final Machine Learning e receberá uma resposta no 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. Adicione o seguinte método, que é responsável pela dessasserização da resposta JSON, e pela comunicação do resultado da dessasserização para a classe ShelfKeeper. Este resultado serão os nomes dos três itens previstos para vender mais na data e hora atuais. Insira o código abaixo na classe ProdutoPrediction, abaixo do método anterior.

        /// <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. Salve Visual Studio e volte para a Unidade.

  14. Arraste o script da classe Deditação de Produto da pasta Script para o objeto da Câmara Principal.

  15. Guarde a sua cena e > projete a save scene/file > Save Project.

Capítulo 10 - Construir a Solução UWP

É agora hora de construir o seu projeto como uma solução UWP, para que possa funcionar como uma aplicação autónoma.

Para construir:

  1. Guarde a cena atual clicando em > Cenas de Salvamento de Ficheiros.

  2. Ir para a build de Definições de > arquivo

  3. Verifique a caixa chamada Projetos Unidade C# (isto é importante porque lhe permitirá editar as aulas após a construção estar concluída).

  4. Clique em Add Open Scenes,

  5. Clique em Construir.

    Construir a Solução UWP

  6. Será solicitado que selecione a pasta onde pretende construir a Solução.

  7. Crie uma pasta BUILDS e dentro dessa pasta crie outra pasta com um nome apropriado à sua escolha.

  8. Clique na sua nova pasta e, em seguida, clique em Select Folder, para iniciar a construção naquele local.

    Construir a Solução UWP

    Construir a Solução UWP

  9. Uma vez terminada a construção da Unidade (pode demorar algum tempo), abrirá uma janela do Explorador de Ficheiros no local da sua construção (verifique a sua barra de tarefas, uma vez que pode nem sempre aparecer acima das suas janelas, mas irá notificá-lo da adição de uma nova janela).

Capítulo 11 - Implementar a sua Aplicação

Para implementar a sua aplicação:

  1. Navegue para a sua nova build Unity (a pasta App) e abra o ficheiro de solução com Visual Studio.

  2. Com Visual Studio aberto, precisa de restaurar os Pacotes NuGet, que podem ser feitos através de clicar à direita na sua solução de MachineLearningLab_Build, a partir do Solution Explorer (encontrado à direita de Visual Studio), e clicar em Restaurar Pacotes NuGet:

    Adicionar pacotes NuGet

  3. Na Configuração da Solução selecione Debug.

  4. Na Plataforma solução, selecione x86, Máquina Local.

    Para a Microsoft HoloLens, poderá ser mais fácil de configurar isto para Remote Machine, para que não esteja amarrado ao computador. No entanto, também terá de fazer o seguinte:

    • Conheça o endereço IP do seu HoloLens, que pode ser encontrado dentro da Rede Definições > & Opções Avançadas de > Wi-Fi > Internet; o IPv4 é o endereço que deve utilizar.
    • Certifique-se de que o modo de desenvolvimento está ligado; encontrado em Definições > Update & Security > para desenvolvedores.

    Adicionar pacotes NuGet

  5. Vá ao menu Construir e clique na Solução de Implementação para carregar lateralmente a aplicação para o seu PC.

  6. A sua App deve agora aparecer na lista de aplicações instaladas, prontas a serem lançadas.

Quando executar a aplicação De Realidade Mista, verá o banco que foi criado na sua cena Unidade, e a partir da inicialização, os dados que configurar no Azure serão recolhidos. Os dados serão deserizados dentro da sua aplicação, e os três principais resultados para a sua data e hora atuais serão fornecidos visualmente, como três modelos no banco.

A sua aplicação de Machine Learning acabada

Parabéns, construíste uma aplicação de realidade mista que aproveita o Azure Machine Learning para fazer previsões de dados e exibi-la na tua cena.

Adicionar pacotes NuGet

Exercício

Exercício 1

Experimente com a ordem de tipo da sua aplicação e as previsões de fundo aparecem na prateleira, uma vez que estes dados seriam potencialmente úteis também.

Exercício 2

A utilização de Tabelas Azure povoa uma nova tabela com informações meteorológicas e cria uma nova experiência usando os dados.