Compartilhar via


HoloLens (1ª geração) e Azure 307: aprendizado de máquina


Observação

Os tutoriais do Mixed Reality Academy foram projetados com o HoloLens (1ª geração) e os headsets imersivos de realidade misturada em mente. Dessa forma, achamos que é importante continuar disponibilizando esses tutoriais para os desenvolvedores que ainda buscam obter diretrizes para o desenvolvimento visando esses dispositivos. Esses tutoriais não serão atualizados com os conjuntos de ferramentas mais recentes nem com as interações usadas para o HoloLens 2. Eles serão mantidos para continuar funcionando nos dispositivos compatíveis. Haverá uma nova série de tutoriais que serão postados no futuro que demonstrarão como desenvolver para o HoloLens 2. Este aviso será atualizado com um link para esses tutoriais quando eles forem postados.


produto final - início

Neste curso, você aprenderá a adicionar recursos de ML (Machine Learning) a um aplicativo de realidade misturada usando o Azure Machine Learning Studio (clássico).

O Azure Machine Learning Studio (clássico) é um serviço da Microsoft, que fornece aos desenvolvedores um grande número de algoritmos de aprendizado de máquina, que podem ajudar na entrada, saída, preparação e visualização de dados. A partir desses componentes, é possível desenvolver um experimento de análise preditiva, iterar nele e usá-lo para treinar seu modelo. Após o treinamento, você pode tornar seu modelo operacional na nuvem do Azure, para que ele possa pontuar novos dados. Para obter mais informações, visite a página do Azure Machine Learning Studio (clássico).

Depois de concluir este curso, você terá um aplicativo de headset imersivo de realidade misturada e terá aprendido como fazer o seguinte:

  1. Forneça uma tabela de dados de vendas para o portal do Azure Machine Learning Studio (clássico) e crie um algoritmo para prever vendas futuras de itens populares.
  2. Crie um projeto do Unity, que pode receber e interpretar dados de previsão do serviço de ML.
  3. Exiba os dados de predicação visualmente no Projeto Unity, fornecendo os itens de vendas mais populares, em uma prateleira.

Em sua aplicação, cabe a você como integrará os resultados ao seu design. Este curso foi desenvolvido para ensinar como integrar um Serviço do Azure ao seu projeto do Unity. É seu trabalho usar o conhecimento adquirido com este curso para aprimorar seu aplicativo de realidade misturada.

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

Suporte a dispositivos

Curso HoloLens Headsets imersivos
MR e Azure 307: aprendizado de máquina ✔️ ✔️

Observação

Embora este curso se concentre principalmente em headsets imersivos (VR) do Windows Mixed Reality, você também pode aplicar o que aprendeu neste curso ao Microsoft HoloLens. Ao acompanhar o curso, você verá anotações sobre as alterações que talvez precise empregar para dar suporte ao HoloLens. Ao usar o HoloLens, você pode observar algum eco durante a captura de voz.

Pré-requisitos

Observação

Este tutorial foi desenvolvido para desenvolvedores que têm experiência básica com Unity e C#. Esteja ciente também de que os pré-requisitos e as instruções escritas neste documento representam o que foi testado e verificado no momento da redação (maio de 2018). Você é livre para usar o software mais recente, conforme listado no artigo instalar as ferramentas, embora não se deva presumir que as informações neste curso corresponderão perfeitamente ao que você encontrará em softwares mais recentes do que os listados abaixo.

Recomendamos o seguinte hardware e software para este curso:

Antes de começar

Para evitar problemas ao criar este projeto, é altamente recomendável que você crie o projeto mencionado neste tutorial em uma pasta raiz ou quase raiz (caminhos de pasta longos podem causar problemas no momento da compilação).

Capítulo 1 – Configuração da Conta de Armazenamento do Azure

