Reconocimiento de voz con la API de Google Cloud ASR en Asterisk 15 sobre CentOS

asterisk-logo2
Imagen 1. Asterisk y Google ASR

Despues de bastante tiempo tras volver a configurar Google ASR en Asterisk, pero esta vez en CentOS, desde la ultima vez que lo hice en debian he conseguido dejar funcionando el reconocimiento de voz con Google, pero esta vez con la API de Google Cloud, así que en esta entrada voy a describir como conseguirlo:

Lo primero que debemos hacer en CentOS es instalar el siguiente grupo de paquetes:

# yum -y groupinstall 'Development Tools'

A continuación instalaremos los paquetes necesarios para el correcto funcionamiento de Asterisk 15:

# yum install wget ssh ncurses ncurses-devel uuid uuid-devel libuuid-devel jansson-devel libxml2-devel sqlite-devel

Nos movemos al directorio home y descargamos la version 15 de Asterisk:

# cd ~
# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-15-current.tar.gz

Nos movemos al directorio /usr/src, descomprimimos alli el tarball y nos movemos al directorio que nos ha generado:

# cd /usr/src
# tar zxvf ~/asterisk-15-current.tar.gz
# cd asterisk-15*

A continuación ejecutamos el script configure y despues el make para generar el menu de selección:

# ./configure
# make menuselect

A continuación ejecutamos los siguientes comandos. Si no tuviesemos algun paquete necesario se nos haria saber, así que si no termina correctamente la ejecución de estos comandos, prestad atención a la salida:

# make
# make install
# make config
# make install-logrotate

Si queremos generar ficheros de configuración de ejemplo podemos ejecutar:

# make samples

A continuación para el correcto funcionamiento de Asterisk procederemos a abrir el puerto 5060 tanto en TCP como UDP.

# firewall-cmd --set-default-zone=work
# firewall-cmd --zone=work --permanent --change-interface=$TU_DEVICEID
# firewall-cmd --zone=work --permanent --add-port=5060/udp
# firewall-cmd --zone=work --permanent --add-port=5060/tcp

Si durante la ejecución de Asterisk tuviesemos algun problema de ejecución podremos relacionarlo con SELinux, por lo cual yo recomiendo desactivarlo, podeis echarle un vistazo a la entrada anterior, en la que expliqué como desactivarlo. Lo siguiente que debemos hacer es reiniciar Asterisk y comprobar si ha arrancado correctamente:

# service asterisk restart
# service asterisk status

Accedemos a la consola de Asterisk:

# asterisk -cvvvvvv

En esta entrada omitiré la configuración de los diferentes ficheros, ya que en está entrada lo explique, así que si teneis alguna duda, echadle un vistazo.

Para realizar las pruebas utilizaré el softphone Zoiper el cual tiene version para Windows, Linux y Android, la configuración e instalación del mismo ya la expliqué en esta entrada.

Para tener correctamente configurado ASR en Asterisk, utilizaremos el Script de Zaf, actualizado para la API de Google Cloud, lo podemos descargar desde su GitHub o directamente haciendo clic aquí

A continuación debemos instalar las dependencias del Script. Ya que este está escrito en perl debemos descargar los siguientes paquetes:

# yum install flac flac-devel perl perl-JSON perl-libwww-perl.noarch perl-LWP-Protocol-https perl-Crypt-SSLeay

Debemos mover el fichero speech-recog.agi a la ruta donde se almacenan los binarios AGI de Asterisk, por defecto /var/lib/asterisk/agi-bin, si este directorio no exisitiese, deberia estar declarado su ubicacion en el fichero asterisk.conf dentro de /etc/asterisk.

Lo siguiente que debemos hacer es modificar el fichero extensions.conf y crear la extensión 666 dentro del contexto google-asr.

[google-asr]

exten => 666,1,Answer(); contestamos automáticamente la llamada.
 same => n,agi(speech-recog.agi,es,2,#); utilizamos el Script de Zaf, idioma español, 2 segundos de timeout , y # tecla de interrupción/finalización.
 same => n,Verbose(1,Lo que dijiste fue: ${utterance}); Verbose muestra un mensaje solo en la consola de Asterisk, es decir que nos enseña el contenido de la variable utterance.
 same => n,Verbose(1,La probabilidad de ser correcto es: ${confidence}); Más de lo mismo pero con la variable confidence.
 same => n,Verbose(1,La cantidad de caracteres que tiene utterance es: ${LEN(${utterance})}); Mostramos en la terminal la cantidad de caracteres que tiene utterance.
 same => n,Hangup(); Se termina la llamada.

Tened en cuenta que esta extensión debe ser añadida al contexto de nuestro usuario sip en el fichero sip.conf

[100]
--SALIDA OMITIDA
context=google-asr;

Si tenemos otro contexto, por ejemplo: extensionesinternas, en el fichero extensions.conf podemos incluir el contexto google-asr a ese contexto de la siguiente forma:

[extensionesinternas]
--SALIDA OMITIDA
include => google-asr;

A continuación debemos realizar los dos pasos más importantes:

  1. Generar nuestra key de API en Google Cloud
  2. Activar la facturación en Google Cloud
  3. Insertar la Key en el fichero speech-recog.agi

Para el primer paso debes realizar las siguientes acciones:

  1. Ir a la consola de Google Cloud: https://console.cloud.google.com/?hl=es
  2. Si no tenemos un proyecto creado debemos crear uno nuevo, a continuación simplemente iremos a la lupa que esta en la parte superior y escribiremos “Google Cloud Speech API“, seleccionamos la API que nos aparece y la habilitamos.
    Sin título2
    Imagen 2. Habilitar Google Cloud Speech API
  3. En ese momento nos saldrá una ventana avisandonos de que para utilizar la API debemos activar un perfil de facturación y asociarlo al proyecto:

    6.JPG
    Imagen 3. Habilitar facturacion
  4. Una vez seguido el proceso para activar la facturación y finalizado, en la parte izquierda donde habilitamos la API veremos una llave que pone ‘Credenciales’. Hacemos clic allí y luego ‘Crear credenciales’ –> ‘Clave de API’ –> Copiamos la Key/Clave generada y cerramos.
    8.jpg
    Imagen 4. Crear credenciales -> Clave de API

    9
    Imagen 5. Clave de API Creada.

Para comprobar que no tenemos problemas con el perfil de facturación asociado al proyecto donde esta la API, podemos ejecutar:

$ curl https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=$KEY -X POST -d '{}'

En la salida no deberiais ver ningun problema relacionado con la facturación.

Ahora debemos editar el fichero speech-recog.agi y añadir nuestra Key generada a la variable $key, lo haremos con nuestro editor preferido nano o vi:

my $key = “”; debería quedar my $key = “AIzaSyB**todo lo demás

Una vez tengamos todo correctamente configurado si desde nuestro softphone realizamos una llamada a la extension 666 deberiamos escuchar un BEEP y a continuación deberiamos decir algo, en la prueba que he realizado dijé: “Hola esto es una prueba”, y como veis en los logs, Google ASR lo ha reconocido perfectamente.

logs
Imagen 6. Resultados de la prueba.

2 comentarios sobre “Reconocimiento de voz con la API de Google Cloud ASR en Asterisk 15 sobre CentOS

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s