Nós da equipe de engenharia do Wavespace, elaboramos uma prova de conceito de um robô assistente com Inteligência Artificial para controlar movimentos e ações do Lego Boost.
O robô que desenvolvemos se chama Faustina
, pois durante o seu processo de desenvolvimento ela já interrompeu várias vezes os seus criadores, enquanto eles estavam falando.
Nessa prova de conceito, utilizamos um kit Lego Boost
conectado via Bluetooth a um Raspberry Pi model 3
.
Conectados ao Raspberry, colocamos uma caixa de som (entrada P2) e um microfone (entrada USB).
O script que controla o robô foi desenvolvido em Python 3, testado no Raspbian e Mac OS Mojave. Por conta dos drivers específicios, não garantimos o seu funcionamento em outros sistemas operacionais:
Instalação do driver do portal audio
Para Raspbian:
$ apt-get install portaudio19-dev
Para Mac OS:
$ brew install portaudio
Instalação do ffmpeg
Para Raspbian:
$ apt-get install ffmpeg
Para Mac OS:
$ brew install ffmpeg
Instalação de bibliotecas a partir da pasta raiz do projeto:
$ pip install -r requirements.txt
Instalação da biblioteca de conexão com o Lego Boost:
$ pip install https://github.com/undera/pylgbst/archive/0.10.tar.gz
Configuração do Wit.ai
Para a parte de Natural Language Understanding (NLU)
da Faustina, estamos usando a biblioteca Wit.ai, desenvolvida pelo Facebook.
Acesse https://wit.ai, crie uma conta e um app a partir da pasta knowledge_base_backup, contida na raíz do projeto.
No final do processo de criação do app, será gerado um access token. Copie e cole-o no arquivo wit_client.py, no diretório raíz do projeto.
Execução do script
Antes de executar o script, verifique se o Lego Boost está ligado. Caso haja algum freezing na execução do código, provavelmente é devido a falta de conexão com o dispositivo. Nesse caso, verifique se ele não desligou automaticamente. Um indicativo de que o Lego Boost está conectado e operacional é uma luz azul no seu visor de cores.
Execute
$ python main.py
Em ambientes onde existem mais de uma versão do Python, utilize os atalhos apropriados, por exemplo pip3
e python3
.
Para que seu script execute automaticamente no boot do Raspberry, sugerimos que siga o passo a passo indicado nesse artigo
Para realizar perguntas a Faustina, espere que a luz verde seja exibida em seu visor de LED. Isso se dá, pois por simplicidade colocamos um intervalo de 5 segundos para a captura do áudio do usuário.
Para reduzir o delay entre uma pergunta realizada pelo usuário e a resposta em voz da faustina, criamos um mecanismo de cache de áudio, em que gravamos um arquivo por assunto que está cadastrado na base de conhecimento. Esses arquivos podem ser encontrados na pasta recordings
, na raíz do projeto.
O cadastro de novas intenções e entidades deve ser realizado no seu app do Wit.ai. Caso queira alterar algum texto da resposta, dirija-se ao arquivo knowledge_base.json
.
Após a alteração da base de conhecimento ou da resposta, apague os arquivos da pasta recordings, pois isso forçará o serviço de TTS a gerar um novo áudio, já considerando a alteração feita.
Cor | Significado |
---|---|
Azul | Conexão bluetooth com o Lego foi estabelecida com sucesso |
Branco | Procurando conexões disponíveis |
Verde | Robô está pronta para ouvir a pergunta do usuário |
Vermelho | Robô está realizando algum processamento |
Amarelo | Não foi identificado nenhuma pergunta |
Em evoluções futuras, queremos que a Faustina seja capaz de realizar movimentos mais complexos e interagir com uma gama maior de dispositivos. Por exemplo, podemos acoplar uma webcam no Raspberry para realizar deteção facial e lembrar o nome da pessoa com quem a Faustina está falando.
Além disso, é oportuno melhorar o mecanismo de corte do áudio (hoje realizamos o corte a cada 5s). No futuro, podemos identificar o momento exato que o usuário parou de falar e realizar o corte do áudio. Podemos também testar outras ferramentas de NLU, TTS e STT visando fazer um benchmarking de assertividade das respostas.