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. Estamos quase terminando! 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: 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. 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). 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. 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. 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: 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. 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. É ó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. Solução: No momento (quando este artigo foi escrito), não há uma solução apropriada disponível. Espero que seja resolvido no futuro. 🙂 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. 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). 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á. Solução: Experimente outro microfone USB ou placa de som USB. 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. 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 🙂
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
Você também pode registrar manipuladores de eventos logo após inicializar o objeto SpeechRecognizer.
Etapa 2
Como dirigir com base na fala analisada?
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
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
Se você não souber a maneira adequada de implantar seu aplicativo no Raspberry Pi 2, consulte este link.
Esquemático
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?
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)
Problema de microfone
Atraso de processamento do reconhecedor
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.
Diferença de pronúncia
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
O microfone USB / placa de som USB não reconhece
Trabalho com sucesso com meu RPi2 (Amazin.in)
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
Você percebeu?
Fonte: Robô controlado por fala
Processo de manufatura
- Windows 10 IoT Core - Leitura dos pulsos de frequência cardíaca
- Windows IoT:Porta de reconhecimento facial
- Botão AWS IoT controlado por movimento
- Windows 10 IoT Core no Raspberry Pi 2 - Dados do sensor Adafruit
- Windows 10 IoT Core e SHT15
- Windows 10 IoT Core para Raspberry Pi 3 Modelo B +
- Robô Raspberry Pi controlado por Bluetooth
- Robô controlado por gestos usando Raspberry Pi
- ROBÔ WIFI RASPBERRY PI CONTROLADO PELO TELEFONE INTELIGENTE ANDROID
- GoPiGo v2 com Windows IoT