Para usar a API do Azure Translator, você precisará configurar uma instância do serviço a ser disponibilizada para seu aplicativo.

  1. Faça logon no Portal do Azure.

    Observação

    Se você ainda não tiver uma conta do Azure, precisará criar uma. Se você estiver seguindo este tutorial em uma sala de aula ou laboratório, peça ajuda ao seu instrutor ou a um dos supervisores para configurar sua nova conta.

  2. Depois de fazer login, clique em Contas de armazenamento no menu à esquerda.

    Captura de tela da janela do Microsoft Azure, que mostra o item Contas de Armazenamento no menu de navegação à esquerda.

    Observação

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

  3. Na guia Contas de Armazenamento , clique em Adicionar.

    Captura de tela da janela do Microsoft Azure, que mostra a tela Contas de armazenamento e o botão Adicionar realçado.

  4. No painel Criar Conta de Armazenamento:

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

    2. Em Modelo de implantação, selecione Gerenciador de recursos.

    3. Para Tipo de conta, selecione Armazenamento (uso geral v1).

    4. Para Desempenho, selecione Standard.

    5. Em Replicação, selecione RA-GRS (armazenamento com redundância geográfica com acesso de leitura).

    6. Deixe a transferência segura necessária como Desabilitada.

    7. Selecione uma Assinatura.

    8. Escolha um grupo de recursos ou crie um novo. Um grupo de recursos fornece uma maneira de monitorar, controlar o acesso, provisionar e gerenciar a cobrança de uma coleção de ativos do Azure. É recomendável manter todos os serviços do Azure associados a um único projeto (por exemplo, como esses laboratórios) em um grupo de recursos comum).

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

    9. Determine o Local do seu grupo de recursos (se você estiver criando um novo Grupo de Recursos). O local seria idealmente na região onde o aplicativo seria executado. Alguns ativos do Azure só estão disponíveis em determinadas regiões.

  5. Você também precisará confirmar que entendeu os Termos e Condições aplicados a este Serviço.

    Captura de tela da caixa de diálogo Criar conta de armazenamento, que mostra as informações que o usuário preencheu nos campos de texto necessários.

  6. Depois de clicar em Criar, você terá que esperar que o serviço seja criado, isso pode levar um minuto.

  7. Uma notificação será exibida no portal assim que a instância de serviço for criada.

    Captura de tela da notificação Implantação bem-sucedida, que informa ao usuário que a implantação no grupo de recursos foi bem-sucedida.

Capítulo 2 – O Azure Machine Learning Studio (clássico)

Para usar o Azure Machine Learning, você precisará configurar uma instância do serviço do Machine Learning a ser disponibilizada para seu aplicativo.

  1. No Portal do Azure, clique em Novo no canto superior esquerdo e pesquise Espaço de Trabalho do Machine Learning Studio e pressione Enter.

    Captura de tela da janela do Microsoft Azure, que mostra o espaço de trabalho do Machine Learning Studio no painel de conteúdo.

  2. A nova página fornecerá uma descrição do serviço de espaço de trabalho do Machine Learning Studio . Na parte inferior esquerda desse prompt, clique no botão Criar para criar uma associação com esse serviço.

  3. Depois de clicar em Criar, um painel aparecerá onde você precisa fornecer alguns detalhes sobre seu novo serviço do Machine Learning Studio:

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

    2. Selecione uma Assinatura.

    3. Escolha um grupo de recursos ou crie um novo. Um grupo de recursos fornece uma maneira de monitorar, controlar o acesso, provisionar e gerenciar a cobrança de uma coleção de ativos do Azure. É recomendável manter todos os serviços do Azure associados a um único projeto (por exemplo, como esses laboratórios) em um grupo de recursos comum).

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

    4. Determine o Local do seu grupo de recursos (se você estiver criando um novo Grupo de Recursos). O local seria idealmente na região onde o aplicativo seria executado. Alguns ativos do Azure só estão disponíveis em determinadas regiões. Você deve usar o mesmo grupo de recursos usado para criar o Armazenamento do Azure no capítulo anterior.

    5. Para a seção Conta de armazenamento , clique em Usar existente, clique no menu suspenso e, a partir daí, clique na Conta de Armazenamento que você criou no último capítulo.

    6. Selecione o tipo de preço do Workspace apropriado para você, no menu suspenso.

    7. Na seção Plano de serviço da Web, clique em Criar novo e insira um nome para ele no campo de texto.

    8. Na seção Tipo de preço do plano de serviço Web, selecione o tipo de preço de sua escolha. Um nível de teste de desenvolvimento chamado DEVTEST Standard deve estar disponível para você gratuitamente.

    9. Você também precisará confirmar que entendeu os Termos e Condições aplicados a este Serviço.

    10. Clique em Criar.

      Captura de tela da caixa de diálogo do Azure Machine Learning Studio, que mostra as informações que o usuário inseriu nos campos de texto.

  4. Depois de clicar em Criar, você terá que esperar que o serviço seja criado, isso pode levar um minuto.

  5. Uma notificação será exibida no portal assim que a instância de serviço for criada.

    Captura de tela da janela do Microsoft Azure, que mostra uma notificação não lida no menu de navegação.

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

    Captura de tela da notificação Implantação bem-sucedida, que informa ao usuário que a implantação do workspace no grupo de recursos foi bem-sucedida.

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

  8. Na página exibida, na seção Links Adicionais , clique em Iniciar o Machine Learning Studio, que direcionará seu navegador para o portal do Machine Learning Studio .

    Captura de tela da janela do Microsoft Azure, que mostra o link Iniciar o Machine Learning Studio realçado no painel de conteúdo.

  9. Use o botão Entrar , no canto superior direito ou no centro, para fazer logon no Machine Learning Studio (clássico).

    Captura de tela da janela do Estúdio de Aprendizado de Máquina, que mostra o botão Entrar realçado.

