Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Núcleo IoT do Windows 10:robô controlado por fala

História

Nos primeiros dias do computador, a interação com o computador era realizada por meio de cartões perfurados, trackball, light-gun, teclados e até mesmo via touch screen. Todos esses dispositivos requerem algum tipo de contato físico para operá-los.

Década após década, novas tecnologias são aprimoradas em relação à antiga. Os dispositivos de entrada sem fio se tornaram populares porque fornecem uma mesa limpa e menos desordenada. Com as melhorias atuais no software e também no hardware, um novo tipo de entrada é possível, que são:Entrada Visual e de Fala.

Este artigo o ajudará a aprender a tecnologia de reconhecimento de fala fornecida no Windows 10 IoT Core. No final do tópico, criaremos um robô usando o Windows 10 IoT Core e Raspberry Pi 2 executando o aplicativo Speech Recognition. Este aplicativo de reconhecimento de fala permite que o robô execute várias tarefas de movimento (por exemplo:mover para frente, girar, parar, etc.) com base na interação do usuário pela fala.

Novo no Windows 10 IoT Core? ou iniciante? consulte este link primeiro.

Este artigo foi atualizado em 30 de março de 2016

O que é reconhecimento de fala?

Em uma única linha, Reconhecimento de Fala significa a tradução de palavras faladas em um possível texto equivalente. O Reconhecimento de Fala pode ser dividido em dois componentes principais:Processamento de Sinal e Decodificador de Fala. Não precisamos nos preocupar com sua complexidade porque a Microsoft já desenvolveu uma solução para isso. Só temos que usar suas bibliotecas de fala.

Etapa 1

Primeiros passos com reconhecimento de fala

Vamos começar com uma ideia básica:

  • Criar gramática de reconhecimento de fala (gramática SRGS)
  • Inicializar objeto do reconhecedor de fala e carregar gramática (SpeechRecognizer)
  • Registre-se para eventos de reconhecimento de fala e crie manipulador

Criar gramática de reconhecimento de fala

Antes de começar com o reconhecimento de fala, precisamos entender como podemos programar o Universal Windows App para entender nossa linguagem ou comandos. Para fazer isso, precisamos criar uma Gramática de Reconhecimento de Fala. A gramática de reconhecimento de fala pode ser criada usando SRGS Grammar para aplicativo universal do Windows:

  • Use XML para criar documentos de gramática em conformidade com a Speech Recognition Grammar Specification (SRGS) Versão 1.0, o padrão W3C para gramáticas de reconhecimento de fala.

Observação:outras formas possíveis estão disponíveis no .Net Framework, mas não são compatíveis com UWP quando este artigo foi escrito. Que são:
  • Crie gramáticas de maneira programática usando membros das classes GrammarBuilder e Choices no namespace System.Speech.Recognition.
  • Use construtores e métodos de classes no namespace System.Speech.Recognition.SrgsGrammar para criar gramáticas compatíveis com SRGS de maneira programática.

Começaremos com a Gramática XML. Antes de começarmos a criar o arquivo de gramática, precisamos imaginar e definir como o usuário irá interagir com nosso aplicativo. No contexto deste projeto, o usuário irá comandar o robô para se mover em qualquer direção, parar e comandar para ativar / desativar a detecção de obstáculos. Podemos fazer uma lista de vocabulário de fala que são os seguintes:

  • Avançar
  • Mover para trás
  • Vire à direita
  • Vire à esquerda
  • Pare
  • Envolva-se na detecção de obstáculos
  • Desengate da detecção de obstáculos

Para este vocabulário, precisamos projetar XML Grammar. Precisamos apenas seguir algumas regras básicas do SRGS v1.

Gramática SRGS

Para criar a gramática SRGS, algumas regras básicas devem ser seguidas, que são:

  • O elemento raiz deve ser gramática
  • A versão da gramática de atributos, o idioma e o namespace XML devem estar presentes.
  • A gramática deve conter pelo menos um elemento de regra. (O elemento de regra contém uma palavra ou frase que o usuário pode falar).
  • Cada elemento de regra deve ter um atributo id exclusivo.

Vimos a estrutura básica necessária para gramática SRGS. Agora precisamos criar um vocabulário para isso. O vocabulário é um conjunto de palavras que produz algo significativo de comando para o robô.

Por exemplo:“Move Forward” ou “Move Reverse”, aqui Move vem antes de Forward e Reverse. Assim, em regra, deve vir primeiro antes de Forward e Reverse. Portanto, podemos extrair Forward e Reverse em outra regra. Veja a imagem abaixo:

O que é regra raiz ? É o nó inicial ou nó raiz a ser carregado quando o Reconhecedor de fala carrega a gramática. É opcional. Você pode ignorá-lo, mas precisará especificar o nó raiz de forma programática.

O que é atributo raiz na tag de gramática? O atributo raiz define a regra de inicialização para o reconhecedor de fala ao carregar a gramática. Se não for especificado como atributo, você precisará especificá-lo programaticamente.

Este artigo destina-se a iniciantes e, portanto, não é possível cobrir tags e atributos SRGS complexos. Você pode aprender mais sobre gramática SRGS no MSDN e W3C.

Acabamos de criar a gramática SRGS para nosso robô. Agora, veremos como implementar o Reconhecedor de fala para o aplicativo universal do Windows.

Inicialize o reconhecedor de fala e carregue a gramática

SpeechRecognizer classe está disponível em Windows.Media.SpeechRecognition namespace. Importe o namespace em seu arquivo de código. Antes de inicializar, precisamos criar um arquivo XML Grammar em nosso projeto. Já criamos conteúdo para o arquivo de gramática na seção anterior.

Nota:Se ‘CompilationResult’ falhar, pode haver algum problema com a interface do Mic. Verifique a conexão com o microfone. Verifique se ele foi detectado no aplicativo IoT Core padrão ou não.

Registre-se para eventos de reconhecimento de fala e crie manipulador

Na última etapa, iniciamos o reconhecedor de fala e estamos prontos para ouvir a fala e analisá-la. Após a análise bem-sucedida, ‘ContinuousRecognitionSession’ gerará um evento denominado ‘ResultGenerated’. Este evento fornece o resultado da análise como argumentos do evento que podem ser processados ​​para realizar tarefas com base na fala falada. Também podemos ouvir o estado do reconhecedor por evento ‘StateChanged’ para dar ao falante alguma indicação de que o reconhecedor está ouvindo.

Aqui, ‘MyRecognizerStateChanged’ é a função que será gerada por ‘MyRecognizer’ quando seu estado mudar de um para outro. Ele fornecerá informações valiosas sobre o estado quando 'MyRecognizer' começar a escutar e quando parar de escutar. Depois de parar de ouvir, ‘MyRecognizer’ analisa a fala em relação à gramática fornecida e gera o evento ‘ResultGenerated’ quando bem-sucedido.

Observação:você não precisa criar as funções ‘MyRecognizer_StateChanged’ e ‘MyRecognizer_ResultGenerated’ sozinho. Em vez disso, o Visual Studio fornece uma maneira de criá-los automaticamente para você. Você pode criá-los automaticamente pelo Visual Studio usando duas vezes no lado direito do + =de um evento.

Você também pode registrar manipuladores de eventos logo após inicializar o objeto SpeechRecognizer.

Estamos quase terminando!

Etapa 2

Como dirigir com base na fala analisada?

Na seção anterior, configuramos a gramática personalizada e o reconhecedor de fala para o aplicativo Universal do Windows. Quando o Reconhecedor de fala analisa com sucesso a fala falada, ele gera o evento ‘ResultGenerated’. Este evento contém o resultado analisado como argumento. Vamos ver como detectar o que está sendo falado e o que fazer com base na fala falada:

Aqui, o argumento 'args' é passado ao manipulador de eventos pelo SpeechRecognizer na análise bem-sucedida da fala. ‘Args.Result.Text’ é do tipo string. Ele contém a fala falada como texto. Você pode realizar tarefas específicas de fala usando o bloqueio condicional.

Não é possível mostrar o código completo para conduzir o robô. Eu forneci uma classe estática chamada ‘MotorDriver’ que contém várias funções para conduzir o robô. Esta classe gerencia os pinos Gpio para conduzir o robô. O código-fonte completo é fornecido no final do projeto. Se você ainda não conhece o Raspberry Pi 2 e o Windows 10 IoT, consulte este link para começar.

Etapa 3

Atualizar capacidade do dispositivo

Antes de implantar o aplicativo universal do Windows no Raspberry Pi 2, precisamos definir a capacidade de dispositivo apropriada para que o aplicativo seja executado com direitos de acesso de hardware específicos. No contexto deste aplicativo, precisamos do dispositivo externo "Microfone" para usar. Para habilitar ‘Microfone’ no manifesto do pacote:


Tudo feito no lado do software. Agora é hora de conectar o hardware. O código-fonte é fornecido no final do artigo.

A maior parte da implementação do Reconhecimento de Fala está feita e não é viável explicar cada linha do código aqui. Em vez disso, o código-fonte é bem comentado. Peça qualquer dúvida.

