Tutorial: Usar a Visão Personalizada com um dispositivo IoT para relatar estados visuais

Este aplicativo de exemplo ilustra como usar a Visão Personalizada para treinar um dispositivo com uma câmera para detetar estados visuais. Você pode executar esse cenário de deteção em um dispositivo IoT usando um modelo ONNX exportado.

Um estado visual descreve o conteúdo de uma imagem: uma sala vazia ou uma sala com pessoas, uma entrada vazia ou uma entrada com um caminhão, e assim por diante. Na imagem abaixo, você pode ver o aplicativo detetar quando uma banana ou uma maçã é colocada na frente da câmera.

Animation of a UI labeling fruit in front of the camera

Este tutorial irá mostrar-lhe como:

  • Configure o aplicativo de exemplo para usar seus próprios recursos de Visão Personalizada e Hub IoT.
  • Use o aplicativo para treinar seu projeto Visão Personalizada.
  • Use o aplicativo para marcar novas imagens em tempo real e enviar os resultados para o Azure.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

  • Para usar o Serviço de Visão Personalizada, você precisará criar recursos de Treinamento e Previsão de Visão Personalizada no Azure. Para fazer isso no portal do Azure, preencha a janela de diálogo na página Criar Visão Personalizada para criar um recurso de Treinamento e Previsão.

    Importante

    Este projeto precisa ser um projeto de classificação de imagem compacta , porque estaremos exportando o modelo para ONNX mais tarde.

  • Você também precisará criar um recurso do Hub IoT no Azure.
  • Visual Studio 2015 ou posterior
  • Opcionalmente, um dispositivo IoT executando o Windows 10 IoT Core versão 17763 ou superior. Também pode executar a aplicação diretamente a partir do seu PC.
    • Para o Raspberry Pi 2 e 3, você pode configurar o Windows 10 diretamente do aplicativo IoT Dashboard. Para outros dispositivos, como DrangonBoard, você precisará piscá-lo usando o método eMMC. Se precisar de ajuda para configurar um novo dispositivo, consulte Configurar o dispositivo na documentação do Windows IoT.

Sobre o aplicativo Alertas Visuais

O aplicativo IoT Visual Alerts é executado em um loop contínuo, alternando entre quatro estados diferentes, conforme apropriado:

  • Nenhum modelo: um estado no-op. O aplicativo irá dormir continuamente por um segundo e verificar a câmera.
  • Capturando imagens de treinamento: nesse estado, o aplicativo captura uma imagem e a carrega como uma imagem de treinamento para o projeto de Visão Personalizada de destino. Em seguida, o aplicativo dorme por 500 ms e repete a operação até que o número de imagens de destino definido seja capturado. Em seguida, ele aciona o treinamento do modelo de Visão Personalizada.
  • Aguardando modelo treinado: nesse estado, o aplicativo chama a API de visão personalizada a cada segundo para verificar se o projeto de destino contém uma iteração treinada. Quando encontra um, baixa o modelo ONNX correspondente para um arquivo local e alterna para o estado de pontuação .
  • Pontuação: nesse estado, o aplicativo usa o Windows ML para avaliar um único quadro da câmera em relação ao modelo ONNX local. A classificação de imagem resultante é exibida na tela e enviada como uma mensagem para o Hub IoT. Em seguida, o aplicativo dorme por um segundo antes de marcar uma nova imagem.

Examine a estrutura do código

Os arquivos a seguir manipulam a funcionalidade principal do aplicativo.

Ficheiro Description
MainPage.xaml Esse arquivo define a interface do usuário XAML. Ele hospeda o controle da câmera da web e contém os rótulos usados para atualizações de status.
MainPage.xaml.cs Esse código controla o comportamento da interface do usuário XAML. Ele contém o código de processamento da máquina de estado.
CustomVision\CustomVisionServiceWrapper.cs Esta classe é um wrapper que lida com a integração com o Serviço de Visão Personalizada.
CustomVision\CustomVisionONNXModel.cs Esta classe é um wrapper que lida com a integração com o Windows ML para carregar o modelo ONNX e marcar imagens em relação a ele.
IoTHub\IotHubWrapper.cs Essa classe é um wrapper que lida com a integração com o Hub IoT para carregar resultados de pontuação no Azure.

