Ok, Embarcados, me ensine a usar Hotword Detection

Hoje em dia muitas aplicações usam comando de voz. Vira e mexe, você anda pela rua e percebe alguém dizendo “Ok, Google” para o seu próprio celular, ou conversando com a Siri. Para além do cotidiano, a detecção de palavras está no rumo de atingir o estado da arte no meio médico em cirurgias não-invasivas de alta tecnologia, na agricultura de ponta em tratores ativados por voz, sistemas de irrigação inteligente comandado por voz e de monitoramento remoto, na área financeira através da substituição de senhas por comando de voz e diversas outras aplicações ainda estão por vir. Veja referências no final do artigo sobre esses tópicos.

Essa funcionalidade salta aos olhos. Mas como colocá-la de modo fácil na sua aplicação sem precisar implementar do zero? Com uma rápida pesquisa, é possível encontrar uma gama de soluções já implementadas e com bindings para diversas linguagens de programação, como CMU Sphinx (C/Java/Python), Kaldi (C++), HTK (C), Pygsr (Python), Snowboy (C/C++/Go/Java/Node/Perl/Python). Convido o leitor a testá-las.

De todas estas encontradas, a API de mais fácil e rápido uso e instalação foi a Snowboy Hotword Detection. Vamos conhecer um pouco mais dessa API.

Snowboy Hotword Detection: um pouco mais sobre a API

Snowboy Hotword Detection fornece um conjunto de bibliotecas em diferentes linguagens de programação para detectar a ocorrência de uma palavra-chave. O algoritmo do Snowboy faz uso de DNN (Deep Neural Network, isto é, Redes Neurais Profundas) para detectar Hotwords. A hotword é a palavra-chave que se deseja reconhecer, a qual você pode treinar online uma já existente ou criar uma nova, basta realizar login. Após o treinamento, é possível baixar os pesos da rede neural, isto é, o modelo para a determinada palavra-chave.

Isto permite que a sua aplicação reconheça hotwords sem precisar conectar o dispositivo à internet.

Dashboard de treinamento e teste de Hotword Detection do Snowboy
Figura 1: Dashboard de treinamento e teste de Hotwords do Snowboy

Lembrando que, assim como em qualquer treinamento, as condições do ambiente (ruídos externos) e equipamentos utilizados (microfone) são extremamente relevantes para garantir a qualidade do treinamento e, portanto, detecção. Ao gravar as amostras e realizar o teste final, a palavra fica disponível para outros usuários aprimorarem.

Após obter a hotword, o arquivo baixado terá a extensão .pmdl ou .umdl, que indicam, respectivamente, modelos pessoais e universais de acordo com o número de amostras, os pesos da rede que designa a palavra treinada.

Hardware de testes

Agora iremos embarcar essa funcionalidade. O hardware de testes utilizado foi o computador em módulo Apalis iMX6 e a placa base Apalis Evaluation Board com uma Webcam USB, que pode também ser substituída por um microfone USB. Para efeito de testes, é recomendado que o treinamento seja executado com o mesmo captador de áudio, assim, garantindo que terá os mesmos ruídos e artefatos no som provenientes do hardware.

Configuração de hardware com Apalis iMX6 e Apalis Evaluation Board para Hotword Detection
Figura 2: Configuração de hardware com Apalis iMX6 e Apalis Evaluation Board

Configurando o Snowboy com Apalis

Neste teste, utilizamos a imagem padrão da Toradex para o Apalis iMX6Q.

Para configurar o Snowboy, precisamos primeiro resolver as dependências. Dentre todos os wrappers disponíveis (C/C++, Java/Android, Go, Node, Perl, Python2/Python3, iOS/Swift3 e iOS/Object-C), iremos utilizar Python, pela simplicidade.

Vamos eliminar as dependências do Python:

Instale o PortAudio:

Copie as libs e includes de /usr/local/ para /usr/.

Instale o pyaudio:

Certifique-se de que o microfone ou webcam USB está configurado, verificando os arquivos:

Aplicação

Neste estudo de caso, iremos testar o Snowboy na aplicação para detectar 2 hotwords, das quais a detecção da primeira acenderá mais um led (em uma escala de 5 leds) e na detecção da outra hotword, apaga o último led aceso. Para isso, temos que realizar poucas conexões na Apalis Evaluation Board, uma vez que ela já possui leds.

