Montando nuestro altavoz inteligente Google HOME en una Raspberry Pi

Al fin se libero el SDK del Google Assistant para poder usar Google Home en Castellano (o Español) entre otros nuevos idiomas! Así que ahora es posible montar nuestro propio Google Assistant en una Raspberry Pi, en pocos minutos, con un micrófono y un altavoz, tendrás a una Raspberry Pi lista para atender tus peticiones!

 

 

 

Ideal para ponerla en el salón o cualquier sitio escondida, con un buen micrófono omnidireccional, podremos hacerle consultas en nuestro propio idioma y medianamente nos las esquivará correctamente 😉 Por recordar a parte del Español, también soporta Inglés, Alemán, Francés, Italiano y Japonés. Lo bueno es que Google lo tiene súper bien documentado, puedes seguir sus pasos o estos más resumidos para tenerlo todo listo!

 

Usaremos una Raspberry Pi con Raspbian instalado y actualizado, lo primero será verificar que el audio nos funciona bien, tanto el del micrófono como los altavoces por donde queremos sacar el sonido. Con el siguiente comando, primero veremos los dispositivos de grabación de audio y luego los de grabación:

arecord -l
aplay -l

 

Editamos nuestro fichero de configuración de audio ‘~/.asoundrc’ y especificamos el micrófono que estamos usando, en este caso un USB específico, pero también podríamos usar el micro de una webcam, así como el audio que me lo saque por la predeterminada:

pcm.!default {
  type asym
   playback.pcm {
     type plug
     slave.pcm "hw:0,0"
   }
   capture.pcm {
     type plug
     slave.pcm "hw:1,0"
   }
}

 

Si queremos hacer una prueba de sonido para ver si escuchamos algo…:

speaker-test -t wav

 

Mejor aún, grabar un ejemplo de cómo se nos escucha por el micrófono:

arecord --format=S16_LE --duration=5 --rate=16000 --file-type=raw out.raw

 

Para escucharlo a ver qué tal se nos escucha, ejecutaremos:

aplay --format=S16_LE --rate=16000 out.raw

 

Ahora ya podremos ir a la consola de las Acciones de Google, en https://console.actions.google.com, deberemos loguearnos con una cuenta de Google válida y crear un nuevo proyecto de Google Cloud Platform, para ello pulsamos en “Add/Import project”. Con la API de Google Assistant instalada en nuestra Raspberry accederemos para realizar consultas y el proyecto nos mostrará los datos sobre los consumos.

 

Debemos indicar el nombre del Proyecto y si queremos cambiar el idioma para las Acciones o seleccionar nuestro País, es el momento,

 

Tenemos que habilitar la API de Google Assistant API, desde https://console.developers.google.com/apis/api/embeddedassistant.googleapis.com/overview seleccionamos del combo nuestro proyecto y pulsamos en “Habilitar”,

 

Ahora ya podríamos ir a registrar nuestro dispositivo! Vamos de nuevo a la Consola, en https://console.actions.google.com/
Ir a “Device registration” > “Register Model” y lo creamos!

 

Tendremos que ponerle un nombre o ‘Product Name’ (que anotaremos), un nombre del fabricante o ‘Manufacter Name’  y seleccionamos si queremos algún tipo de dispositivo, si no lo tenemos claro lo dejamos en ‘Auto’, pulsamos en “Register Model”,

 

Ahora, tendremos que descargarnos el fichero con los credenciales de acceso al servicio de Google Assitant, pulsamos en “Download OAuth 2.0 credentials” y los guardamos por ahí,

 

Los copiamos a la Raspberry Pi por ejemplo con WinSCP o similar al path /home/pi,

 

Volvemos al asistente y pulsamos en “Skip”,

 

Grabamos el dispositivo que acabamos de registrar, pulsando en “SAVE”,

 

Bien, ahora en la Raspberry Pi configuraremos el entorno virtual de Python para aislar el SDK y sus dependencias de los paquetes Python del sistema, nos escogemos la opción de Python 3:

sudo apt-get install python-dev python-virtualenv
virtualenv env --no-site-packages
env/bin/python -m pip install --upgrade pip setuptools wheel
source env/bin/activate

 

Instalamos las dependencias necesarias además de  Google Assistant SDK que nos permitirá tener Google Assistant corriendo en la Raspberry Pi:

sudo apt-get install portaudio19-dev libffi-dev libssl-dev libmpg123-dev

 

Mediante pip instalamos la última versión de Python en el entorno virtual:

python -m pip install --upgrade google-assistant-sdk[samples]

 

Instalamos o actualizamos la herramienta de autorización:

python -m pip install --upgrade google-auth-oauthlib[tool]

 

Ahora generamos los credenciales para ejecutar los ejemplos, usaremos el fichero JSON que nos hemos descargado previamente:

google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype --scope https://www.googleapis.com/auth/gcm --save --headless --client-secrets /home/pi/client_secret_xxxx.apps.googleusercontent.com.json

 

Si todo es correcto, nos pondrá algo como:

"Please visit this URL to authorize this application: https://..."

Copiamos la URL y vamos a ella con un navegador (que esté logueado con nuestra cuenta de Google), tras permitirlo nos dará un código de autenticación que debemos pegar en la shell.

 

Y ahora, ya estamos listos para probar un ejemplo! En el mismo entorno virtual, ejecutamos el siguiente comando indicando nuestro ID de Proyecto y nuestro ID de modelo, que si no los habéis ido anotando, los encontraréis en la Consola de Actions de Google buscando en las opciones generales del proyecto y del dispositivo. Si esta todo OK ejecutamos el siguiente comando y quedará listo para que hablemos con el Assistant, es momento de probar:

googlesamples-assistant-hotword --project_id entrada-txarlatana --device_model_id entrada-txarlatana-entrada-xxxx

 

Por cierto, para cambiar el idioma de nuestro Asistente, lo haremos directamente con nuestro teléfono móvil, con la app del Assistant que supongo la tendréis instalada (y si no os la instaláis :P, la abrís, pulsamos arriba en la brújula, y en la siguiente pantalla en Explorar debemos ir a “Ajustes”,

 

En Ajustes debemos buscar en Dispositivos el dispositivo que hemos registrado antes, lo seleccionamos, y ahí ya le podremos dar acceso a más datos nuestros a los señores de Google o seleccionar el idioma que queremos para interactuar con el Assistant!

 

Así que listo! Tenemos el servicio montado bajo una Raspberry Pi, si volvemos a ejecutar el ejemplo anterior estará el Asistente en nuestro idioma, tendremos que constantemente pulsar Enter o decir ‘OK, Google’ independientemente de los ejemplos que tenemos para interactuar. Como en mi caso no me interesa que el micrófono esté siempre escuchando y así también evitar la necesidad de decir ‘OK Google’ todo el rato, pues mediante una solución cutrecilla he conseguido esquivarlo. He creado un scriptcillo para iniciar el Assistant y otro para detenerlo, os lo dejo por si de casualidad a alguien le es de utilidad 🙂

 

google_assistant_para.sh

cd /home/pi/
source env/bin/activate
nc -l 12345 | /home/pi/env/bin/python3 /home/pi/env/bin/googlesamples-assistant-pushtotalk --project-id txarlatana --device-model-id txarlatana-pitxarlatana-xxxx &

 

google_assistant_para.sh

pkill python3
pkill google
pkill nc

Héctor Herrero

Autor del blog Bujarra.com
Cualquier necesidad que tengas, no dudes en contactar conmigo, os intentare ayudar siempre que pueda, compartir es vivir 😉 . Disfrutar de los documentos!!!