Capítulo 3 – O Estúdio de Aprendizado de Máquina (clássico): Configuração do conjunto de dados

Uma das maneiras pelas quais os algoritmos de aprendizado de máquina funcionam é analisando os dados existentes e, em seguida, tentando prever resultados futuros com base no conjunto de dados existente. Isso geralmente significa que quanto mais dados existentes você tiver, melhor será o algoritmo para prever resultados futuros.

Uma tabela de exemplo é fornecida a você, para este curso, chamada ProductsTableCSV e pode ser baixada aqui.

Importante

O arquivo .zip acima contém o ProductsTableCSV e o .unitypackage, que você precisará no Capítulo 6. Este pacote também é fornecido nesse capítulo, embora separado do arquivo csv.

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

Captura de tela da janela do Microsoft Excel, que mostra um conjunto de dados de amostra de objetos mais vendidos a cada hora de cada dia no ano de 2017.

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

Esta tabela de exemplo contém 9998 entradas.

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

    Captura de tela do portal clássico do Microsoft Azure Machine Learning Studio, que mostra o botão Novo realçado no menu.

  2. Uma seção surgirá da parte inferior e, dentro dela, há um painel de navegação à esquerda. Clique em Conjunto de dados e, à direita dele, em Do arquivo local.

    Captura de tela da caixa de diálogo Novo, que mostra os itens de menu Conjunto de dados e Do arquivo local realçados.

  3. Carregue o novo conjunto de dados seguindo estas etapas:

    1. A janela de upload aparecerá, onde você pode Navegue em seu disco rígido para o novo conjunto de dados.

      Captura de tela da caixa de diálogo Carregar um novo conjunto de dados, que mostra o botão Procurar para o usuário localizar e selecionar os dados a serem carregados.

    2. Uma vez selecionada e de volta à janela de upload, deixe a caixa de seleção desmarcada.

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

    4. Usando o menu suspenso para Tipo, selecione Arquivo CSV genérico com um cabeçalho (.csv).

    5. Pressione a marca de seleção no canto inferior direito da janela de upload e seu conjunto de dados será carregado.

Capítulo 4 - O Estúdio de Aprendizado de Máquina (clássico): O Experimento

