Alexa Amazon: Inteligência Artificial no Raspberry Pi 3

Este é um dos projetos mais interessantes que realizei nos últimos tempos – integração do projeto Alexa da Amazon no Raspberry Pi 3. Vamos começar a conversar com as coisas agora, haha!!

Para quem não conhece, Alexa é um projeto da Amazon de construir uma interface de conversação humano-máquina, distribuída de forma aberta para que quanto mais pessoas utilize o serviço, mais inteligente ficará o programa.

Atualmente Alexa, possui áreas específicas de interesse, onde você pode escolher em qual área você deseja que seu sofware-assistente pessoal se concentre, tornando as respostas cada vez melhores e Alexa possa compreender nuâncias de contexto, do tipo, dizer que está fazendo ‘aquela lua’ num dia ensolarado é uma piada reforçando a intenção de que está ‘muito calor’.

voice-recognition-amazon-alexa-640px

Estes dias ainda estão por vir, se quiser saber mais sobre o projeto consulte a página de desenvolvedores do projeto Amazon Alexa.

No momento desde blog o projeto Alexa (ainda engatinhando) só compreende os idiomas Inglês e Alemão. Mas como os comandos são bem básicos (“the book is on the table…”) acho que já faz um verão incorporar este serviço em algumas idéias.

A Amazon vende atualmente 3 produtos da linha ‘Echo’ (Echo dot, Amazon Echo, Amazon Tap) que fazem uso do serviço Alexa e podem ser adquiridos no site da Amazon.

amazon-echo
Amazon Echo (utilizam o Alexa)

Nós vamos neste passo-a-passo instalar a Alexa no Raspberry Pi e prover desta forma uma maneira barata de interagir com diversas formas de serviço como:

  • Base de Conhecimentos Gerais
  • Anotações
  • Tempo e Temperatura
  • Ouvir rádio e podcasts
  • Acionar luzes e aparelhos de casa (este item exploraremos no próximo post… não esqueça de seguir o blog!)

O que você vai precisar?

  1. Raspberry Pi 3 (recomendo), mas deve funcionar (não tão bem) nos modelos anteriores..
  2. Fonte Raspberry Pi
  3. Micro SD Card (min 8 GB) com a instalação do Raspbian Linux. Caso seja a primeira vez é só seguir estes passos: Conhecendo e Iniciando com Raspberry Pi
  4. Microphone USB para interagir com Alexa
  5. Alto falantes externos (saída P2) conectando na saída de áudio do Raspberry Pi
  6. Teclado e Mouse USB (ou Wireless) e Monitor HDMI caso você não tenha como se conectar via SSH de outro computador no seu Raspberry Pi. Caso queira saber como, siga estes passosComo conectar seu micro ao Raspberry Pi via SSH
  7. Conexão Internet (a cabo ou WiFi)
  8. WiFi USB: caso esteja no Raspberry Pi 2 precisará de uma placa WiFi USB. Para o modelo Raspberry Pi 3, o WiFi já é integrado.

Registro na Amazon

Para que possamos usufruir dos serviços do Alexa da Amazon, precisamos nos registrar numa conta da Amazon (duh!) de desenvolvedores.

Clique nesse link: developer.amazon.com e preencha com suas informações.

Ao terminar o registro você chegará ao ‘Developer Console’ (figura abaixo).

avs-navigation-new

  • Clique na aba ‘ALEXA‘.
  • Em ‘Alexa Voice Service’ clique em ‘Get Started

A próxima tela será para registrar o seu dispositivo/produto a utilizar os serviços da Alexa.

avs-choose-device

  • Selecione ‘Device‘ e preencha cada um dos itens descritos abaixo:

avs-device-type-info

Device Type Info (Informação do Tipo de Dispositivo)

    1. Device Type ID: identificador único para seu dispositivo (crie o seu próprio identificador)
    2. Display Name: o nome do seu produto a ser apresentado no portal da Amazon.
    3. Clique em Next

avs-create-new-security-profile

Security Profile (Perfil de Segurança)

Clique na lista ‘drop-down’ do Security Profile e escolha ‘Create a new Profile’ para criar um novo perfil de segurança.

  • **Security Profile Name: prrencha com “Alexa Voice Service Sample App Security Profile”
  • **Security Profile Description: preencha com “Alexa Voice Service Sample App Security Profile Description”
  • Clique em Next
  • O ‘Client ID’ e o ‘Client Secret’ serão gerados e informados a você copie este valores que vamos utilizar em breve.

**Ambos perfis são sugeridos pelo tutorial da Amazon, você poderá criar os seus próprios perfis de segurança.

Ainda nos perfis de segurança clique na aba “Web Settings“:

avs-web-settings

avs-web-settings-filled

  • Veja se o ‘Security Profile’ que você criou está selecionado e clique no botão ‘Edit’

Device Details (Detalhes do Dispositivo)

avs-device-details-filled

  • Image: Faça upload de uma imagem teste, como esta abaixo, por exemplo:

icone

  • Category: selecione ‘Other’
  • Description: coloque a descrição que você quiser para seu dispositivo
  • What is your expected timeline for commercialization?: esta foi minha resposta: TBD (quer dizer, ‘To Be Defined’, ou no português claro, algum dia veremos)
  • How many devices are you planning to commercialize?: quantos dispositivos você pretende comercializar – coloquei 0 (zero)
  • Clique em Next

Amazon Music (Completamente Opcional)

Se você tem uma conta na Amazon e quer habilitar o Amazon Music, é só selecionar o serviço e clicar em ‘Submit’. Lembre-se, este passo é completamente opcional.

avs-amazon-music

Gerar os Certificados e Client ID

Com estes passos poderemos gerar os certificados seguros para utilização dos serviços no nosso dispositivo.

  1. Selecione o perfil de segurança criado ‘security profile’ e clique em Confirm.
  2. Abra o browser e visite https://developer.amazon.com/lwa/sp/overview.html.
  3. Preencha a política de privacidade (URL Http ou Https) de sua escolha. Seguiremos para com uma URL falsa, por exemplo, http://examplo.com
  4. Opcionalmente você poderá fazer o upload de uma imagem que será apresentada no Login da página da Amazon para prover aos seus usuários (do produto que você está criando) as informações sobre o mesmo.
  5. Clique em ‘Save‘.

 

Caso você não tenha salvo no passo anterior, próximo a “Alexa Voice Service Sample App Security Profile” (ou qualquer nome que você tenha designado), clique em “Show Client ID and Client Secret” para que seja apresentado o as chaves ‘client ID’ e ‘client secret’.

Além deste 2 valores, salve também o ‘Product ID’ que também precisaremos mais tarde.

Configurar e Instalar no Raspberry Pi

Para tornarmos este tutorial mais ‘faca na caveira’, vou apresentar 2 modos de instalação do Alexa:

  1. SIMPLES e RÁPIDA: segue uma simplificação criada sobre o projeto original do Alexa para RPi3 iniciada por sammachin – bastante coisa para melhorar, mas inicia o serviço de maneira muuito simples. Contra: precisa de um botão para acionar os serviços da Alexa.
  2. ORIGINAL AMAZON: código originalmente deixado pela Amazon para o Raspberry Pi, mais brutão, porém é possível entender como funciona cada parte. Permite que Alexa seja acionado por voz através da chamada ‘Alexa’.

1. SIMPLES e RÁPIDA

Esta versão apesar da parte de software ser muito simples, exige que implementemos um botão para acionar os serviços de voz da Alexa. Segue o esquemático:

circuit20diagram_bb
Diagrama para Botão de Acionamento do Alexa

Para lançar Alexa é necessário apenas clonar o repositório e rodar o arquivo de setup, desta forma:

sudo mkdir alexa-pi-fast
cd alexa-pi-fast
sudo git clone https://github.com/robozera/AlexaPi
sudo ./setup.sh

Seguindo os passos da instalação serão requisitados os valores do:

  • ProdutID
  • ClientID
  • Client Secret

Forneça-os de acordo com o requisitado. Para saber mais sobre desta simplificação (e colaborar também) visite o fork do GitHub do Robozera

2. Original AMAZON

Para esta versão precisaremos de monitor e teclado conectados no Raspberry Pi.

Clonar a aplicação de exemplo

Abra o terminal SSH conectando ao Raspberry Pi 3 (caso tenha dúvidas consulte: Como conectar seu micro ao Raspberry Pi via SSH).

Na linha de comando vamos criar um diretório para o projeto chamado ‘alexapi’ e copiar a aplicação exemplo (sample app) para dentro dele.

sudo mkdir alexa-pi
cd alexa-pi
git clone https://github.com/alexa/alexa-avs-sample-app.git

Antes de rodarmos o script de instalação, devemos copiar os dados do nosso certificado/dispositivo. Imaginando que você esteja dentro do diretório ‘alexapi’, entre no sub-diretório ‘alexa-avs-sample-app’ e edite o arquivo ‘automated_install.sh’.

Seguem os comandos:

cd alexa-avs-sample-app
sudo nano automated_install.sh

Cole os valores copiados para ProductID, ClientID, e ClientSecret nos locais indicados acima.

Como exemplo, o meu ficou algo parecido com isso:

  • ProductID="ALEXA-PI"
  • ClientID="amzn.xxxxx.xxxxxxxxx"
  • ClientSecret="4e8cb14xxxxxxxxxxxxxxxxxxxxxxxxxxxxx6b4f9"

Clique CTRL-X e Y (yes) para salvar.

Rodar o Script de Instalação

Sem sair do terminal, vamos executar o script através do comando:

./automated_install.sh

O script perguntará algumas coisas que devem ser respondidas com Y(es). O processo demorou quase 40 minutos para mim no Wifi… tome um merecido descanço!

Rodar o web service, a aplicação exemplo e a engine de ‘wake word’