Etapa 4

Implantar e registrar o aplicativo como aplicativo de inicialização

O robô precisa reconhecer comandos de voz sempre que é ligado. Para fazer isso, você precisa registrar seu aplicativo como aplicativo de inicialização para que, toda vez que o Raspberry Pi 2 for inicializado, ele inicie seu aplicativo logo após a inicialização. Para fazer isso, primeiro você precisa implantar seu aplicativo no Raspberry Pi 2 e, em seguida, registrá-lo como aplicativo de inicialização.

Antes da implantação, é bom mudar o nome da família do pacote do aplicativo:


Depois de alterar o nome da família do pacote, implemente o aplicativo no dispositivo remoto (seu Raspberry Pi 2).





Se você não souber a maneira adequada de implantar seu aplicativo no Raspberry Pi 2, consulte este link.

Depois que o aplicativo for implantado com sucesso, você precisa registrar o aplicativo como aplicativo de inicialização. Você pode registrar seu aplicativo como inicialização usando dois métodos:usando o PowerShell ou o portal de gerenciamento da Web do Windows IoT Core. Vou com o segundo método. Abra o navegador da web e siga:



Está tendo problemas ao se registrar como aplicativo de inicialização? Consulte este artigo.

Depois de registrar com sucesso seu aplicativo como aplicativo de inicialização, reinicie o Raspberry Pi 2 e veja se seu aplicativo é iniciado após a inicialização ou não. Caso contrário, verifique todas as etapas desde a implantação até o registro. Com a inicialização bem-sucedida do aplicativo, agora é hora de conectar as coisas.

Esquemático



As peças de hardware consistem em chassis de robô (com motores DC), Raspberry Pi 2 (com Windows 10 IoT Core), bateria, sensor de distância, etc. Bateria do motor (mostrado na imagem no lado esquerdo 'Bateria:9-12VDC') e vai diretamente para o driver do motor H-Bridge. É necessária uma fonte de alimentação separada para o Raspberry Pi 2. O USB PowerBank é adequado para fornecer energia suficiente para o Raspberry Pi 2. Na ausência do USB PowerBank ou fonte filtrada de 5 VCC, um circuito regulador de tensão separado (usando 7805) é necessário para ligar o Raspberry Pi e o sensor de distância ultrassônico.

Se você não tiver USB PowerBank ou fonte filtrada de 5 VCC, você pode usar a bateria do motor (mostrada na imagem acima no lado esquerdo - cor laranja, bateria:9-12 VCC) para ligar o Raspberry Pi 2. O esquema para a configuração é fornecido em final do artigo (denominado 'Esquema:Bateria do motor').

Por que resistores com sensor de distância ultrassônico?

O sensor de distância ultrassônico funciona com 5V, enquanto o Raspberry Pi 2 funciona com 3,3V. Não podemos conectar diretamente o pino Echo do sensor diretamente ao pino do Raspberry Pi, pois ele terá uma saída de 5V. Isso vai queimar Raspberry Pi. Portanto, precisamos diminuir a tensão de saída do sensor para 3,3 V antes de enviar para o Raspberry Pi. A tensão do sensor pode ser reduzida usando o circuito divisor de tensão. Assim, Vout pode ser calculado como:

R1 =1000 ohmR2 =2000 ohmVin =5V (pino de eco do sensor) Vout =5 * (2000 / (1000 + 2000)) =3,3V (para o Raspberry Pi 2)

AVISO:Não conecte o pino de eco do sensor de distância ultrassônico diretamente ao pino GPIO do Raspberry Pi. Pode queimar Raspberry Pi. Use um conversor de nível lógico ou divisor de tensão apropriado.

Montagem Final




Problemas Conhecidos

O reconhecimento de voz não funciona (Build 10586)

O reconhecimento de voz e a síntese não funcionam em nenhum dispositivo IoT (RPi2, MinnowBoard MAX e Dragonboard 410c) se você instalou o Windows IoT build 10586.

Solução: No momento, nenhuma solução válida está disponível. Espero que a equipe do Windows IoT resolva esse bug na próxima compilação. Ainda assim, se você quiser manipular o reconhecimento de voz, volte para a versão antiga 10240 e funcionará perfeitamente.

Problema de microfone

O reconhecimento de voz definitivamente requer um microfone de alta qualidade. Você ainda pode usar o microfone de baixa qualidade quando ele estiver próximo, mas quando o microfone estiver longe, cerca de 1 a 2 metros, ele não reconhecerá com precisão.