Antes de criar seu sistema de aprendizado de máquina, você precisará criar um experimento para validar sua teoria sobre seus dados. Com os resultados, você 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 um experimento:

  1. Clique novamente no botão + Novo no canto inferior esquerdo da página e, em seguida, clique em Experimento>em branco Experimento.

    Captura de tela da janela do Microsoft Azure Machine Learning Studio, que mostra que o item de menu Experimento está selecionado.

  2. Uma nova página será exibida com um experimento em branco:

  3. No painel à esquerda, expanda Conjuntos de dados salvos,>Meus conjuntos de dados e arraste o ProductsTableCSV para a Tela do experimento.

    Captura de tela da janela Experimento, que mostra a pasta expandida Meus Conjuntos de Dados no menu e a Tabela de Produtos C S V na Tela do Experimento.

  4. No painel à esquerda, expanda Amostra e divisão de transformação>de dados. Em seguida, arraste o item Dividir Dados para a Tela do Experimento. O item Dividir Dados dividirá o conjunto de dados em duas partes. Uma parte que você usará para treinar o algoritmo de aprendizado de máquina. A segunda parte será usada para avaliar a precisão do algoritmo gerado.

    Captura de tela da janela Experimento, que mostra os itens Partição e Amostra e Dividir Dados no menu com Dividir Dados aplicados à Tela.

  5. No painel direito (enquanto o item Dividir dados na tela estiver selecionado), edite a Fração de linhas no primeiro conjunto de dados de saída para 0,7. Isso dividirá os dados em duas partes, a primeira parte será 70% dos dados e a segunda parte serão os 30% restantes. Para garantir que os dados sejam divididos aleatoriamente, certifique-se de que a caixa de seleção Divisão aleatória permaneça marcada.

    Captura de tela do painel Propriedades, que mostra a caixa de seleção Divisão aleatória preenchida e o campo Fração de linhas foi definido como 0 vírgula 7.

  6. Arraste uma conexão da base do item ProductsTableCSV na tela para a parte superior do item Dividir Dados. Isso conectará os itens e enviará a saída do conjunto de dados ProductsTableCSV (os dados) para a entrada de Dados Divididos.

    Captura de tela da Tela do Experimento, que mostra uma conexão desenhada entre a Tabela de Produtos C S V dot c s v e Dividir Dados.

  7. No painel Experimentos no lado esquerdo, expanda Treinamento de Machine Learning>. Arraste o item Modelo de Treinamento para a tela Experimento. Sua tela deve ter a mesma aparência que a abaixo.

    Captura de tela da tela do experimento, que mostra uma conexão desenhada entre a tabela de produtos C S V dot c s v e Dividir dados, com o modelo de trem abaixo.

  8. Na parte inferior esquerda do item Dividir Dados, arraste uma conexão para a parte superior direita do item Modelo de Treinamento. A primeira divisão de 70% do conjunto de dados será usada pelo Modelo de Treinamento para treinar o algoritmo.

    Captura de tela da Tela do Experimento, que mostra uma conexão desenhada entre a Tabela de Produtos C S V ponto c s v, Dados Divididos e Modelo de Treinamento.

  9. Selecione o item Treinar modelo na tela e, no painel Propriedades (no lado direito da janela do navegador), clique no botão Seletor de coluna Iniciar.

  10. Na caixa de texto, digite product e pressione Enter, product será definido como uma coluna para treinar previsões. Em seguida, clique na marca no canto inferior direito para fechar a caixa de diálogo de seleção.

    Captura de tela da caixa de diálogo Selecionar uma única coluna, que mostra a coluna do produto realçada no menu de colunas.

  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á além do escopo deste documento explicar os detalhes dos diferentes algoritmos fornecidos pelo estúdio do Azure Machine Learning, no entanto, você pode descobrir mais na Folha de Referências do Algoritmo de Machine Learning

  12. No painel de itens do experimento à esquerda, expanda Inicializar Classificação do Modelo>do Machine Learning>e arraste o item Regressão Logística Multiclasse para a tela do experimento.

  13. Conecte a saída, da parte inferior da Regressão Logística Multiclasse, à entrada superior esquerda do item Modelo de Treinamento .

    Captura de tela da Tela do Experimento, que mostra o Modelo de Trem conectado à Regressão Logística Multiclasse e aos Dados Divididos.

  14. Na lista de itens de experimento no painel à esquerda, expanda Pontuação de Aprendizado> de Máquina e arraste o item Modelo de Pontuação para a tela.

  15. Conecte a saída, da parte inferior do Modelo de Treinamento, à entrada superior esquerda do Modelo de Pontuação.

  16. Conecte a saída inferior direita de Dividir Dados à entrada superior direita do item Modelo de Pontuação.

    Captura de tela da tela do experimento, que mostra o modelo de pontuação conectado ao modelo de treinamento e aos dados divididos.

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

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

    Captura de tela da Tela do Experimento, que mostra o Modelo de Avaliação conectado ao Modelo de Pontuação.

  19. Você criou seu primeiro Experimento de Machine Learning. Agora você pode salvar e executar o experimento. No menu na parte inferior da página, clique no botão Salvar para salvar seu experimento e clique em Executar para iniciar o experimento.

    Captura de tela do menu Experiment Canvas, que mostra os botões Salvar e Executar realçados.

  20. Você pode ver o status do experimento no canto superior direito da tela. Aguarde alguns instantes para que o experimento termine.

    Se você tiver um grande conjunto de dados (do mundo real), é provável que o experimento leve horas para ser executado.

    Captura de tela da janela Tela do Experimento, que mostra o status do experimento no canto superior direito.

  21. Clique com o botão direito do mouse no item Avaliar Modelo na tela e, no menu de contexto, passe o mouse sobre Resultados da Avaliação e selecione Visualizar.

    Captura de tela do menu de clique do botão direito do item Avaliar Modelo, que mostra os resultados da Avaliação realçados e os itens de menu Visualizar.

  22. Os resultados da avaliação serão exibidos mostrando os resultados previstos versus os resultados reais. Isso usa os 30% do conjunto de dados original, que foi dividido anteriormente, para avaliar o modelo. Você pode ver que os resultados não são ótimos, o ideal é que o número mais alto em cada linha seja o item destacado nas colunas.

    Captura de tela do gráfico Resultados, que mostra os resultados do experimento em um gráfico de caixas com porcentagens.

  23. Feche os resultados.

  24. Para usar seu modelo de Machine Learning recém-treinado, você precisa expô-lo como um serviço Web. Para fazer isso, clique no item de menu Configurar serviço da Web no menu na parte inferior da página e clique em Serviço da Web preditivo.

    Captura de tela do menu Experimento, que mostra o item de menu Configurar Serviço Web realçado.

  25. Uma nova guia será criada e o modelo de trem mesclado para criar o novo serviço Web.

  26. No menu na parte inferior da página, clique em Salvar e, em seguida, clique em Executar. Você verá o status atualizado no canto superior direito da tela do experimento.

    Captura de tela do menu Experimento, que mostra o botão de menu Executar realçado e o item de menu Executar.

  27. Depois de terminar de ser executado, um botão Implantar serviço Web aparecerá na parte inferior da página. Você está pronto para implantar o serviço Web. Clique em Implantar Serviço Web (Clássico) no menu na parte inferior da página.

    Captura de tela do menu Experimento, que mostra o item de menu Implantar Serviço Web Clássico realçado no botão de menu Implantar Serviço Web.

    Seu navegador pode solicitar a permissão de um pop-up, o que você deve permitir, embora talvez seja necessário pressionar Implantar Serviço Web novamente, se a página de implantação não for exibida.

  28. Depois que o experimento for criado, você será redirecionado para uma página do painel onde sua chave de API será exibida. Copie-o em um bloco de notas por enquanto, você precisará dele em seu código muito em breve. Depois de anotar sua chave de API, clique no botão REQUEST/RESPONSE na seção Endpoint padrão abaixo da chave.

    Captura de tela da janela do Microsoft Azure Machine Learning Studio, que mostra a tecla A P I e o link Resposta de barra de solicitação realçado.

    Observação

    Se você clicar em Testar nesta página, poderá inserir dados de entrada e visualizar a saída. Insira o dia e a 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. Uma nova página da Web será aberta, exibindo as instruções e alguns exemplos sobre a estrutura de solicitação exigida pelo Machine Learning Studio (clássico). Copie o URI de solicitação exibido nesta página para o bloco de notas.

    Captura de tela da página de documentação da Solicitação de resposta A P I, que mostra a Solicitação URI destacada.

