domingo, 25 de noviembre de 2018

Google Assistant en Orange Pi Zero

Google Assistant en Orange Pi Zero (I)

En el artículo de hoy vamos a ver cómo utilizar nuestra Orange Pi Zero [casi] como un dispositivo Google Home por muy poco dinero.
Con la guerra abierta que hay a fecha de hoy con los llamados asistentes virtuales, las empresas competidoras como Amazon, Google, Apple y otras hacen lo posible por imponer su producto como un nuevo estándar en este campo.
En un intento de expandir al máximo su asistente (Google Assistant), Google ha puesto a disposición de la comunidad desarrolladora una serie de APIs y librerías que nos permiten poner en funcionamiento su asistente en cualquier plataforma que cumpla con estos requisitos básicos:
  • Un intérprete de Python.
  • Una conexión a internet.
  • Un altavoz.
  • Un micrófono.
Como experimento me planteo montar el asistente en una Orange Pi Zero, que gracias a su bajo precio y pequeño tamaño nos permitirá disponer de un dispositivo eficiente, pequeño y de bajo consumo.
Sin embargo, dados los requerimientos, este artículo se puede aplicar en principio a cualquier otra placa o dispositivo que cumpla con los requisitos especificados: un PC x86, una Raspberry, una Banana Pi, etc.
Básicamente, hay dos enfoques que podemos tomar para montar nuestro asistente, de menor a mayor funcionalidad. Es lo que veremos en los puntos 1 y 2.
Antes, veamos qué necesitamos comprar o tener de antemano:

Requisitos

Para este proyecto necesitaremos los siguientes requisitos:
  • Orange Pi Zero.
    Obviamente, necesitaremos una placa de desarrollo. Yo he elegido la Orange Pi Zero por su buena relación potencia/precio y porque ya he usado otras para otros proyectos y me gusta. Hay dos versiones de esta placa: la de 256MB de RAM y la de 512MB. Es muy importante comprar la de 512MB porque la otra es insuficiente. Aún así, para el apartado Opción 2 como veremos en el siguiente artículo, tendremos problemas al tener sólo 512MB de memoria.
    La placa nos podría valer tal cual, ya que dispone de una fila de terminales GPIO donde podríamos conectarle una salida y entrada de audio. No obstante yo recomiendo comprar, además de la placa, una tarjeta de expansión que lleva ya la salida de audio, un micrófono integrado, un receptor de infrarrojos y dos puertos USB adicionales entre otras cosas.
    Opi zero
    En China podemos encontrar la Orange Pi Zero principalmente en Banggood y en Aliexpress. A continuación pongo un par de enlaces con el paquete completo (placa principal de 512MB + tarjeta de expansión + caja), con los precios a 17/11/2018. Puntualmente se encuentran ofertas mejores, pudiendo salir el paquete completo por unos 14€:
    En teoría, se pueden encontrar también por Amazon, pero el precio sube considerablemente.
  • Disipadores.
    La Orange Pi Zero incorpora un procesador Allwinner H2+, y se calienta bastante (en condiciones normales se puede poner en 70ºC perfectamente). Es muy recomendable ponerle un disipador al menos al procesador (hay quien también se lo pone a la memoria).
    Disipadores

    Aconsejo comprar uno estos kits que traen 3 disipadores y son muy baratos. Hay que tener en cuenta que no es lo mismo tener la placa al aire que metida dentro de una caja tan pequeña. Los disipadores llevan un adhesivo de doble cara y simplemente se pegan sobre el procesador o la memoria, según su tamaño.
    • Banggood (1,09€).
    • Banggood (0,87€). Estos son para Raspberry, pero nos valen perfectamente.
    • Aliexpress (1,54€). Es una sola unidad, en cerámica (supuestamente mayor disipación).
  • Micrófono USB.
    Es verdad que, como he dicho antes, la placa de expansión lleva un micrófono integrado, pero al parecer es de muy poca calidad. Yo recomiendo comprar un pequeño micrófono USB que, si bien no es una maravilla, tiene bastante sensibilidad y funciona perfectamente. Además es muy barato:
  • Alimentación.
    Finalmente, nos hará falta alimentar la placa. La toma de alimentación es microUSB, de manera que podremos hacerlo con cualquier alimentador de móvil o tablet más o menos potente. Lo recomendable es un alimentador de 2A o superior. De todos modos, yo tengo una Orange alimentada en un puerto USB de un router desde hace 2 años sin problemas…

Preparación del altavoz

Instalación del Sistema Operativo.

Lo primero que haremos es instalar un sistema operativo para la Orange Pi. Recomiendo encarecidamente que instaléis armbian. Se trata de una distribución Linux basada en debian para dispositivos ARM de todo tipo, con procesadores Allwinner, Rockchip, FreeScale, etc.
Armbian Logo
Descarga de armbian
La página de descarga, donde podéis buscar una distribución para vuestro dispositivo específico, es la siguiente:
Grabación en SD
Una vez descargada la imagen, la grabamos en una tarjeta microSD por medio del programa Etcher (si trabajamos desde WIndows). En caso de trabajar desde Linux podemos hacer lo mismo con las herramientas del sistema o por medio del comando dd.
Instalación del sistema
Con nuestra microSD grabada, la introducimos en la Orange y arrancamos. Ya que la Orange Pi Zero no tiene salida de vídeo HDMI, no podremos conectarle un teclado y empezar a teclear comandos. Yo lo que hago en estos casos es lo siguiente:
  • Le conecto un cable de red a la toma ethernet RJ45 para conectarla a la red.
  • En el móvil, utilizo la app Fing para comprobar qué dirección IP le ha asignado el router.
  • Una vez que tengo la IP, desde cualquier ordenador accedo mediante protocolo ssh con algún programa como putty o Xshell (gratuíto para usuarios domésticos y escolares).
  • El usuario a utilizar es root, y la contraseña 1234.