Com a instalação completa, rodar o Alexa não é tarefa muito simples nesta versão. Precisaremos rodar 3 comandos em 3 janelas de terminal separadas (agora vem o valor da versão simplificada).

  1. Terminal #1: rodaremos o web servive para autorização
  2. Terminal #2: rodaremos a aplicação exemplo para comunicação com Alexa
  3. Terminal #3: rodaremos a engine (aplicação) de ‘wake word’ (palavra para despertar), isto é, uma aplicação exclusiva que aguarda o ‘Alexa’ para acordar a aplicação principal de reconhecimento de voz e inteligência.

Muita atenção, pois estes comandos devem rodar nesta mesma ordem.

Terminal #1

A partir do próprio Raspberry Pi (ligando o monitor HDMI, teclado e mouse) abriremos o primeiro terminal e entraremos com os seguintes comandos:

cd alexa-pi/alexa-avs-sample-app/samples
cd companionService && npm start

Isto colocará o servidor para rodar na porta 3000, deixando-o pronto para o cliente.

Para entender mais sobre o processo de autorização, busque em API Overview > Authorization.


Terminal #2

Abra o segundo terminal para rodar a aplicação cliente exemplo, através dos seguintes comandos:

cd ~/alexa-api/alexa-avs-sample-app/samples
cd javaclient && mvn exec:exec

Quando o cliente estiver rodando, a janela irá apresentar a seguinte mensagem:

Please register your device by visiting the following URL in a web browser and following the instructions: https://localhost:3000/provision/d340f629bd685deeff28a917. Would you like to open the URL automatically in your default browser?

Clique em “Yes” e abra a URL no browser do Raspberry Pi.

Se você estiver utilizando o Chromium browser você irá receber um alerta. É só clicar em Advanced (no fim da página) e depois seguir com Proceed to localhost (unsafe).

Você será levado para a página de Login da Amazon. Entre com suas credenciais e prossiga.

 

Após prosseguir você será levado para a página de de Autorização de Desenvolvedor, confirmando que seu dispositivo poderá ter acesso via o perfil de segurança criado anteriormente.

Clique Okay.

 

Você será redirecionado para a URL https://localhost:3000/authresponsesegseguida de alguns parâmetros (? query string) e a web page irá mostrar que o dispositivo (token) está pronto para ser utilizado (validado).

 

Retorne para aplicação Java que lançou a janela de redirecionamento e clique em OK. O cliente agora está pronto para receber as requisições para Alexa.

 

Em API Overview > Interfaces veja mais detalhes sobre como enviar e receber mensagens de Alexa.


Terminal #3

Caso você não queira acionar Alexa utilizando a ‘wake word’ pode pular este passo.

O projeto da Amazon suporta duas engines (aplicações) de terceiros para realizar esta tarefa: TrulyHandsFree da Sensory e o KITT.AI da Snowboy.

O paramêtro -e é utilizado para selecionar o agente e suporta 2 valores para {{engine}}: kitt_ai e sensory.

Nesta nova janela utilizaremos os comandos abaixo para acionar a engina de ‘wake word’ da Sensory ou KITT.AI de acordo com sua preferência.

Desta forma ao dizer “Alexa”, o serviço será acionado e estará pronto para receber seu comando.

Para utilizar o ‘wake word’ da Sensory digite:

cd ~/alexa-api/alexa-avs-sample-app/samples
cd wakeWordAgent/src && ./wakeWordAgent -e sensory

ou para utilizar o da Snowboy:

cd ~/alexa-api/alexa-avs-sample-app/samples
cd wakeWordAgent/src && ./wakeWordAgent -e kitt_ai

 


Falando com Alexa

Finalmente podemos comandar Alexa, seja pela versão com botão ou seja através da palavra chave “Alexa”.

Alguns exemplos:

Diga”Alexa” e aguarde pelo beep. Depois pergunte itens como:

  • “what’s the weather in São Paulo?”
  • “How much is 12 plus 12?”
  • “I want to hear some rock radio?”

Se você tiver alguma música armazenada (digamos The Reaper do Blue Oyster Cult) na Amazon Music e tiver habilitado o sistema, pode pedir:

  • “Play some music from Blue Oyster Cult”

Na versão da Amazon, é possível apertar o botão ‘listen’ ao invés de acionar pela palavra ‘Alexa’. Aguarde o beep e diga a frase.

Lembrando que Alexa ainda está disponível apenas em inglês (americano, britânico) e alemão – por enquanto!

Abs,

Danilo

Anúncios

4 comentários sobre “Alexa Amazon: Inteligência Artificial no Raspberry Pi 3

  1. quando sai o post sobre Acionar luzes e aparelhos de casa utilizando a alexa no raspberry pi? estou muito ansioso pra aprender.. tenho um raspberry, segui seu tutorial e utilizo a alexa pra algumas coisas, agora quero controlar meu arduino utilizando ela(se for possível).

    1. Utilizando somente o Arduino não vai rolar com Alexa.
      Precisa ser com o Rapsberry Pi mesmo.
      Estou com bastante dificuldade em dar seguimento no blog, pois estamos com muitos projetos na empresa.
      Vou tentar postar algo no fim desta semana para te dar uma luz, literalmente, hehe!! Abs

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s