Agora você criou um sistema de aprendizado de máquina que fornece o produto mais provável de ser vendido com base em dados históricos de compras, correlacionados com a hora do dia e o dia do ano.

Para chamar o serviço Web, você precisará da URL do ponto de extremidade de serviço e de uma chave de API para o serviço. Clique na guia Consumir , no menu superior.

A página Informações de Consumo exibirá as informações necessárias para chamar o serviço Web do seu código. Faça uma cópia da chave primária e da URL de solicitação-resposta . Você precisará deles no próximo capítulo.

Capítulo 5 - Configurando o Projeto Unity

Configure e teste seu Headset Imersivo de Realidade Misturada.

Observação

Você não precisará de controladores de movimento para este curso. Se precisar de suporte para configurar o fone de ouvido imersivo, clique AQUI.

  1. Abra o Unity e crie um novo projeto do Unity chamado MR_MachineLearning. Certifique-se de que o tipo de projeto esteja definido como 3D.

  2. Com o Unity aberto, vale a pena verificar se o Editor de Scripts padrão está definido como Visual Studio. Vá para Editar>preferências e, na nova janela, navegue até Ferramentas externas. Altere o Editor de Script Externo para Visual Studio 2017. Feche a janela Preferências.

  3. Em seguida, vá para Configurações de Build de Arquivo>e alterne a plataforma para Plataforma Universal do Windows, clicando no botão Alternar Plataforma.

  4. Certifique-se também de que:

    1. O dispositivo de destino está definido como Qualquer dispositivo.

      Para o Microsoft HoloLens, defina Dispositivo de Destino como HoloLens.

    2. O Tipo de Construção é definido como D3D.

    3. SDK está definido como Mais recente instalado.

    4. A versão do Visual Studio é definida como Mais recente instalado.

    5. Build and Run é definido como Computador Local.

    6. Não se preocupe em configurar as cenas agora, pois elas são fornecidas posteriormente.

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

      Captura de tela da caixa de diálogo Configurações de Compilação, que mostra que o item de menu Plataforma Universal do Windows está selecionado.

  5. Na janela Configurações de construção, clique no botão Configurações do player, isso abrirá o painel relacionado no espaço onde o Inspetor está localizado.

  6. Neste painel, algumas configurações precisam ser verificadas:

    1. Na guia Outras configurações:

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

      2. O back-end de script deve ser .NET

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

        Captura de tela da guia Outras configurações, que mostra as configurações habilitadas de acordo com as etapas descritas.

    2. Na guia Configurações de Publicação, em Recursos, marque:

      • InternetClient

        Captura de tela da guia Configurações de Publicação, que mostra que o recurso Cliente da Internet está habilitado em Recursos.

    3. Mais abaixo no painel, em Configurações XR (encontradas abaixo de Configurações de Publicação), marque Realidade Virtual com Suporte, verifique se o SDK do Windows Mixed Reality foi adicionado

      Captura de tela da guia Configurações do X R, que mostra que o Windows Mixed Reality S D K abaixo do Virtual Reality S D K s está habilitado.

  7. De volta às configurações de compilação Os projetos do Unity C# não estão mais esmaecidos; marque a caixa de seleção ao lado dela.

  8. Feche a janela Configurações de Build.

  9. Salve seu projeto (FILE > SAVE PROJECT).