La primera vez que arranca, armbian nos pedirá que cambiemos la contraseña de root y nos pedirá los datos de un usuario normal (no root) que creará con privilegios de sudo.
Configuración básica
Una vez iniciado por primera vez el sistema, recomiendo configurar lo siguiente:
  • Conexión WIFI
    Podemos tener un altavoz inteligente conectado a una toma de red, pero la mayoría de la gente normalmente querrá tenerlo conectado de forma inalámbrica a la WIFI. Por tanto, lo más fácil será ejecutar el comando:
    nmtui
    
    Elegiremos la opción “Activate a connection”
    nmtui_activate
    y después elegiremos la red a la que nos queremos conectar. Una vez seleccionada, nos pedirá la contraseña .
    nmtui_wifi
  • Personalización.
    Finalmente, ejecutamos:
    sudo armbian-config
    
    armbian-config
    entramos en la opción “Personal” y configuramos cosas básicas como:
    • La zona horaria. Normalmente elegiríamos Europe/Madrid.
    • Los locales. Normalmente añadiríamos aquí es_ES.utf8, fijándolo por defecto para que nos salgan los mensajes y otras cosas en español.
    • La disposición del teclado. Elegimos uno con caracteres españoles.
    • El hostname. Por defecto es orangepizero, podríamos cambiarlo por el que queramos.
    Y ya está todo configurado.

Creación del proyecto de Google.

Una vez que tenemos la placa ya configurada, vamos a entrar en materia. Este tutorial está parcialmente basado en las guías que Google publica en su página para desarrolladores:
Lo primero que necesitaremos es crear un proyecto en la nube de Google Actions. Para ello, en nuestro navegador vamos a la siguiente dirección:
En esta página pulsamos “Add/import project“ y rellenamos el nombre del proyecto, el idioma (Spanish) y el país (Spain).
Google Actions
Una vez creado el proyecto, nos vamos a la parte inferior de la página y pulsamos el botón “Device Registration“.
Device Registration
Dejamos la página actual tal cual sin cerrar porque después tendremos que volver a ella.

Credenciales de acceso

Ahora abrimos otra pestaña en el navegador y nos vamos a la consola para desarrolladores de Google:
En esta página, antes que nada, nos aseguraremos de que tenemos seleccionado el proyecto que hemos creado en Google Actions. Una vez seleccionado el proyecto, nos vamos a la opción Biblioteca (en la parte izquierda) y localizamos “Google Assistant API”. Nos aparecerá una página tal como esta:
GA API
En dicha página pulsaremos el botón Habilitar.
Una vez habilitada, hay que crear unas credenciales de acceso. Para ello, en la parte izquierda pulsamos en Credenciales y después en la pestaña “Pantalla de consentimiento de OAuth“.
En esta pantalla básicamente rellenaremos el nombre de la aplicación o proyecto y el email de contacto. Una vez rellenos estos datos guardamos la credencial pulsando el botón Guardar que está al final de la página.

Acceso a tu actividad

Para poder utilizar el asistente, es necesario que activemos la compartición de la actividad asociada a nuestra cuenta de Google. Para ello, nos vamos a la siguiente dirección:
e iniciamos sesión con nuestra cuenta de Google. En esta página nos aseguraremos de tener marcadas las siguientes opciones:
  • Actividad en la Web y en Aplicaciones.
  • Incluye el historial de Chrome y la actividad que se realiza en sitios web, aplicaciones y dispositivos que utilizan los servicios de Google.
  • Información del dispositivo.
  • Actividad de Voz y Audio.

Registro del dispositivo

Volvemos a la pestaña que dejamos abierta antes (la de Google Actions) y vamos a asociar un dispositivo al proyecto. Para ello pulsamos el botón Register Model.
Registrar dispositivo
En esta ventana, rellenaremos un nombre para el dispositivo, el fabricante (cualquiera vale) y el tipo de dispositivo. En mi caso, siempre elijo Speaker puesto que se trata de un altavoz.
Pulsamos de nuevo el botón Register Model y avanzamos a la siguiente ventana, donde deberemos pulsar el botón Download OAuth 2.0 credentials. Al pulsar dicho botón descargaremos un fichero en formato json con las credenciales del dispositivo que acabamos de registrar. Lo guardaremos a buen recaudo porque más tarde lo necesitaremos.
Finalmente, avanzamos y en la siguiente ventana pulsamos el botón Save Traits.
Con esto queda toda la preparación terminada.
En el siguiente artículo veremos cómo poner en marcha el asistente, con dos opciones en función de nuestras necesidades.