Solução: (Opção 1):Compre um microfone de alta qualidade. Às vezes, pode acontecer que, mesmo depois de um microfone de alta qualidade, ele não reconheça corretamente. Nesse caso, é necessária uma voz alta. (Opção 2):Microfone sem fio seria ótimo. Você pode controlar o robô mesmo de grande distância sem se preocupar com ruídos externos. Você pode comprar um ou fazer o seu próprio referindo-se a este vídeo.

Atraso de processamento do reconhecedor

É óbvio que o reconhecedor precisa de algum tempo para processar a fala. Não é um problema ou problema, mas pode causar problemas no sistema em tempo real.

Suponha que temos um carro e um robô de alta velocidade que segue nosso comando de fala. Vamos supor que o carro seguirá nosso comando de voz após 600-2000ms (devido ao atraso de processamento). Portanto, se comandarmos para parar, o carro analisará o sinal após algum tempo, o que pode levar a um evento catastrófico.

Solução: No momento (quando este artigo foi escrito), não há uma solução apropriada disponível. Espero que seja resolvido no futuro. 🙂

Diferença de pronúncia

Pessoas de diferentes regiões usam pronúncias diferentes para uma única palavra. O Reconhecedor de Fala não consegue analisar a fala, se a pronúncia da palavra falada for diferente do que está programado.

Solução: Você pode especificar o idioma e a região no arquivo de gramática SRGS XML para analisar a pronúncia para a região específica.

Digamos que queremos analisar inglês (Reino Unido), precisamos definir o atributo da tag gramatical xml:lang =”en-GB”. Aqui, o código ISO do país para o Reino Unido é GB. Assim, 'en-GB' diz ao reconhecedor de fala para analisar a fala com base na pronúncia do inglês (Reino Unido). Outro exemplo, para o francês canadense, use “fr-CA”.

Ruído Ambiental

Som e vibração indesejados, causados ​​por uma ou mais entidades externas, afetarão a precisão do processamento. Às vezes, o reconhecedor não entende a fala, mesmo que seja falada corretamente.

Solução: Pode não ser possível resolver ou eliminar esse ruído. No nível atual de tecnologia, só podemos esperar usar essa tecnologia em áreas sem ruído. Outra solução possível é usar um microfone inteligente que seja capaz de reduzir o ruído (denominado microfone com cancelamento de ruído).

O microfone USB / placa de som USB não reconhece

Com o lançamento da compilação 10531, o Windows IoT Core oferece suporte a dispositivos de áudio genéricos. A maioria dos microfones USB ou placas de som USB requerem um driver genérico USB. Se o seu dispositivo usar um driver genérico, ele funcionará.
Trabalho com sucesso com meu RPi2 (Amazin.in)

Solução: Experimente outro microfone USB ou placa de som USB.

No meu caso, comprei uma placa de som USB. Funcionou perfeitamente. Eu conectei o microfone ao conector de microfone da placa de som. Você pode comprar USB SoundCard na Amazon.com ou em outros sites de compras online. Os indianos podem comprar USB SoundCard na Amazon.in.

Aprimoramentos futuros

Não há limitação quando se trata de novas ideias. Este artigo explora a implementação básica do reconhecimento de voz. Além disso, você pode estender o projeto fornecendo indicação visual do resultado analisado. Por exemplo, ligue o LED verde por um segundo após a análise bem-sucedida do comando falado, caso contrário, ligue o LED vermelho por um segundo. Além disso, para evitar comandos acidentais, você também pode programar o robô para instruir quando ouvir e quando dormir.

Você percebeu?

Aqueles que viram cuidadosamente a imagem animada do título do projeto saberão que não cobri algo que mostrei lá. Observe com atenção e tente implementar esse recurso oculto em seu robô.

Boa sorte 🙂
Fonte: Robô controlado por fala

Processo de manufatura

  1. Windows 10 IoT Core - Leitura dos pulsos de frequência cardíaca
  2. Windows IoT:Porta de reconhecimento facial
  3. Botão AWS IoT controlado por movimento
  4. Windows 10 IoT Core no Raspberry Pi 2 - Dados do sensor Adafruit
  5. Windows 10 IoT Core e SHT15
  6. Windows 10 IoT Core para Raspberry Pi 3 Modelo B +
  7. Robô Raspberry Pi controlado por Bluetooth
  8. Robô controlado por gestos usando Raspberry Pi
  9. ROBÔ WIFI RASPBERRY PI CONTROLADO PELO TELEFONE INTELIGENTE ANDROID
  10. GoPiGo v2 com Windows IoT