1 Comentário

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

Speech to Text
Este post faz parte da série Bosch XDK. Leia também os outros posts da série:

Olá caro leitor! Continuo com a minha saga explorando o Bosch XDK, que se à primeira vista pode parecer caro, ele entrega valor onde precisa no momento de implementar soluções completas para coleta de dados distribuída ou atuação remota. Neste artigo vamos continuar na linha de integração entre Bosch e IBM, onde vamos apresentar um projeto mostrado no último Meetup na IBM Hortolândia que rolou no mês passado. Nele comandamos o XDK por voz!

Comandando um sensor node por voz?

Isso, você não leu errado, com o uso do serviço Speech to Text da IBM podemos capturar o áudio de uma fonte como, por exemplo, a placa de áudio de um computador, enviar esses dados para o serviço de transcrição, que nos devolve o texto equivalente onde poderemos mapear os caracteres e verificar se a sentença falada é ou contém um comando. A arquitetura dessa ideia de projeto é apresentada abaixo:

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

Sobre o XDK não temos muito o que adicionar, mas se por um acaso o leitor quiser conhecer mais sobre esse poderoso sensor node, pode verificar neste meu artigo onde foi dada uma introdução e falamos um pouco sobre as características chave desse dispositivo (e não esqueça de voltar aqui depois hein).

Uma coisa interessante é que integraremos duas ferramentas do IBM Bluemix, o Watson IoT Platform, e o já citado Speech to Text. Sobre o primeiro, temos um guia completo para integrar o XDK no gerenciador de dispositivos IoT da IBM, então antes de continuar, dê uma passadinha neste artigo aqui.

Para esse projeto, desenvolveremos duas aplicações, uma no firmware do XDK, e outra aplicação Desktop em Java. Mas não se engane, a aplicação desenvolvida poderia ser voltada para um dispositivo móvel baseado em Android.

Mas então o que essa demonstração vai fazer? Bom, no artigo guia de integração do XDK com o Watson IoT nosso firmware iniciava e parava de fazer uma coleta de dados dos sensores da placa ao pressionar um dos botões, certo? Pois bem, o XDK agora vai receber comandos vindos da plataforma IoT da IBM utilizando o protocolo de mensagem padrão MQTT, que vai substituir o pressionamento dos botões e iniciar ou pausar a aquisição de dados.

Ok, mas quem é que envia esses comandos ao XDK? Sim, a aplicação em Java que, pasmem, pode estar rodando num computador em qualquer lugar do mundo! Bastando ter as credenciais do serviço Speech to Text e o Device-id do dispositivo XDK integrado previamente no Watson IoT.

Para disparar o envio do comando via MQTT, a aplicação fica constantemente observando o áudio que chega à placa de som do computador, e envia para o Speech to Text fazer a transcrição. Quando o texto contém o comando desejado, ele então dispara um comando pelo MQTT para o Device-id apontado, que é o XDK, e reinicia o ciclo.

Gostei, o que preciso para rodar esse projeto?

Vamos preparar o ambiente para rodar essa demonstração. Para isso vamos listar os requisitos necessários:

  • Bosch XDK Cross Domain kit;
  • Bosch XDK Workbench versão 2.x;
  • Notebook com conexão à internet;
  • SO Windows ou Linux (utilizaremos o Ubuntu nesse exemplo);
  • Apache Maven, para build da aplicação Java;
  • Conta IBM Bluemix com Watson IoT e Speech to Text configurados;
  • Repositório com o código fonte para XDK e Aplicação Java, aqui.

Com essa listinha em mãos podemos preparar todo ambiente para rodar nosso projeto. Para o XDK Workbench, citamos a versão 2.x pois a atual 3.x sofreu grandes modificações no SDK e o projeto ainda não foi testado nela.

Na sua máquina de desenvolvimento importe o projeto de firmware encontrado no repositório (não mexa em nada ainda, falaremos sobre o código mais adiante). Ainda na sua máquina de desenvolvimento, instale o Maven build system, utilize as instruções do fornecedor aqui, essa ferramenta é necessária para resolver as dependências da aplicação Java, em especial, as existentes da API do IBM Bluemix.

Não se preocupe com as URLs dos repositórios, o arquivo utilizado pelo Maven da nossa demonstração já está devidamente populado. Extraia o projeto da aplicação Java em um local conhecido, e também não mexa na aplicação ainda. Com esse passo feito teremos todo o necessário para construir nossa aplicação.

Credenciais: Preparando o Speeh to Text da IBM

Esse passo ja é conhecido para quem leu o guia de integração do XDK ao Watson. Teremos que refazer esse passo, mas dessa vez para o Speech to Text. A vantagem aqui é que a burocracia é menor, para ter acesso ao serviço pela aplicação Java, primeiramente logue em sua conta IBM Bluemix e selecione um novo serviço, em seguida Speech to Text.

Ao criar o serviço, agora precisamos gerar as credenciais, para isso observe as imagens abaixo, e ao final do processo guarde a autenticação com você, iremos inserir esses dados em um local conveniente da aplicação Java:

Pondo as mãos no código fonte!

Agora, efetivamente, vamos mexer nas coisas, o lado do firmware do XDK não precisa de grandes modificações, mas um item que constantemente me é perguntado é onde inserir os dados de WiFi e credenciais para acessar o IoT Watson. Para isso abra o arquivo mqttConfig.h localizado na pasta source, você deve ver algo assim:

Vá direto à linha 48, as constantes definidas nessa linha basicamente representam o ID e Senha da sua WiFi, basta adicionar a string correspondente a esses valores. Com isso o XDK conseguirá se conectar à rede.