Capítulo 6 – Importando o pacote Unity MLProducts

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

Para importar este pacote:

  1. Com o painel do Unity à sua frente, clique em Ativos no menu na parte superior da tela e, em seguida, clique em Importar pacote, Pacote personalizado.

    Captura de tela do Painel do Unity, que mostra os itens de menu Pacote de Importação e Pacote Personalizado realçados.

  2. Use o seletor de arquivos para selecionar o pacote Azure-MR-307.unitypackage e clique em Abrir.

  3. Uma lista de componentes para este ativo será exibida para você. Confirme a importação clicando em Importar.

    Captura de tela da caixa de diálogo Importar Pacote do Unity, que mostra que o pacote do Azure Machine Learning está sendo importado.

  4. Depois de terminar a importação, você notará que algumas novas pastas apareceram no painel de projetos do Unity. Esses são os modelos 3D e os respectivos materiais que fazem parte da cena pré-fabricada em que você trabalhará. Você escreverá a maior parte do código neste curso.

    Captura de tela do Painel de Projeto do Unity, que mostra as pastas recém-importadas na pasta Ativos.

  5. Na pasta Painel do projeto, clique na pasta Cenas e clique duas vezes na cena dentro (chamada MR_MachineLearningScene). A cena será aberta (veja a imagem abaixo). Se os diamantes vermelhos estiverem faltando, basta clicar no botão Bugigangas , no canto superior direito do Painel de Jogo.

    Captura de tela da janela Unity Scene, que mostra o item de menu Gizmos realçado na navegação superior.

Capítulo 7 – Verificando as DLLs no Unity

Para aproveitar o uso de bibliotecas JSON (usadas para serialização e desserialização), uma DLL Newtonsoft foi implementada com o pacote que você trouxe. A biblioteca deve ter a configuração correta, embora valha a pena verificar (principalmente se você estiver tendo problemas com o código que não está funcionando).