Configurar a aplicação Alertas Visuais

Siga estas etapas para executar o aplicativo IoT Visual Alerts em seu PC ou dispositivo IoT.

  1. Clone ou baixe o exemplo IoTVisualAlerts no GitHub.
  2. Abra a solução IoTVisualAlerts.sln no Visual Studio
  3. Integre o seu projeto de Visão Personalizada:
    1. No script CustomVision\CustomVisionServiceWrapper.cs, atualize a variável com sua ApiKey chave de treinamento.
    2. Em seguida, atualize a Endpoint variável com o URL do ponto de extremidade associado à sua chave.
    3. Atualize a variável com a targetCVSProjectGuid ID correspondente do projeto Visão Personalizada que você deseja usar.
  4. Configure o recurso do Hub IoT:
    1. No script IoTHub\IotHubWrapper.cs, atualize a variável com a s_connectionString cadeia de conexão adequada para seu dispositivo.
    2. No portal do Azure, carregue sua instância do Hub IoT, selecione dispositivos IoT em Explorers, selecione no dispositivo de destino (ou crie um, se necessário) e localize a cadeia de conexão em Cadeia de Conexão Primária. A cadeia de caracteres conterá o nome do Hub IoT, ID do dispositivo e chave de acesso compartilhada; Tem o seguinte formato: {your iot hub name}.azure-devices.net;DeviceId={your device id};SharedAccessKey={your access key}.

Executar a aplicação

Se estiver a executar a aplicação no seu PC, selecione Máquina Local para o dispositivo de destino no Visual Studio e selecione x64 ou x86 para a plataforma de destino. Em seguida, pressione F5 para executar o programa. O aplicativo deve iniciar e exibir o feed ao vivo da câmera e uma mensagem de status.

Se você estiver implantando em um dispositivo IoT com um processador ARM, precisará selecionar ARM como a plataforma de destino e Remote Machine como o dispositivo de destino. Forneça o endereço IP do seu dispositivo quando solicitado (ele deve estar na mesma rede que o seu PC). Você pode obter o endereço IP do aplicativo padrão do Windows IoT depois de inicializar o dispositivo e conectá-lo à rede. Pressione F5 para executar o programa.

Quando você executa o aplicativo pela primeira vez, ele não terá nenhum conhecimento de estados visuais. Ele exibirá uma mensagem de status informando que nenhum modelo está disponível.

Capture imagens de treinamento

Para configurar um modelo, você precisa colocar o aplicativo no estado Capturando imagens de treinamento. Siga um dos seguintes passos:

  • Se você estiver executando o aplicativo no PC, use o botão no canto superior direito da interface do usuário.
  • Se você estiver executando o aplicativo em um dispositivo IoT, chame o EnterLearningMode método no dispositivo por meio do Hub IoT. Você pode chamá-lo por meio da entrada de dispositivo no menu Hub IoT no portal do Azure ou com uma ferramenta como o Gerenciador de Dispositivos do Hub IoT.

Quando o aplicativo entra no estado Capturando imagens de treinamento, ele capturará cerca de duas imagens a cada segundo até atingir o número alvo de imagens . Por padrão, o destino é de 30 imagens, mas você pode definir esse parâmetro passando o número desejado como um argumento para o EnterLearningMode método do Hub IoT.

Enquanto o aplicativo está capturando imagens, você deve expor a câmera aos tipos de estados visuais que deseja detetar (por exemplo, uma sala vazia, uma sala com pessoas, uma mesa vazia, uma mesa com um caminhão de brinquedo e assim por diante).

Treinar o modelo de Visão Personalizada

Quando o aplicativo terminar de capturar imagens, ele as carregará e, em seguida, alternará para o estado Aguardando modelo treinado. Neste ponto, você precisa ir para o site da Visão Personalizada e criar um modelo com base nas novas imagens de treinamento. A animação a seguir mostra um exemplo desse processo.

