Icono del sitio Javier Campos .es

Raspberry con Google Assistant, Amazon Alexa y Snips

El objetivo de este proyecto en montar una Raspberry Pi y configurarla para funcionar simultáneamente como asistente Amazon Alexa y Google Home. Después, trataremos que no todas las órdenes viajen a la nube; sino que algunas puedan ser resueltas por el dispositivo de forma offline. Para esto último utilizaremos Snips. El esquema sería el siguiente:

Paso 1. Obtener los componentes y software

Hardware:

Software:

También necesitaremos acceso a internet y poder conectar por cable ethernet la raspberry a nuestra red local. Esta red local tendrá que asignar una dirección IP automáticamente a la raspberry (es decir, DHCP habilitado y no filtrado por MAC con white list). En la mayoría de routers domésticos valdrá la configuración por defecto y únicamente nos centraremos en encontrar un puerto RJ-45 libre en el router. En otros escenarios, no podremos usar SSH y tendremos que conectar a la raspberry una pantalla, teclado y ratón para la configuración inicial de red.

Paso 2. Montaje

Sigue estas instrucciones para el montaje del hardware: https://aiyprojects.withgoogle.com/voice-v1/

Estas instrucciones incluyen la descarga y grabado de la imagen de Raspbian en la tarjeta microSD. Recomiendo el uso de esa imagen por sencillez, ya que incluye los scripts y dependencias necesarias para hacer funcionar Google Assistant en tu raspberry Pi.

Paso 3. Conectar por SSH en la primera ejecución, cambiar la contraseña y habilitar VNC

Paso 4. Configurar Google Assistant en raspberry Pi

Para configurar tu raspberry Pi como un dispositivo Google Home, por favor sigue los pasos de AIY v1.

Paso 5. Configurar Amazon Alexa en raspberry Pi

Lo primero que tendrás que hacer es crear un Security Profile. Para ello, sigue estos pasos: https://github.com/alexa/avs-device-sdk/wiki/Create-Security-Profile

A continuación, descargar, configura scripts, autoriza y ejecuta los scripts. Sigue los pasos siguientes:

https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide-with-Script#setup

Como dice el equipo de Amazon Alexa en dicha url, esas son las instrucciones para la instalación fácil. Esos scripts se encargan de instalar todo. Si prefieres hacer la instalación paso a paso, utiliza esta otra guía: https://github.com/alexa/avs-device-sdk/wiki/Raspberry-Pi-Quick-Start-Guide

Paso 6. Probar ambos asistentes simultáneamente
En este punto, con los scripts de Alexa y Google Assistant corriendo en tu raspberry, podrías interactuar simultáneamente con ambos asistentes:

En las pruebas que he realizado, cada asistente consume aproximadamente el 25% de CPU de una raspberry Pi 3 B. Como punto de mejora más adelante, trataré que ambos compartan el detector de hotword.

Paso 7. Reflexiones

Después de un tiempo utilizando asistentes, espero que sientas que la UX a través de la voz es muy buena. Los asistentes también destacan por la velocidad para acceder a muchísima información online. Esta información a veces es pública y otras veces es info privada del usuario.

Cuando hacemos una pregunta a nuestro asistente, tanto Google como Amazon envían nuestra solicitud a su nube, donde se procesa. Si hemos hecho una pregunta que «saben» contestar directamente, los servidores de Google/Amazon contestarán con la respuesta (por ejemplo: «¿Qué día es hoy?»).

Si lo que hemos solicitado al asistente es que ejecute una acción determinada en un programa externo (custom skill), entonces nuestra pregunta viajará a los servidores de Google/Amazon pero desde allí se reenviará al servidor de terceros que ejecuta la custom skill. Por ejemplo, ocurre algo así cuando le pides a Alexa que te recomiende un libro utilizando la skill «recomendador de libros» que desarrollé hace unas semanas.

La pregunta que me surge es la siguiente. Tenemos claro que para muchas de las acciones que pedimos a nuestro asistente es necesario enviar la información a la nube, pero para otras acciones (ejemplo: preguntar la hora) se podría resolver de forma offline.

Si nuestro asistente pudiera contestar de forma offline, hay aspectos a tener en cuenta:

Por ello, en este artículo estoy proponiendo un sistema híbrido, donde algunas acciones serán respondidas por asistentes online (Alexa, Google) y otras acciones (más sencillas o con respuesta atemporal y/o con requisitos de privacidad especiales) serán resueltas por asistente offline tipo Snips.

Ejemplo de skill «recomendador de libros» que desarrollé sobre Amazon Alexa. Al estar en la nube, hay posibilidad de ampliar la base de datos de libros y de llegar a más usuarios.

Paso 8. Uso de Snips para operaciones offline

Lo que más me ha sorprendido de Snips es la facilidad para desplegar «skills» desde el ordenador, sin tener que entrar en la consola de raspberry. Los siguientes pasos instalan Snips en tu ordenador y despliegan un skill de ejemplo.

Trabajo futuro:
Queda pendiente optimizar el detector de hotwords, espero subir otro artículo en el futuro. Me gustaría también incluir la integración con Microsoft Cortana, he visto que es sencilla usando como sistema operativo de la raspberry Windows 10 iot, pero no he encontrado aún la forma fácil de integrarlo en Raspbian.

Salir de la versión móvil