Para fazer isso:

  • Clique com o botão esquerdo do mouse no arquivo Newtonsoft dentro da pasta Plugins e observe o painel Inspetor. Certifique-se de que Qualquer plataforma esteja marcada. Vá para a guia UWP e também verifique se a opção Não processar está marcada.

    Importando as DLLs no Unity

Capítulo 8 – Criar a classe ShelfKeeper

A classe ShelfKeeper hospeda métodos que controlam a interface do usuário e os produtos gerados na cena.

Como parte do pacote importado, você receberá essa classe, embora esteja incompleta. Agora é hora de completar essa aula:

  1. Clique duas vezes no script ShelfKeeper, na pasta Scripts, para abri-lo com o Visual Studio 2017.

  2. Substitua todo o código existente no script pelo código a seguir, 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 salvar suas alterações no Visual Studio antes de retornar ao Unity.

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

    Captura de tela da classe Shelf Keeper, que mostra que os destinos de referência são definidos como Malha de texto de data e Malha de texto de hora.

    Importante

    Se o seu script não tiver os destinos de referência (ou seja , Data (Malha de Texto)), basta arrastar os objetos correspondentes do Painel de Hierarquia para os campos de destino. Veja abaixo a explicação, se necessário:

    1. Abra a matriz Ponto de Geração no script do componente ShelfKeeper clicando com o botão esquerdo do mouse nela. Uma subseção aparecerá chamada Tamanho, que indica o tamanho da matriz. Digite 3 na caixa de texto ao lado de Tamanho e pressione Enter, e três slots serão criados abaixo.

    2. Dentro da Hierarquia , expanda o objeto Exibição de Tempo (clicando com o botão esquerdo do mouse na seta ao lado dele). Em seguida, clique na Câmera Principal na Hierarquia, para que o Inspetor mostre suas informações.

    3. Selecione a câmera principal no painel Hierarquia. Arraste os objetos Data e Hora do Painel de Hierarquia para os slots Texto de Data e Texto de Hora no Inspetor da Câmera Principal no componente ShelfKeeper.

    4. Arraste os Pontos de Geração do Painel de Hierarquia (abaixo do objeto Prateleira) para os destinos de referência de 3 Elementos abaixo da matriz de Ponto de Geração, como mostrado na imagem.

      Captura de tela do Painel de Hierarquia, que mostra que a Data, a Hora e os três itens de menu do Ponto de Desova estão na classe Guardião da Prateleira.

Capítulo 9 – Criar a classe ProductPrediction

A próxima classe que você criará é a classe ProductPrediction .

Esta classe é responsável por:

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

  • Desserializando a resposta JSON em dados utilizáveis.

  • Interpretando os dados, recuperando os 3 produtos recomendados.

  • Chamar os métodos de classe ShelfKeeper para exibir os dados na cena.