Animation: tagging multiple images of bananas

Para repetir esse processo com seu próprio cenário:

  1. Inicie sessão no Web site da Visão Personalizada.
  2. Encontre seu projeto alvo, que agora deve ter todas as imagens de treinamento que o aplicativo carregou.
  3. Para cada estado visual que você deseja identificar, selecione as imagens apropriadas e aplique manualmente a tag .
    • Por exemplo, se o seu objetivo for distinguir entre uma sala vazia e uma sala com pessoas nela, recomendamos marcar cinco ou mais imagens com pessoas como uma nova classe, Pessoas, e marcar cinco ou mais imagens sem pessoas como a tag Negativo . Isso ajudará o modelo a diferenciar os dois estados.
    • Como outro exemplo, se o seu objetivo é aproximar o quão cheia uma prateleira está, então você pode usar tags como EmptyShelf, PartiallyFullShelf e FullShelf.
  4. Quando terminar, selecione o botão Trem .
  5. Quando o treinamento for concluído, o aplicativo detetará que uma iteração treinada está disponível. Ele iniciará o processo de exportação do modelo treinado para ONNX e baixá-lo para o dispositivo.

Use o modelo treinado

Assim que o aplicativo baixar o modelo treinado, ele alternará para o estado de pontuação e começará a pontuar imagens da câmera em um loop contínuo.

Para cada imagem capturada, o aplicativo exibirá a tag superior na tela. Se ele não reconhecer o estado visual, ele exibirá Sem correspondências. O aplicativo também envia essas mensagens para o Hub IoT e, se houver uma classe sendo detetada, a mensagem incluirá o rótulo, a pontuação de confiança e uma propriedade chamada detectedClassAlert, que pode ser usada por clientes do Hub IoT interessados em fazer roteamento rápido de mensagens com base nas propriedades.

Além disso, o exemplo usa uma biblioteca Sense HAT para detetar quando está sendo executado em um Raspberry Pi com uma unidade Sense HAT, para que possa usá-la como uma exibição de saída, definindo todas as luzes de exibição como vermelhas sempre que detetar uma classe e em branco quando não detetar nada.

Reutilizar a aplicação

Se você quiser redefinir o aplicativo de volta ao seu estado original, poderá fazê-lo clicando no botão no canto superior direito da interface do usuário ou invocando o método DeleteCurrentModel por meio do Hub IoT.

A qualquer momento, você pode repetir a etapa de upload de imagens de treinamento clicando no botão superior direito da interface do usuário ou chamando o EnterLearningMode método novamente.

Se você estiver executando o aplicativo em um dispositivo e precisar recuperar o endereço IP novamente (para estabelecer uma conexão remota por meio do Windows IoT Remote Client, por exemplo), poderá chamar o método por meio do GetIpAddressHub IoT.

Clean up resources (Limpar recursos)

Exclua seu projeto de Visão Personalizada se não quiser mais mantê-lo. No site Visão Personalizada, navegue até Projetos e selecione o ícone da lixeira abaixo do seu novo projeto.

Screenshot of a panel labeled My New Project with a trash can icon

Próximos passos

Neste tutorial, você configurou e executou um aplicativo que deteta informações de estado visual em um dispositivo IoT e envia os resultados para o Hub IoT. Em seguida, explore mais o código-fonte ou faça uma das modificações sugeridas abaixo.

  • Adicione um método do Hub IoT para alternar o aplicativo diretamente para o estado Aguardando Modelo Treinado. Dessa forma, você pode treinar o modelo com imagens que não são capturadas pelo próprio dispositivo e, em seguida, empurrar o novo modelo para o dispositivo sob comando.
  • Siga o tutorial Visualizar dados do sensor em tempo real para criar um Painel do Power BI para visualizar os alertas do Hub IoT enviados pelo exemplo.
  • Siga o tutorial de monitoramento remoto da IoT para criar um Aplicativo Lógico que responda aos alertas do Hub IoT quando estados visuais forem detetados.