As conexões que precisaremos fazer são nos seguintes pinos da Apalis Evaluation Board:

Conector X3

Conector X34

10

LED1

9

LED2

8

LED3

7

LED4

6

LED5

Conexões entre pinos de GPIO e leds disponíveis na Apalis Evaluation Board
Figura 3: Conexões entre pinos de GPIO e leds disponíveis na Apalis Evaluation Board

Os pinos do conector X3 podem ser localizados no sistema de arquivo do Linux, basta conferir os datasheets da placa base e do módulo. Você pode encontrar diretamente na placa base os valores de MXM3.

Conector X3 da Apalis Evaluation Board com destaque para a marcação MXM3
Figura 4: Conector X3 da Apalis Evaluation Board com destaque para a marcação MXM3

Verifique com o cálculo:

GPIO[x]_IO[y] = 32 * (x – 1) + y

Conector X3 Apalis Evaluation Board

Conector X1 Apalis iMX6 (MXM3)

GPIO

Linux

10

1

GPIO2_IO4

36

9

3

GPIO2_IO5

37

8

5

GPIO2_IO6

38

7

7

GPIO2_IO7

39

6

11

GPIO6_IO10

170

Teste as conexões verificando se cada um dos leds acende ao exportá-los, definir como saída e ligá-los. Para mais informações de como acessar os GPIOs da placa base, consulte o artigo Usando GPIO e PWM no Linux Embarcado.

Software

 

Agora mãos na massa! (ou código!)

 

O Snowboy Hotword Detection disponibiliza uma série de demonstrações bastante simples para iniciar com a API com wrappers para várias linguagens de programação. Como mencionado anteriormente, optamos por Python.

A notificação de reconhecimento de palavras da API funciona com callbacks. Como o projeto trata de acender e apagar leds, utilizamos apenas 2 callbacks pois são necessárias 2 hotwords para detecção. Vamos ver a codificação

Desta forma, a adição de palavras chave é resumida na adição de callbacks e pesos da rede neural treinada para a hotword desejada. Neste projeto, os modelos são argumentos de entrada do script, então precisamos defini-los junto com a sensibilidade para o detector.

Vale a pena destacar que existe um script auxiliar que exporta os pinos de GPIO para o sistema de arquivos Linux e os configura como saída e, por fim, chama a aplicação com os pesos da rede para cada uma das hotwords como parâmetro de entrada.

Confira e teste o projeto disponível no Github!

Teste

Um fator relevante para a eficiência do reconhecimento é evitar locais ruidosos para o treinamento e treinar com o mesmo dispositivo de aquisição de áudio utilizado para detecção.

Para obter melhores resultados na detecção de hotwords, procure usar palavras treinadas várias vezes, por grupos distintos de pessoas (variando idade, gênero). Desta forma, o modelo da palavra será mais robusto. As palavras mais treinadas possuem extensão .umdl enquanto as treinadas um número menor de vezes, .pmdl. Estas extensões indicam, respectivamente, um modelo universal e pessoal da palavra.

Primeiramente, faremos um teste com as palavras bastante treinadas, Alexa e Snowboy. Como podemos ver, são modelos universais e estão entre as mais treinadas da biblioteca de hotwords.

Palavras-chave mais treinadas da biblioteca de hotwords do Snowboy
Figura 5: Palavras-chave mais treinadas da biblioteca de hotwords do Snowboy

Saiba mais

Usando GPIO e PWM no Linux Embarcado

Bosch XDK: Comande-o por voz com IBM Bluemix Speech to Text

Configurando Ramais e realizando ligações com a central telefônica VoIP

Referências

[1] Patente Americana: Voice Command and Control medical care system

[2] Patente Americana: Voice Controlled Surgical Suite

[3] Reportagem: Sustainable agriculture’s tractor of the future unveiled

[4] Artigo científico: An Intelligent Irrigation System with Voice Commands and Remote Monitoring of Field

[5] Reportagem: Banks Are Offering Voice-Recognition Technology to Replace Passwords

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Linux Embarcado » Ok, Embarcados, me ensine a usar Hotword Detection
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries

Menu