Para criar essa classe:

  1. Vá para a pasta Scripts , no painel Projeto.

  2. Clique com o botão direito do mouse dentro da pasta, Criar>Script C#. Chame o script de ProductPrediction.

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

  4. Se a caixa de diálogo Modificação de arquivo detectada for exibida, clique em *Recarregar solução.

  5. Adicione os seguintes namespaces à parte superior 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. Dentro da classe ProductPrediction , insira os dois objetos a seguir, que são compostos por várias classes aninhadas. Essas classes são usadas para serializar e desserializar 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 (para que o código relacionado ao JSON fique 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 de extremidade de solicitação-resposta, do Portal de Machine Learning, nas variáveis aqui. As imagens abaixo mostram de onde você teria tirado a chave e o ponto de extremidade.

    Captura de tela do Microsoft Azure Machine Learning Studio, que mostra o link Resposta de barra de solicitação abaixo da página de ajuda do API.

    Captura de tela da página de documentação do Request Response A P I, que mostra o POST Request U R I destacado.

  8. Insira esse código no método Start(). O método Start() é chamado quando a classe é inicializada:

        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. Veja a seguir o método que coleta a data e a hora do Windows e as converte em um formato que nosso Experimento de 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. Você pode excluir o método Update(), pois essa classe não o usará.

  11. Adicione o método a seguir que comunicará a data e a hora atuais ao ponto de extremidade do 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 método a seguir, que é responsável por desserializar a resposta JSON e comunicar o resultado da desserialização à 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 ProductPrediction , 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 o Visual Studio e volte para o Unity.

  14. Arraste o script da classe ProductPrediction da pasta Script para o objeto Main Camera .

  15. Salve sua cena e projeto Arquivo>Salvar cena/Arquivo>Salvar projeto.

Capítulo 10 – Criar a solução UWP

Agora é hora de criar seu projeto como uma solução UWP, para que ele possa ser executado como um aplicativo autônomo.

Para construir:

  1. Salve a cena atual clicando em Arquivo>Salvar Cenas.

  2. Vá para Configurações de Build de Arquivo>

  3. Marque a caixa chamada Projetos C# do Unity (isso é importante porque permitirá que você edite as classes após a conclusão da compilação).

  4. Clique em Adicionar cenas abertas,

  5. Clique em Compilar.

    A captura de tela da caixa de diálogo Configurações de Build, que mostra que o item de menu Plataforma Universal do Windows está realçada.

  6. Você será solicitado a selecionar a pasta onde deseja criar a solução.

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

  8. Clique na nova pasta e, em seguida, clique em Selecionar Pasta para iniciar a compilação nesse local.

    Captura de tela da janela do Explorador de Arquivos, que mostra a pasta Builds realçada.

    Captura de tela da janela do Explorador de Arquivos, que mostra o conteúdo da pasta Builds e o botão Selecionar Pasta realçado.

  9. Depois que o Unity terminar de compilar (pode levar algum tempo), ele abrirá uma janela do Explorador de Arquivos no local da compilação (verifique a barra de tarefas, pois nem sempre ela aparece acima das janelas, mas notificará você sobre a adição de uma nova janela).

Capítulo 11 – Implantar seu aplicativo

Para implantar seu aplicativo:

  1. Navegue até o novo build do Unity (a pasta App ) e abra o arquivo de solução com o Visual Studio.

  2. Com o Visual Studio aberto, você precisa Restaurar Pacotes NuGet, o que pode ser feito clicando com o botão direito do mouse na solução MachineLearningLab_Build, no Gerenciador de Soluções (encontrado à direita do Visual Studio) e clicando em Restaurar Pacotes NuGet:

    Captura de tela da janela do Visual Studio, que mostra o item de menu Restaurar Nu Get Packages realçado.

  3. Na Configuração da Solução, selecione Depurar.

  4. Na Plataforma de Solução, selecione x86, Computador Local.

    Para o Microsoft HoloLens, talvez seja mais fácil definir isso como Computador Remoto, para que você não fique preso ao computador. No entanto, você também precisará fazer o seguinte:

    • Conheça o endereço IP do HoloLens, que pode ser encontrado nas Configurações > Opções avançadas de Wi-Fi > de rede e Internet>; o IPv4 é o endereço que você deve usar.
    • Certifique-se de que o Modo de desenvolvedor esteja ativado; encontrado em Atualização de configurações > e segurança > Para desenvolvedores.

    Captura de tela do menu do Microsoft Visual Studio, que mostra que o Computador Local está selecionado na Plataforma de Solução.

  5. Vá para o menu Compilar e clique em Implantar Solução para carregar o aplicativo em seu PC.

  6. Seu aplicativo agora deve aparecer na lista de aplicativos instalados, pronto para ser iniciado.

Ao executar o aplicativo Realidade Misturada, você verá o banco que foi configurado em sua cena do Unity e, da inicialização, os dados configurados no Azure serão buscados. Os dados serão desserializados em seu aplicativo e os três principais resultados para sua data e hora atuais serão fornecidos visualmente, como três modelos na bancada.

Seu aplicativo de aprendizado de máquina concluído

Parabéns, você criou um aplicativo de realidade misturada que aproveita o Azure Machine Learning para fazer previsões de dados e exibi-las em sua cena.

Captura de tela da janela do Microsoft Visual Studio, que mostra uma prateleira com três objetos e um cartão com o texto 15 horas 23 de fevereiro.

Exercício

Exercício 1

Experimente a ordem de classificação do seu aplicativo e faça com que as três previsões inferiores apareçam na prateleira, pois esses dados também seriam potencialmente úteis.

Exercício 2

Usando as Tabelas do Azure, preencha uma nova tabela com informações meteorológicas e crie um novo experimento usando os dados.