Para conectar o XDK no Watson IoT, você deve fornecer seu MQTT_ID, que é a string padrão pro serviço da IBM. A estrutura dessa string pode ser encontrada no guia de integração XDK e Watson IoT. E por último, você precisa passar a URL do broker MQTT desejado, no caso o da IBM, para isso edite a variável MQTT_BROKER_NAME. Feita essas alterações, compile o projeto e clique na opção Flash e pronto, seu XDK em alguns segundos estará conectado ao Watson IoT Platform aguardando comandos.

O passo mais chatinho nesse projeto reside na aplicação Java, para isso, agora volte ao projeto que você extraiu. Primeiramente precisamos configurar as credenciais e o Device-id que a aplicação deverá acessar, para isso dentro do diretório xdk_commander navegue para src/main/resources, você verá um arquivo chamado de application.properties, abra-o em um editor de texto e você deve ver algo parecido com o que está abaixo:

Basicamente todos os campos deverão ser populados de acordo com o valor gerado. Em Organization-ID, por exemplo, você precisa do org-id da sua conta Bluemix; API-Key e Authentication token são obtidos ao criar um dispositivo no Watson IoT, e caso você não tenha anotado, volte no IoT Platform e gere o dispositivo novamente. Device-Type e ID basicamente são os mesmos valores passados no firmware do XDK.

Por fim, pegue as credenciais do Speech to Text que você gerou anteriormente e adicione em stt-username e password, respectivamente. Pronto, todas as credenciais estão populadas, agora a aplicação Java vai poder acessar o Bluemix para transcrever áudio e enviar comandos pelo MQTT.

Estamos prontos para fazer o build, sigam os passos, primeiro retorne à pasta xdk_commander e abra um terminal. Iremos resolver as dependências usando o Maven previamente instalado, para isso:

Esse passo pode demorar alguns minutos pois basicamente o Maven vai fazer fetch de todos os fontes necessários para build da aplicação. Terminado esse passo, finalmente, faça o build da aplicação com:

Lembrando que esse mesmo comando também irá rodar a aplicação. Se a conexão com internet estiver disponível, imediatamente ele irá conectar aos serviços do Bluemix e transmitir comandos que batam com as sentenças esperadas.

Fiquei curioso, como isso funciona?

Para entender o funcionamento principal dessa aplicação, vamos dar uma olhada nos fontes principais. Partindo da aplicação em java, vejam a classe principal abaixo:

Utilizei um exemplo fornecido pela IBM de como acessar o Speech to Text e fiz minhas modificações. A primeira é escanear a fonte de áudio a cada segundo, assim o método Main roda infinitamente e utiliza o método CreateApplication(), onde ele basicamente conecta-se aos serviços do Bluemix. Em seguida ele chama o método StreamVoice(), onde ele captura o áudio corrente, abre um WebSocket e envia a requisição ao serviço Speech to Text e instrui a chamada da callback onTranscription().

Essa chamada vai procurar na string recebida se existe um dos comandos válidos (Start ou Stop), caso positivo um Publish é enviado ao Device-ID (no caso o XDK), contendo o comando a ser processado e ciclo de scan se inicia.

No firmware o processo é baixo nível, mas nem tanto, vamos abrir o arquivo que contém a thread que cuida do MQTT:

A thread ClientTask() basicamente cuida do processo de transmissão e recepção de dados, ela fica em repouso até que a variável clientDataGetFlag sejá colocada em true. Isso ocorre quando um comando é publicado pela aplicação Java, o payload vem por MQTT em formato JSON e invoca a callback ClientRecv(). Essa função pesquisa no JSON se é o comando Start ou Stop, baseado nesses comandos clientDataGetFlag é colocado em true e o XDK passa a fazer a aquisição de dados dos sensores on board. Os dados são formatados em JSON e enviados ao IoT Platform onde o usuário do Bluemix poderá ver os dados que chegam, ou criar gráficos para ver sua evolução ao longo do tempo.

Lembrando que é possível adicionar comandos em português e disparar o sensor com frases inteiras se desejado. Legal não?

Conclusão

O objetivo desse artigo foi demonstrar mais um caso de aplicação de Internet das coisas na sua forma mais real, para isso contamos com um dispositivo de borda conectado, o Bosch XDK, seu arsenal de sensores, um serviço de nuvem poderoso como IBM Bluemix fornecendo ferramentas fantásticas como gerenciador de dispositivos IoT e Speech to text. Com essas ferramentas e em algumas horas de código pudemos escrever um caso de comando remoto envolvendo voz. E você leitor, acha que esse projeto clareou tanto para uso do XDK quanto do IBM Watson? Postem seus comentários e fiquem ligados, que postaremos mais projetos legais com a dobradinha XDK e IBM Watson, até a próxima!

Referências

Outros artigos da série

<< Apresentando o Bosch XDK Sensor X-perience
Este post faz da série Bosch XDK. Leia também os outros posts da série:
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.

Internet Das Coisas » Bosch XDK: Comande-o por voz com IBM Bluemix Speech to Text
Talvez você goste:
Comentários:

1
Deixe um comentário

avatar
1 Comentários
0 Respostas
1 Seguidores
 
Discussão de maior alcance
Discussão mais quente
1 Autores de comentários
Bruno Comentários recentes
  Notificações  
recentes antigos mais votados
Notificar
Bruno
Visitante
Bruno

opa legal, cai de paraquedas no seu site.. estou procurando o que a industria 4.0 irá trazer.. voce tem mais aplicações do xdk ?

Séries



Outros da Série

Menu