escuela politécnica superior de linarestauja.ujaen.es/bitstream/10953.1/3742/1/tfg_valcarcel... ·...

166
Escuela Politécnica Superior de Linares Universidad de Jaén Escuela Politécnica Superior de Linares Trabajo Fin de Grado Alumno: Ildefonso Valcárcel Momblant Tutor: Prof. D. Ildefonso Ruano Ruano Depto.: Ingeniería de Telecomunicación Septiembre, 2016 DISEÑO DE UN ENTORNO VOIP PARA CONSULTA VOCAL POR VÍA TELEFÓNICA

Upload: others

Post on 13-Aug-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

Esc

uela

Pol

itécn

ica

Sup

erio

r de

Lina

res

Universidad de Jaén

Escuela Politécnica Superior de Linares

Trabajo Fin de Grado

Alumno: Ildefonso Valcárcel Momblant

Tutor: Prof. D. Ildefonso Ruano Ruano Depto.: Ingeniería de Telecomunicación

Septiembre, 2016

DISEÑO DE UN ENTORNO

VOIP PARA CONSULTA VOCAL POR VÍA TELEFÓNICA

Page 2: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

UNIVERSIDAD DE JAÉN

ESCUELA POLITÉCNICA SUPERIOR DE LINARES

Departamento de Ingeniería de Telecomunicación

CURSO ACADÉMICO 2015-2016

TRABAJO FIN DE GRADO

TÍTULO DEL TRABAJO

DISEÑO DE UN ENTORNO VOIP PARA CONSULTA VOCAL POR VÍA TELEFÓNICA

Grado en Ingeniería Telemática

AUTOR: Ildefonso Valcárcel Momblant

TUTOR: D. Ildefonso Ruano Ruano

Page 3: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

Agradecimientos

A mi mujer Cortecita, por animarme y motivarme para acometer este proyecto personal

para adaptar mis estudios a los planes de grado actuales.

A mi amigo del alma por su gran ayuda en los momentos difíciles y por su apoyo

incondicional.

A mi familia, por su amor y su esfuerzo.

Page 4: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

1

Índice

1. RESUMEN ..................................................................................................................... 4

2. INTRODUCCIÓN ........................................................................................................... 7

2.1.1 Voz Sobre IP ........................................................................................................ 9

2.1.2 Codificadores de audio........................................................................................10

2.1.3 Protocolos de Señalización .................................................................................12

2.2 Asterisk ..................................................................................................................12

2.2.1 Arquitectura .........................................................................................................13

2.3. Reconocimiento vocal ...........................................................................................21

2.3.1. Características acústicas ...................................................................................21

2.3.1.1. Fono y fonema ................................................................................................22

2.3.1.2. Clasificación de los fonemas ...........................................................................22

2.3.2. Elementos de un reconocedor de voz ................................................................23

2.3.2.1. Preprocesamiento ...........................................................................................23

2.3.2.2. Reconocimiento ..............................................................................................25

2.3.3. Enfoques del reconocimiento de voz ..................................................................25

2.3.3.1. Enfoque Acústico-Fonético..............................................................................25

2.3.3.2. Enfoque de Patrones.......................................................................................27

2.3.4. Aplicaciones del reconocimiento de voz .............................................................28

2.3.5 Reconocimiento Automático de Voz (RAV) .........................................................29

2.3.5.1. Arquitectura .....................................................................................................30

2.3.6. Resumen............................................................................................................30

2.4. Síntesis de voz ......................................................................................................32

2.4.1 Síntesis concatenativa ........................................................................................34

2.4.2 Síntesis por formantes ........................................................................................35

3. OBJETIVOS ................................................................................................................. 37

Page 5: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

2

4. MATERIALES Y MÉTODOS ........................................................................................ 38

4.1 Instalación de la centralita Asterisk ........................................................................43

4.2 Instalación y configuración del motor de base de datos .........................................52

4.2.1 Configuración del conector odbc en asterisk ...................................................53

4.2.2 Diseño de la base de datos .............................................................................58

4.3 Estudio de alternativas de reconocimiento vocal con asterisk ................................62

4.3.1 Proceso de reconocimiento mediante servidor externo ...................................63

4.3.2 Proceso de reconocimiento mediante servidor interno ....................................66

4.4 Alternativas para síntesis de voz en Asterisk .........................................................67

4.5 Implementación del reconocimiento vocal en asterisk ............................................68

4.6 Síntesis de voz en Asterisk ....................................................................................80

4.7 Registro de terminales SIP en asterisk ...................................................................84

4.8 Proceso de conexión a un proveedor SIP ..............................................................87

4.9 Creación de ficheros de audio personalizados .......................................................91

4.10 Configuración del dialplan de la centralita asterisk ...............................................94

5. RESULTADOS Y DISCUSIÓN................................................................................... 100

6. CONCLUSIONES ...................................................................................................... 110

7. ACRÓNIMOS ............................................................................................................. 112

8. REFERENCIAS BIBLIOGRÁFICAS ........................................................................... 113

ANEXO 1: ASTERISK .................................................................................................... 115

Registro de terminales ............................................................................................... 118

Dialplan ...................................................................................................................... 119

Contextos................................................................................................................... 120

Extensiones ............................................................................................................... 120

Prioridades ................................................................................................................. 122

Aplicaciones ............................................................................................................... 123

Variables .................................................................................................................... 123

Variables globales ...................................................................................................... 123

Variables de canal ..................................................................................................... 124

Page 6: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

3

Variables de entorno .................................................................................................. 124

Búsqueda por expresiones ........................................................................................ 124

Integración de base de datos con asterisk ................................................................. 125

Asterisk Gateway Interface ........................................................................................ 128

ANEXO 2: DESCRIPCIÓN DE PROTOCOLOS SIP Y RTP ........................................... 130

El protocolo SIP ......................................................................................................... 130

El protocolo RTP ........................................................................................................ 135

ANEXO 3: MOTOR DE RECONOCIMIENTO Y TTS VERBIO ....................................... 137

Reconocimiento del habla .......................................................................................... 137

Gramáticas ABNF ...................................................................................................... 139

Verbio para asterisk ................................................................................................... 143

ANEXO 4: MANUAL DE INCORPORACIÓN DE EXTENSIONES SIP ........................... 160

ANEXO 5: MANUAL DE CREACIÓN DE CONSULTAS EN BASE DE DATOS ............. 162

Page 7: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

4

1. RESUMEN El presente Trabajo Fin de grado (TFG), se centra en el diseño de una solución

VoIP que realice reconocimiento vocal y sirva como plataforma para ofrecer un servicio

de consulta de calificaciones por vía vocal.

Actualmente los sistemas VoIP, especialmente los basados en tecnología Open

Source, se encuentran en auge ya que aportan una serie de beneficios que resultan muy

interesantes. Dentro estas características podemos citar las siguientes:

- Posibilitan una configuración flexible y adaptable en soluciones de voz.

- Permiten tener menos costes ya que se basan en tecnología de código

abierto, la cual no incurre en costes de licenciamiento. Posibilitan el uso de

proveedores IP cuyas tarifas son mucho más económicas que las de los

proveedores telefónicos habituales, especialmente en llamadas

internacionales.

- Permiten soluciones de voz que incluyen servicios de valor añadido, por

ejemplo acceso a base de datos, reconocimiento vocal, síntesis de voz,

servicios de IVR, Grupos ACD, etc.

- Permiten una fácil interconexión entre sistemas de diferentes localizaciones,

que en la telefonía convencional requerían de una fuerte inversión de

equipamiento para conseguir unas funcionalidades muy limitadas

- Se basan en protocolos VoIP que están estandarizados. Especialmente el

protocolo SIP, que es el más utilizado. Este protocolo lo implementan la gran

mayoría de centralitas y teléfonos IP.

- Permiten utilizar código en otros lenguajes de programación como perl,

Pyton, java, C, etc, para realizar tareas en este lenguaje y ofrecer los

resultados a la centralita IP.

La solución VoIP para ofrecer el servicio de consulta de calificaciones ha sido la siguiente:

- Se ha montado en un equipo del laboratorio de telemática el sistema

operativo Ubuntu 14.04. En dicho equipo se han realizado todas las

instalaciones y configuraciones necesarias para ofrecer el servicio de

consulta de calificaciones.

- Se ha instalado el software asterisk, como herramienta para el

procesamiento del tráfico VoIP a través de los protocolos SIP y RTP.

- Se ha configurado asterisk para que se pueda conectar un teléfono IP para

realizar pruebas desde la red interna donde reside el PC. También se ha

Page 8: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

5

creado y configurado una cuenta sip de un proveedor IP para poder realizar

pruebas desde cualquier teléfono de la RTC.

- Se ha creado una base de datos Mysql con la información de alumnos de la

universidad de Jaén y de las notas de las asignaturas en las que están

matriculados.

- Se ha configurado asterisk para tener acceso a la información almacenada

en la base de datos.

- Se han estudiado diferentes alternativas para implementar el reconocimiento

vocal a través de asterisk, eligiendo dos alternativas diferentes para realizar

el reconocimiento. Por una parte se ha realizado el reconocimiento vocal a

través de un script AGI que solicita a un servidor externo realizar el

reconocimiento vocal. En este caso se ha usado la API de reconocimiento

vocal de Google. Por otra parte se ha realizado el reconocimiento vocal a

través de un servidor de reconocimiento interno basado en el fabricante

Verbio. En este caso la solicitud de reconocimiento vocal se envía a un

servidor interno que realiza la transcripción a texto del valor reconocido

haciendo uso de gramáticas ABNF (Augmented Backus-Naur Form).

- También se ha realizado la implementación de síntesis de voz para que sea

posible confirmar el valor reconocido del nombre de las asignaturas y del

DNI de los llamantes. La síntesis de voz también se ha realizado con dos

diferentes alternativas. Por una parte a través de un script AGI que hace uso

del servicio de google translate y por otra parte a través del motor de Text to

Speech del fabricante Verbio.

- También se ha implementado el reconocimiento a través de tonos DTMF

para realizar confirmaciones sobre el reconocimiento y para poder introducir

el DNI en caso que el reconocimiento vocal no se efectúe de forma correcta.

- Se ha realizado el desarrollo necesario del dialplan de asterisk para ofrecer

el servicio de consulta de calificaciones y poder consultar los datos

obtenidos por lo los sistemas de reconocimiento vocal y Text to speech

indicados anteriormente y de los valores almacenados en la base de datos.

- Se han creado todas las locuciones necesarias para realizar el proceso de

consulta de calificaciones a través de la herramienta Loquendo TTS director.

El resultado de la implementación es un servicio telefónico guiado en el que se

solicita la información del DNI para realizar la validación de usuario, el nombre de la

asignatura y la convocatoria de la que se desea consultar la calificación. Una vez

reconocidos estos datos se realiza la consulta a la base de datos que devuelve el

Page 9: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

6

resultado que es ofrecido al llamante por vía telefónica. Los nombres de asignatura

configurados se corresponden con las asignaturas troncales y obligatorias de la titulación

Ingeniería Telemática.

Un esquema que muestra los componentes usados para la implementación del

servicio de consulta de calificaciones y los protocolos y puertos que intervienen es el

siguiente. En este esquema se muestran los componentes usados para los dos tipos de

reconocimiento vocal y síntesis de voz utilizados, como diferentes alternativas de

reconocimiento. Por una parte a través de un reconocimiento vocal y síntesis de voz a

través de un servicio externo ofrecido por Google. Por otra parte a través de un sistema

de reconocimiento vocal y síntesis de voz montado localmente en el propio servidor

donde reside tanto el servidor asterisk como la base de datos Mysql. El software usado

para implementar el reconocimiento vocal y síntesis de voz de forma local ha sido a

través del servidor VoxServer del proveedor Verbio

Figura 1: Esquema general de la implementación del servicio vocal de consulta de calificaciones

Posteriormente en el punto 4, se detallará el flujo de comunicación para cada una de las alternativas de reconocimiento.

Page 10: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

7

2. INTRODUCCIÓN De manera cada vez más frecuente, se producen avances tecnológicos que

obligan a las empresas a ofrecer sus servicios por diferentes canales (Web, Telefónico,

chat, redes sociales, aplicaciones de smartphones…) demandados por los clientes.

Las empresas requieren hoy en día de soluciones flexibles y económicas con las

que puedan ir ofreciendo la excelencia en el servicio a sus clientes.

Actualmente, diversas tecnologías (ordenadores, software, teléfonos móviles,

Internet…) son usadas de forma combinada para ofrecer soluciones globales en los

entornos empresariales

En el ámbito de las soluciones de voz en los últimos años se ha producido una

revolución tecnológica desde la llegada del software asterisk de libre distribución. Este

software ha posibilitado la creación de una centralita telefónica adaptable y configurable,

la cual puede combinarse con otros servicios, como acceso a base de datos, para ofrecer

un servicio de voz inteligente.

Es por este motivo, por el que hemos decidido realizar la implementación del

sistema VoIP de consulta de calificaciones mediante el uso del sistema asterisk.

Las centralitas Asterisk tienen la capacidad de implementar diversos protocolos

VoIP de señalización para realizar la comunicación, entre los cuales están IAX2, SIP y

H323 entre otros. El uso más habitual del software Asterisk es a través del protocolo SIP.

La centralita Asterisk contiene diferentes elementos que permiten combinarla

con otras soluciones de otros fabricantes especializadas en un área determinada. En el

ámbito del reconocimiento vocal existen diversas alternativas que pueden integrarse con

asterisk para ofrecer un servicio de reconocimiento vocal. Por una parte herramientas de

uso libre con ciertas restricciones como puede ser la Google speech API y por otra parte

herramientas proporcionadas por fabricantes especializados en reconocimiento vocal

(Verbio, Lumenvox, Nuance, Omilia…) cuyas soluciones de reconocimiento vocal están

homologadas para su uso con la centralita asterisk.

Después de estudiar las diferentes alternativas para implementar reconocimiento

vocal en la centralita asterisk, hemos decidido realizar el reconocimiento usando dos

diferentes alternativas. Por una parte a través del uso de la API de reconocimiento vocal

de Google y por otra parte a través del uso de la solución de reconocimiento del

proveedor Verbio.

Page 11: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

8

El proceso de síntesis de voz, también conocido como Text To Speech (TTS) se

basa en la conversión de un texto escrito a su respectivo audio, este caso la síntesis de

voz la hemos utilizado para la confirmación del valor reconocido mediante el

reconocimiento vocal.

Tras estudiar diferentes alternativas para implementar la síntesis de voz en la

centralita asterisk, también hemos optado por utilizar dos diferentes alternativas. Por una

parte usar el servicio de google translate para obtener un fichero con el audio de un

determinado texto. Por otra parte usar el motor de síntesis del proveedor verbio. Estas

dos alternativas son independientes y ambas sirven para realizar la síntesis de voz.

En la actualidad se genera muchísima información en cada instante, esta

información generalmente requiere ser almacenada en bases de datos para su posterior

consulta o análisis. La información almacenada en base de datos puede ser explotada

por otros sistemas para ofrecer un determinado servicio.

La evolución de la VoIP y, en especial la aparición de la centralita asterisk, han

posibilitado ofrecer servicios telefónicos de valor añadido. Por ejemplo es posible ofrecer

un servicio telefónico capaz de realizar reconocimiento vocal, que tenga acceso a bases

de datos para consultar la información solicitada por vía vocal y que la información

consultada pueda indicarse por medio de síntesis de voz o Text To Speech.

Los objetivos del presente proyecto son integrar la centralita asterisk con

servicios externos de acceso a base de datos, reconocimiento vocal y text to Speech de

valor añadido para ofrecer un servicio de consulta por vía vocal de las calificaciones

obtenidas por los alumnos.

El sistema solicitara al llamante que indique por vía vocal su número de DNI, una

vez reconocido, se solicitará indicar el nombre de la asignatura a consultar, una vez

reconocida, se solicitará indicar la convocatoria. Una vez reconocidos todos los datos, se

indicará la puntuación numérica obtenida y la calificación de la asignatura (aprobado,

suspenso, notable, sobresaliente o matrícula de honor) obtenida por el correspondiente

alumno en la asignatura y convocatoria indicadas.

Los datos de los alumnos y las notas de las respectivas asignaturas, se

introducirán en una base de datos para que la centralita asterisk realice el reconocimiento

vocal e indique el resultado una vez realizada la consulta a la base de datos y el

procesamiento necesario.

Page 12: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

9

2.1. Voz Sobre IP

2.1.1 Introducción

Para la transmisión de voz sobre una red IP, el estándar define cuatro elementos

fundamentales en su estructura:

- Terminales: son los puntos finales de la comunicación y pueden ser

implementados como:

o Hardware: un teléfono IP es un terminal que tiene soporte VoIP nativo

y puede conectarse directamente a una red IP

o Software: un softphone es una aplicación ejecutable desde un PC que

se comunica con la PBX a través de la LAN. Para interactuar con el

usuario se basa en la utilización de un micrófono y altavoz.

- Servidor: Provee el manejo y funciones administrativas para soportar el

enrutamiento de llamadas a través de la red. Este servidor puede adoptar

diferentes nombres dependiendo del protocolo de señalización utilizado. Así

en un sistema basado en el protocolo H.323, el servidor es conocido como

Gatekeeper, en un sistema SIP, servidor SIP; y en un sistema basado en

MGCP o MEGACO, call Agent.

- Gateways: proporciona el enlace de la red VoIP con la red telefónica

analógica o ISDN. Se encarga de adaptar las señales de estas redes a VoIP

y viceversa, actuando de forma transparente para el usuario. El Gateway

posee además de puertos LAN, interfaces de conexión a estas redes: FXO,

FXS, BRI, PRI, SS7, etc.

- Red IP: provee conectividad entre todos los terminales. La red IP puede ser

una red IP privada, una intranet o Internet.

Los distintos elementos pueden residir en plataformas físicas separadas o bien

pueden convivir varios elementos en la misma plataforma. De este modo es bastante

frecuente encontrar juntos el servidor y el Gateway.

Page 13: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

10

Figura 2: Estructura de una red VoIP

Fuente: Rosario Villareal M.A, Herrera Vega F.

2.1.2 Codificadores de audio La señal de audio ha de ser digitalizada, comprimida y codificada antes de ser

transmitida por la red IP. Para ello se utilizan algoritmos matemáticos implementados en

software llamados códecs (acrónimo de codificador-descodificador aunque también se le

atribuye las funciones de compresor-descompresor). Existen diferentes modelos de

códecs de audio utilizados en VoIP, y dependiendo del algoritmo escogido en la

transmisión, variará la calidad de la voz, el ancho de banda necesario y la carga

computacional. El objetivo principal de esta tecnología es encontrar un equilibrio entre

eficiencia y calidad de voz. Aunque el sistema auditivo humano es capaz de captar las

frecuencias comprendidas entre 20Hz y 20kHz, la gran mayoría de códecs procesan

aquella información dentro de la banda banda de 400Hz – 3,5kHz ya que a la hora de

reconstruir la señal, esta sigue siendo inteligible.

A continuación se enumeran y describen los códecs mas utilizados en VoIP:

- G.711: principal códec de la PSTN estandarizado por la ITU (International

Telecomunication Union) en 1972. Este estándar muestrea a una frecuencia

de 8kHZ y utiliza PCM (Pulse Code Modulation) para comprimir,

descomprimir, codificar y decodificar. Existen dos modelos:

o U-law: codifica cada 14 muestras en palabras de 8 bits. Usado en

EEUU y Japón.

o A-Law: Codifica cada 13 muestras en palabras de 8 bits. Usado en el

resto del mundo, incluido Europa.

Page 14: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

11

Al entregar ambas palabras de 8 bits se requiere un ancho de banda de

64kbps. G.711 es un algoritmo más simple y de menor carga computacional

y es la base del resto de estándares.

- G.726: este estándar de la ITU, también conocido como ADPCM (Adaptative

Differential Pulse Code Modulation), sustituyó al obsoleto estándar G.721 en

1990. Permite trabajar a velocidades de 16kbps, 24kbps y 32kbps. La gran

ventaja de este códec es la disminución de ancho de banda requerido sin

aumentar en gran medida la carga computacional.

- G.723.1: este algoritmo, estandarizado en 1995 por la ITU, puede operar a

6,3kbps o 5,3kbps. Si es utilizado en una aplicación comercial es necesario

pagar una licencia.

- G.729A: códec desarrollado por France Telecom, Mitsubishi Electric

Corporation, Nippon Telegraph and Telephone Corporation (NTT) y la

universidad de Sherbrooke. Requiere 8kbps de ancho de banda. La carga

computacional de este algoritmo es elevada y también es necesaria una

licencia para su uso comercial. Actualmente la propiedad intelectual es de la

empresa SIPRO.

- GSM (Global System Mobile): estándar que opera a 13kbps con una carga

de CPU aceptable. No requiere el pago de una licencia.

- iLBC (Internet Low Bit Rate Códec): complejo algoritmo libre desarrollado

por Global IP Sound (GIPS) que ofrece una buena relación ancho de banda-

calidad de voz, a cambio de una mayor carga computacional. Es definido en

los RFCs 3951 y 3952 de la IETF (Internet Engineering Task Force). Su uso

no ha sido extendido en los teléfonos IP. iLBC opera a 13.3kbps y 15.2kbps.

- Speex: software libre creado por Xiph.Org Foundation que implementa un

algoritmo capaz de variar la velocidad de transmisión dependiendo de las

condificiones actuales de la red (VBR: Variable Bit Rate). El ancho de banda

puede variar desde 2.15 a 22.4kbps.

- MP3 (Moving Picture Experts Group Audio Layer 3 encoding Estándar): es

un códec de audio optimizado para la música. Este popular códec de la ISO

(International Standart Asociation) es utilizado por los teléfonos IP

principalmente para ofrecer servicios de música en espera.

Page 15: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

12

Tabla 1. Resumen comparativo de códecs más habituales en VoIP

2.1.3 Protocolos de Señalización La señalización en VoIP tiene un papel muy importante en la red, ya que es la

encargada de establecer, mantener, administrar y finalizar una conversación entre los

extremos de la conversación. Además de ofrecer funciones de supervisión, marcado,

llamada y retorno de tonos de progreso, también se encarga de promover QoS en cada

canal de transmisión.

2.2 Asterisk Asterisk es una aplicación de software libre que se distribuye bajo licencia GPL

(General Public License) y que implementa una central telefónica (PBX). Una versión

estable de Asterisk está compuesta por los siguientes módulos:

• Asterisk: Ficheros base del proyecto.

• Dahdi: Soporte para hardware. Drivers de tarjetas. Este paquete antes

era conocido como Zaptel.

• Libpri: Soporte para conexiones digitales, es opcional.

• Sounds: Aporta sonidos y frases en diferentes idiomas.

• Addons: Complementos y añadidos del paquete Asterisk, es opcional.

Cada módulo cuenta con una versión estable y una versión de desarrollo. La

forma de identificar las versiones se realiza mediante la utilización de tres números

separados por un punto. Teniendo desde el inicio como primer número el uno, el segundo

número indica la versión, mientras que el tercero muestra la revisión. En las revisiones se

llevan a cabo correcciones, pero no se incluyen nuevas funcionalidades.

En las versiones de desarrollo el tercer valor siempre es un cero, seguido de la

palabra “beta” y un número, para indicar la revisión.

Page 16: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

13

La última versión estable disponible para su libre descarga en el momento actual

es la 13.10.0

2.2.1 Arquitectura Asterisk está formado por un núcleo principal encargado de gestionar todo el

sistema PBX cuyas funciones principales son:

- Interconectar automáticamente cada llamada entre los llamantes teniendo

en cuenta el tipo de protocolo de señalización utilizado por cada terminal.

- Ejecutar los servicios de valor añadido cuando sean requeridos.

- Realizar conversión entre codecs cuando sea necesario

- Gestionar el sistema para que pueda funcionar de la forma más óptima en

todas las condiciones de carga.

Para realizar estas funciones, este núcleo se apoya en un conjunto de módulos

que le proporcionan una gran flexibilidad y una total abstracción de los protocolos, códecs

e interfaces utilizados en cada conexión. Destacan 4 APIs (Application Programming

Interface) utilizadas por el núcleo de Asterisk.

- Channel API: Encargada de gestionar y extraer la información dinámica de

cada conexión (protocolos de señalización, interfaces, códecs).

- Application API: Incorpora diferentes módulos encargados de ofrecer

servicios de valor añadido. Esta estructura modular facilita la inserción de

nuevos servicios añadiendo su respectivo módulo.

- Codec Translator API: Permite cargar los diferentes formatos de códecs de

audio utilizados para la compresión y codificación de la señal. Al igual que

las aplicaciones, estos códecs son módulos independientes, teniendo cada

códec su respectivo módulo.

- File Format API: Permite leer y escribir ficheros para almacenar información

en el sistema de archivos, como por ejemplo, la grabación de una

conversación.

Page 17: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

14

Figura 3. Núcleo principal de asterisk

Fuente: Asterisk Architecture. Digium

Otra de las características que hace de asterisk una solución bastante robusta,

es el soporte de varios protocolos VoIP (SIP, H323, IAX2, MGCP/MEGACO, SCCP y

UNISTIM) y códecs de audio (G711 ley A, G711 ley ŋ, G729a, G726, G723.1, Gsm, iLBC,

Speex, ADPCM, Linear, MP3).

Para entender más a fondo el esquema mostrado en la figura anterior indicamos

a continuación un ejemplo. Se parte de la idea que previamente se han configurado dos

terminales IP, uno utiliza el protocolo SIP y codifica la señal en G.711 ley A mientras que

el otro terminal utiliza el protocolo H.323 y codifica la señal en G.729a. Si el terminal SIP

quiere comunicarse con el terminal H323, cuando la centralita reciba la señal de llamada,

antes de interconectar los dos canales, consultará qué interfaz, protocolo de señalización

y códec utiliza el emisor y cuales necesita el receptor. De esta forma el núcleo una vez

que interconecte internamente ambas interfaces, mediante la Channel API y la Códec

Translator API, será capaz de adaptar la información en tiempo real para que pueda ser

interpretada por cada terminal IP. Puede darse el caso que el terminal receptor no esté

disponible y esté configurado en la centralita que en ese caso se deje un mensaje de voz.

En este caso actuaría la Application API para habilitar la recepción del mensaje de voz.

Page 18: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

15

Para poder almacenarlo en un formato de audio, como .wav o mp3, asterisk utilizará la

File format API.

El comportamiento del núcleo variará dependiendo de las necesidades de cliente.

Para cambiar la configuración, Asterisk tiene un conjunto de archivos de configuración.

Cada uno de ellos ofrece una funcionalidad determinada y permite configurar un conjunto

de parámetros. Cada uno de estos parámetros tiene un rango de valores definido. Estos

parámetros le indican al núcleo aspectos como el número y tipo de dispositivos

conectados en la centralita, los códecs que utiliza cada dispositivo conectado, los

servicios de valor añadido que se quieren disponer, el dialplan que debe seguir una

llamada determinada, etc. También incluye una base de datos Berckeley para su posible

uso por el dialplan.

Detallamos a continuación otro ejemplo de llamada realizada a través de asterisk

mediante el uso del protocolo SIP donde se detallan todos los principales procesos que

se ejecutan. El ejemplo es similar al indicado anteriormente y cuenta con la ventaja de

tener un formato visual más atractivo para el entendimiento del proceso.

Figura 4

Fuente: Asterisk advanced course. Digium

Paso 1: El usuario bob, registrado en la centralita asterisk a través de una cuenta

sip configurada en un teléfono IP realiza una llamada a la extensión 202.

Page 19: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

16

Figura 5

Fuente: Asterisk advanced course. Digium

Paso 2: La llamada originada desde el teléfono IP donde Bob tiene su cuenta sip

registrada en la centralita asterisk envía un paquete SIP INVITE el cual contiene la

extensión destino con la que quiere comunicarse y un mensaje SDP con la descripción de

sesión en la que se indican los códecs que el terminal de bob utiliza.

Figura 6

Fuente: Asterisk advanced course. Digium

Paso 3: La centralita asterisk, una vez que ha recibido el paquete SIP INVITE del

usuario bob, indica a bob los códecs ella misma que puede utilizar y el puerto RTP que

usará, ambos usarán el primer códec disponible que ambos puedan interpretar para

establecer la comunicación.

Page 20: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

17

Figura 7

Fuente: Asterisk advanced course. Digium

Paso 4: Desde ese momento hay una llamada establecida entre el teléfono de

bob y la centralita asterisk en la que está definido el códec de audio que se utilizará y el

puerto RTP para el envío de audio.

Figura 8

Fuente: Asterisk advanced course. Digium

Paso 5: El núcleo de asterisk procesa la llamada enviándola a la extensión 202

del dialplan para su procesamiento.

Page 21: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

18

Figura 9

Fuente: Asterisk advanced course. Digium

Paso 6: En el dialplan se ejecutan las aplicaciones definidas para la extensión

202 desde la prioridad 1 en adelante.

Figura 10

Fuente: Asterisk advanced course. Digium

Paso 7: Asterisk carga en memoria la aplicación dial la cual contiene los

argumentos necesarios para procesar la llamada: a Betty por sip, con 20 segundos de

timeout para establecer la llamada.

Page 22: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

19

Figura 11

Fuente: Asterisk advanced course. Digium

Paso 8: La aplicación dial le indica al núcleo que es necesario crear un nuevo

canal para establecer la comunicación con el teléfono de Betty.

Figura 12

Fuente: Asterisk advanced course. Digium

Paso 9: A través del canal SIP se efectúa una nueva llamada entre asterisk y el

teléfono de Betty. El proceso de señalización es similar a los indicados en los pasos 2 y 3.

Page 23: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

20

Figura 13

Fuente: Asterisk advanced course. Digium

Paso 10: En este momento, asterisk está procesando dos llamadas: una entre

bob y y otra entre Betty cada una con su correspondiente señalización.

Figura 14

Fuente: Asterisk advanced course. Digium

Paso 11: Asterisk conmuta ambas llamadas, intercambiando los puertos RTP de

emisión/recepción entre ambos terminales realizando transcoding en caso necesario si

los terminales origen y destino no utilizan el mismo códec.

Page 24: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

21

Figura 15

Fuente: Asterisk advanced course. Digium

Paso 12: La comunicación entre bob y Betty se establece a través de asterisk.

2.3. Reconocimiento vocal El proceso de reconocimiento vocal es un proceso complejo que lleva en estudio

desde hace muchos años sin llegar a obtener unos resultados con una alta efectividad.

En los últimos años, los sistemas de reconocimiento vocal han mejorado notablemente,

gracias a combinar diferentes técnicas para realizar el reconocimiento.

En el proceso de reconocimiento vocal intervienen numerosos factores que

incrementan su dificultad. Estos factores son los diferentes leguajes, los diferentes

dialectos, las diferentes formas de pronunciación de cada persona, los diferentes sonidos

de ambiente, etc.

Para ofrecer una solución lo más óptima posible, el proceso de reconocimiento

vocal se divide en varias fases llamadas modelos. En cada una de ellas se obtiene

diferente información para finalmente ofrecer una alternativa de reconocimiento que debe

tener la máxima probabilidad de acierto

2.3.1. Características acústicas La señal de voz es un flujo continuo de sonidos y silencios. Esta señal se

encuentra constituida por palabras, que a su vez se dividen en fonemas, los cuales son la

Page 25: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

22

unidad básica del habla y en conjunto éstos pueden determinar los sonidos con los que

construir las palabras de cualquier lenguaje.

2.3.1.1. Fono y fonema Los fonemas no son sonidos con entidad física, sino abstracciones mentales o

abstracciones formales de los sonidos del habla. En este sentido, un fonema puede ser

representado por una familia o clase de equivalencia de sonidos, denominados fonos,

que los hablantes asocian a un sonido específico durante la producción o la percepción

del habla.

Un sonido o fono se caracteriza por una serie de rasgos fonéticos y articulatorios.

El número de dichos rasgos y su identificación es tarea de la fonética. Un fono es

cualquiera de las posibles realizaciones acústicas de un fonema.

El número de fonemas de una lengua es finito y limitado, en cada lengua el

número de fonos potencialmente definibles, especialmente si son especificados rasgos

fonéticos muy sutiles, es potencialmente ilimitado y varían según el contexto fonético y la

articulación individual de los hablantes. En cuanto al número de fonemas no tiene por qué

ser fijo, y puede cambiar con el cambio lingüístico, de hecho en un instante dado, se

pueden construir dos sistemas fonológicos con diferente número de fonemas si se

introducen reglas de pronunciación más complejas. En castellano el número de unidades

está en torno a 24 (5 vocales y 19 consonantes), aunque no todas las variedades de

castellano tienen el mismo número.

Un fonema es una unidad fonológica diferenciadora, indivisible y abstracta:

- Diferenciadora: cada fonema se delimita dentro del sistema por las

cualidades que se distinguen de los demás y además es portador de una

intención significativa especial.

- Indivisible: no se puede descomponer en unidades menores.

- Abstracta: no son sonidos, sino modelos o tipos ideales de sonidos.

2.3.1.2. Clasificación de los fonemas Acústicamente, un fonema es un sonido que se distingue por un patrón

característico. Por otro lado, un alófono es una de las diferentes pronunciaciones que

puede llegar a tener el fonema. El conjunto de fonemas se divide de acuerdo a su manera

y lugar de articulación en varios grupos:

Page 26: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

23

- Fonemas consonánticos: Los sonidos de las consonantes son producidos

cuando el aire al salir de los pulmones encuentra un obstáculo (parcial o

total), debido generalmente a la lengua y en algunos casos los labios o el

velo, dejándole un espacio pequeño por el que pasar, o incluso bloqueando

totalmente el paso.La clasificación de las consonantes depende de la forma

de articulación de los sonidos. Se entiende por articulación a los

movimientos o configuración de los órganos vocales que producen los

sonidos. Por lo tanto, las consonantes se clasifican en: oclusivas, nasales,

vibrantes, fricativas y laterales.

- Fonemas vocálicos: La producción del sonido de una vocal se genera

cuando el aire pasa de los pulmones a la laringe y después a la boca (o

nariz y boca) sin ninguna obstrucción. En las vocales, la posición de la

lengua y la forma en que se abre o cierra la boca determinan el timbre, el

tamaño y la forma de la onda sonora.

Las vocales se identifican por sus formantes, las cuales son muy marcadas

durante todo el fonema. Esta característica las hace fácilmente distinguibles cuando se

analiza su espectrograma. Además se puede decir que las vocales generalmente son de

mayor duración que las consonantes.

2.3.2. Elementos de un reconocedor de voz El reconocimiento de voz generalmente es utilizado como una interfaz entre el

humano y la máquina, por lo que debe cumplir dos tareas clave:

- Preprocesamiento

- Reconocimiento

2.3.2.1. Preprocesamiento Los sonidos consisten en cambios de presión del aire a través del tiempo, y a

frecuencias que pueden ser percibidas por el oído humano. Estos sonidos pueden ser

digitalizados por un micrófono o cualquier otro medio que convierte la presión del aire a

pulsos eléctricos. La voz es un subconjunto de los sonidos generados por el tracto vocal.

En el preprocesamiento de la señal, se extraen las características que utilizará

posteriormente el reconocedor, en el proceso de extracción se divide la señal de voz en

una colección de segmentos. Posteriormente, se obtiene una representación de

características acústicas más distintivas para cada segmento. Con estas características

obtenidas, se construye un conjunto de vectores que constituyen la entrada al siguiente

Page 27: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

24

módulo. Una de las representaciones más usadas son los coeficientes Linear Predictive

Coding (LPC) y los coeficientes Mel-Frecuency Cepstrum Coefficients (MFCC)

Una manera de representar el sonido es graficándolo en forma de onda

(waveform). En el eje horizontal representa el tiempo y el vertical la amplitud. Una

limitación crucial es el hecho de que no describe explícitamente el contenido de la señal

de voz en términos de propiedades.

Figura 16. Señal de voz y su correspondiente espectrograma de ancho de banda

Fuente: X. Huang, A. Acero, H. Hsiao-Wuen 2001

Una representación más adecuada para el análisis de la señal de voz son los

espectrogramas. Un espectrograma es una representación de la señal de voz de acuerdo

a las variaciones de la energía, con respecto al tiempo y la frecuencia. El espectrograma

contiene mucha información y revela las características acústicas específicas del habla.

Las bandas oscuras corresponden a las concentraciones de energía y son

llamadas formantes. Los formantes son las frecuencias en las que ocurre la resonancia

de las vibraciones vocales. Las formantes son colocadas de menor a mayor frecuencia

tales como: F1 (500Hz) o primera formante, F2 (1500Hz) o segunda formante, F3

(2500Hz) o tercera formante y así sucesivamente. Aunque existen formantes más altas,

habitualmente las tres primeras son las necesarias para identificar un fonema.

Los espectrogramas son útiles para un análisis visual de la señal. Sin embargo un

reconocedor debe extraer de la señal acústica sólo la información que requiere para

poder reconocer una frase. Para ello la señal se muestrea a cierta frecuencia, se

Page 28: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

25

cuantifica y posteriormente se crean vectores de características. Estas últimas son las

utilizadas por el reconocedor.

2.3.2.2. Reconocimiento En esta etapa se traduce la señal de entrada a su texto correspondiente. Durante

el proceso se busca clasificar los vectores de características de la señal de entrada para

obtener las unidades lingüísticas de las que está formada. Posteriormente, se realiza una

búsqueda para encontrar la secuencia de segmentos con mayor probabilidad de ser

reconocidos.

2.3.3. Enfoques del reconocimiento de voz Destacan dos enfoques principales a la hora de plantear un sistema de

reconocimiento de voz. Estos son:

- Enfoque acústico-fonético: Éste engloba aquellos procesos destinados a

realizar una decodificación de palabras, a partir de las características

diferenciadoras de la voz, y un conjunto de reglas existentes en el habla.

- Enfoque de patrones: Son técnicas basadas en el reconocimiento de

patrones. A partir de un conjunto de modelos captados automáticamente en

fases de entrenamiento, la pronunciación es decodificada. Las dos fases

que componen éste método, son: la fase de entrenamiento, donde se

generan los modelos de referencia, empleando un conjunto de bases de

datos de voces grabadas con la suficiente variabilidad; y la fase de

reconocimiento, donde se realiza una comparación entre las

pronunciaciones y las referencias obtenidas, eligiendo la secuencia de

palabras cuya distancia a los modelos de referencia sea menor.

2.3.3.1. Enfoque Acústico-Fonético El enfoque acústico-fonético se apoya en el número finito y diferenciado de

unidades fonéticas que contiene el lenguaje hablado. Los fonemas se estructuran en

palabras, y éstas en frases que modelan las ideas. Este enfoque se basa en el diseño de

sistemas expertos que gobiernan el lenguaje mediante reglas, a partir del análisis de la

señal de voz.

En un reconocedor de voz basado en el enfoque acústico-fonético se pueden

distinguir un conjunto de bloques de procesado:

Page 29: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

26

- Análisis acústico de la señal de voz: Se tiene una señal de voz, obtenida a

través de un micrófono, a partir de las variaciones de presión, sobre ella se

aplica un procesado inicial, que es básicamente la transformación de la

señal de su dominio temporal a frecuencial haciendo uso de la transformada

de Fourier en un banco de filtros perceptuales. Otros análisis que también se

utilizan son la envolvente espectral obtenida a través del cálculo de los

coeficientes de predicción lineal, en inglés Linear Predictive Coding (LPC), o

el número de cruces por cero. Las características obtenidas se denominan

características acústicas.

- Detección de características fonéticas: Tras el análisis acústico de la señal

de voz, se realiza la extracción de los parámetros denominados

características fonéticas. Una característica fonética es la propiedad mínima

que presenta un fragmento de la señal de voz y que diferencia a dos

unidades diferentes. Entre las características fonéticas más usuales se

encuentran, el cálculo de la frecuencia fundamental de las cuerdas vocales,

los valores de los formantes de la voz, la detección del grado de sonoridad,

etc.

- Fase de segmentación y etiquetado: La señal de voz es dividida en regiones

en las que las características fonéticas son similares, para que puedan ser

asignadas a una o varias categorías fonéticas, posteriormente utilizadas

para realizar la decodificación de la secuencia de palabras.

- Fase de discriminación: Su función es la decodificación de las palabras

pronunciadas a partir del conjunto de categorías fonéticas obtenidas en la

fase previa. Usa reglas sintácticas y semánticas obtenidas mediante el

estudio de la señal de voz, y que imponen restricciones para llevar a cabo la

discriminación entre las palabras pronunciadas.

Page 30: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

27

Figura 17. Bloques de un reconocedor de voz basado en un enfoque acústico-fonético.

2.3.3.2. Enfoque de Patrones El enfoque basado en el reconocimiento de patrones cuenta en la actualidad con

un mayor desarrollo y en general ofrece mejores resultados. Se pueden diferenciar dos

modos de funcionamiento dentro de un reconocedor de patrones:

- Modo de entrenamiento: Cada clase a ser entrenada posee su modelo

creado a partir de ejemplos que sirven como referencia.

- Modo de reconocimiento: Se compara mediante una determinada métrica, el

patrón a reconocer con todos los modelos de clase y pasa a identificarse

con el más próximo.

Figura 18. Sistema de clasificación de patrones en modo de entrenamiento y de reconocimiento.

Page 31: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

28

En reconocimiento de voz resulta muy importante la selección de las

características, ya que la precisión de reconocimiento depende en gran medida del tipo y

número de parámetros usados.

Es suficiente extraer las características entre 10 o 20ms debido a la lenta

variación de las articulaciones utilizadas en la producción de la voz.

Se puede hablar de distintas metodologías para el reconocimiento de voz basado

en patrones, éstas son:

- Reconocimiento determinista: la metodología más usada es la alineación

dinámica de patrones, en ingles Dynamic Time Warping (DTW).

- Reconocimiento estocástico: los más representativos son los modelos

ocultos de Markov, más conocidos por su denominación en inglés como

Hidden Markov Models (HMM), tienen mayor capacidad de modelado que

los DTW.

- Reconocimiento basado en las denominadas redes neuronales (ANN:

Artificial Neural Networks).

2.3.4. Aplicaciones del reconocimiento de voz El objetivo principal de los sistemas de reconocimiento de voz es desarrollar

interfaces centradas en las necesidades del usuario aprovechando una de las

capacidades que tiene el hombre para comunicarse, la expresión oral. Estos sistemas

han probado su utilidad para ciertas aplicaciones. Uno de los medios más populares para

las aplicaciones de voz es el teléfono por razones de facilidad de uso, disponibilidad y

coste.

Las aplicaciones basadas en este tipo de reconocedores son servicios financieros,

asistencia de directorio, llamadas a cobro revertido (operadora automática), transferencia

de llamadas telefónicas, consultas de información (clima, tráfico, reservas,…). Las

ventajas que presenta este tipo de aplicaciones son que al interactuar el usuario utiliza la

eficiencia del habla (rápida, flexible, natural) y está libre de movimientos de las manos en

caso de que las tenga ocupadas.

Existen otras aplicaciones que no se basan en el teléfono, por ejemplo el dictado

automático. También el reconocimiento de voz es usado en compañías en donde la

entrada de datos o comandos por voz es requerida tales como desarrollo de inventarios,

control de robots, acciones en sistemas instalados en coches. En los últimos años varios

Page 32: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

29

sistemas operativos ha incorporado motores de reconocimiento que permiten interactuar

con el propio sistema operativo para realizar diversas acciones. Es el caso de Siri en

sistemas Apple o Cortana en sistemas Microsoft

2.3.5 Reconocimiento Automático de Voz (RAV) El área del reconocimiento automático de voz (RAV), plantea como objetivo

fundamental la transcripción automática de la señal de voz mediante máquinas, la

conversión de habla en texto.

El habla es sin duda el método de comunicación más intuitivo y natural para los

seres humanos. La Tecnología del Habla, en sentido general, está gozando de un interés

cada vez mayor por parte de la comunidad científica internacional y la sociedad en

general y, dentro de ésta, el reconocimiento automático de voz presenta uno de los

campos más atractivos de investigación.

Hasta hace pocos años, los sistemas RAV de mediana y gran complejidad,

estaban disponibles casi únicamente como prototipos de laboratorio. En la actualidad,

empresas como Google, IBM, Lernout & Hauspie y Dragon Systems han ganado terreno

en el mercado con productos para dictado de texto de gran calidad.

También existen sistemas comerciales de reconocimiento automático de voz

incluyendo Lumenvox, Nuance, Verbio, Fonetic, Omilia así como sistemas de

investigación como AT&T DVL, AT&T ScanMail, CMU Informedia, SpeechBot, entre otros.

Los sistemas RAV han sido aplicados en gran parte a la tarea de búsqueda de

audio.

Existen distintas tipologías, pero la mayoría de estos sistemas producen una

trascripción de los datos de audio, y a partir de ésta, aplican métodos de búsqueda

basada en texto.

La mayoría de los sistemas RAV tienen un vocabulario cerrado, debido a la

cantidad de datos finita que se usa para entrenar los modelos de lenguaje. Normalmente

el vocabulario está formado por palabras aparecidas en corpus de entrenamiento, y en

ocasiones se reduce para que incluya las palabras más frecuentes del corpus. Las

palabras que no están dentro del vocabulario definido son palabras –out of vocabulary

(OOV)- fuera de vocabulario, no serán reconocidas por los sistemas RAV, contribuyendo

a errores de reconocimiento. Usar búsqueda fonética ayuda a la recuperación de

palabras OOV.

Page 33: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

30

2.3.5.1. Arquitectura Ante el proceso de diseño de un sistema RAV, uno de los planteamientos es la

especificación de la arquitectura modular del sistema.

En la siguiente figura se muestra el esquema genérico de un sistema RAV, la

señal de entrada se representa generalmente por una secuencia temporal de vectores de

parámetros, que son calculados mediante análisis localizado. En el caso general, la idea

es transformar dicha representación inicial en un conjunto de parámetros más elaborados,

más adaptados a la tarea de discriminación posterior.

Figura 19. Esquema genérico de un RAV

La selección de los parámetros a usar sigue siendo un problema de difícil solución,

aunque la característica común a la mayoría de los enfoques, pasa por un proceso de

filtrado de la secuencia de entrada.

2.3.6. Resumen Un sistema de reconocimiento de voz está formado por varias capas o modelos.

El primero de ellos es el modelo acústico, que permite a la tecnología identificar si el

sonido procede de una llamada de móvil, de un teléfono IP o cualquier otro medio.

Determinar el canal de comunicación es importante para establecer el grado de distorsión

que puede experimentar el mensaje.

El modelo léxico va a continuación y se trata del idioma. En este caso, además del

propio idioma existe la dificultad de los distintos matices que tiene cada persona al hablar,

ya sea por su dialecto, acento, forma de hablar, forma de pronunciar, etc.

Page 34: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

31

Otra capa más es el modelo del lenguaje. Con él se consigue que un sistema de

reconocimiento de voz entienda la forma de hablar de la gente, cómo se construyen las

frases y cómo puede variar esta construcción, dependiendo de la región, de la cultura y

de todas las influencias personales de cada cual.

Por último, funciona un motor estadístico que compara las características

extraídas de las palabras a reconocer, con los diferentes modelos almacenados en la

base de datos, efectuando la transcripción del valor reconocido a texto.

Esta consulta tiene que adivinar la frase indicada, con el nivel de distorsión

correspondiente si se habla desde un móvil, el acento y la forma de decirlo. La precisión

del software al final se reduce a aumentar la base de datos para alcanzar todas las

combinaciones posibles en un idioma.

Figura 20. Esquema resumen en proceso de reconocimiento vocal

Las empresas que desarrollan motores de reconocimiento vocal se han encargado

recopilar a personas con diferentes acentos, con diferentes formas de pronunciar,

hablando desde diferentes dispositivos. Estas personas han grabado multitud de palabras

y frases en diferentes idiomas. Los resultados de estas grabaciones los han sometido a

diferentes procesos, especialmente filtrando los parámetros de entrada y los han

almacenado en una base de datos, de esta forma han realizado lo que se denomina

entrenamiento del motor de reconocimiento.

Puede darse el caso que una empresa concreta que requiera realizar

reconocimiento de voz en un lugar concreto, con un dialecto determinado y unas frases

que no sean muy habituales, provoque que el motor de reconocimiento no funcione con la

tasa de acierto esperada. Para dar solución a estos requerimientos las empresas

seleccionan a personas de la zona concreta demandada y realizan el entrenamiento del

sistema de reconocimiento. Así las bases de datos van cada vez incrementándose y

ofreciendo respuestas cada vez a más acentos y formas de hablar de distintos lugares.

Page 35: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

32

2.4. Síntesis de voz La síntesis de voz consiste en la creación de ondas de sonido artificiales

semejantes al habla humana. En inglés se conoce como Text-To-Speech por la

conversión de texto a voz. Los sistemas de síntesis de voz tienen dos partes

diferenciadas.

La primera parte se llama front-end. Es la parte encargada de recoger el texto y

procesarlo sustituyendo abreviaturas o números en sus equivalentes para facilitar la

transformación posterior. A menudo se conoce como normalización del texto o pre-

procesado. También hace una distinción entre las partes de la oración en base a la

prosodia de la frase (si es interrogación, exclamación, frase afirmativa, negativa, etc.).

Separa palabras y les asigna la transcripción fonética.

La segunda parte de los sistemas de síntesis de voz se llama back-end. Consiste

en crear las ondas de sonido mediante las configuraciones que han tenido lugar en la

front-end.

A la hora de crear una onda de voz hay que tener en cuenta dos aspectos

fundamentales que tiene que tener el resultado final. La naturalidad y la inteligibilidad. Los

sistemas de síntesis, buscan un equilibrio de ambas características.

La naturalidad es la cualidad por la que una onda sintética se parece a la voz

humana (conjunto factores que afectan la pronunciación de una manera global, como la

entonación, el ritmo y la intensidad del habla).

La inteligibilidad es la cualidad de poder entender la onda de voz sintética sin

necesidad de esfuerzo.

Un conversor de texto a voz consta de tres bloques:

- Análisis lingüístico del texto: Como se ha dicho previamente, se realiza un

pre-procesado para insertar correctamente los equivalentes tanto de

abreviaturas como de números, etc. También se divide la frase por palabras y se separan las partes gramaticales.

Finalmente este bloque también engloba la conversión del texto en los

símbolos fonéticos basándose en las reglas gramaticales del idioma.

Dependiendo de la sofisticación del software, pueden haber hasta cuatro

niveles de conversión basándose en el nivel fonético (el más sencillo que

atiende a la pronunciación de las palabras), en el nivel sintáctico (atendiendo

a la estructura gramatical), en el nivel semántico (atendiendo al significado

Page 36: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

33

de la frase a procesar) o al nivel pragmático (atendiendo al significado del

discurso).

Para mejorar la naturalidad del resultado final, se puede crear una prosodia

concreta de cada palabra dependiendo del lugar que ocupa en la frase a

procesar.

- Estudio de la frase y su entonación o prosodia: Este bloque central se

encarga de estudiar la frase en su conjunto para poder darle una entonación

correcta. También se encarga de estudiar los aspectos relacionados con la

prosodia como son la entonación, la melodía (ritmo), y la intensidad del texto.

Estos aspectos se han ido alcanzando y perfeccionando por medio del

ensayo y error hasta conseguir una entonación y melodía adecuados.

Actualmente tienen bases de datos que alcanzan la prosodia correcta de las

frases automáticamente por medio de métodos estadísticos sobre una base

de datos preestablecida.

Este apartado es importante para generar una voz artificial lo más natural

posible ya que una buena entonación y la melodía ayudan a la calidad final

de la onda sintetizada.

La entonación es la evolución de la frecuencia fundamental (pitch) a lo largo

del texto y la melodía o el ritmo incluye tanto las duraciones de cada uno de

los segmentos como de las pausas entre palabras.

En el idioma español, la entonación consta de una rama ascendente que

comprende desde el primer sonido hasta el primer acento tónico (rama

intensiva) y a partir de aquí se mantiene subiendo y bajando la entonación

hasta la parte del último acento (rama distensiva).

La elevación de la rama distensiva significa que la frase no está completa. Si

esta rama es de entonación descendente, significa que la frase finaliza

(rama conclusiva).

Finalmente si se produce una elevación y un descenso en la misma frase,

significa que la frase es interrogativa.

- Síntesis de voz: El último bloque es el sistema de síntesis de voz. En este

bloque existen dos tecnologías principales: la síntesis concatenativa que se

basa en segmentos grabados de voz humana real y la síntesis por

formantes que se basa en crear una onda de sonido partiendo de cero

configurando las frecuencias y las demás características.

Una vez encontradas las unidades mínimas tanto en el de síntesis

concatenativa como en el de síntesis por formantes, se aplica un pos

procesado segmental. Este post-proceso tiene la función de asegurar la

Page 37: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

34

continuidad de la entonación, la intensidad y la melodía al pasar de una

unidad mínima a otra, manteniendo el tono constante sin saltos ni defectos

fonéticos.

2.4.1 Síntesis concatenativa Existen tres tipos de síntesis concatenativas:

- Síntesis por selección de unidades: En este tipo de síntesis concatenativa

trae consigo una gran base de datos donde están almacenadas las

grabaciones del habla. La base de datos se compone de unidades que

pueden ser fonemas, silabas, palabras, frases u oraciones. Con estos datos,

se modela la onda de voz atendiendo a los datos analizados anteriormente.

El problema de esta tecnología era que para cada prosodia determinada de

la frase se tendría que elaborar y parametrizar dicha frase para unir los

distintos segmentos. La forma de unir los segmentos se revoluciono a partir

de la aparición del procesamiento segmental llamado PSOLA (Pitch-

Synchronous Over-Lap and Add).

Permite modificar la frecuencia fundamental de una señal de un modo

sencillo actuando directamente sobre la representación de la misma en el

dominio del tiempo, pudiendo utilizarse por tanto para formar la curva

prosódica de los mensajes a emitir.

Consiste en la separación de las distintas unidades, duplicando su periodo al

doble y superponiendo las unidades para que no tengan saltos cuantitativos

a la hora de la unión. Se utiliza para aumentar la naturalidad de la voz

sintética.

La síntesis por selección de unidades de propósito general (sin un tema

específico) necesita una base de datos extensa para tener una buena

calidad y naturalidad.

Es posible crear una voz natural e inteligible con una base de datos pequeña

si es con un propósito concreto sobre un determinado tema, como por

ejemplo, el sistema de aviso de una terminal de autobuses que está

determinado a decir lo mismo una y otra vez sin salirse del guion establecido.

- Síntesis por difonos: Utiliza una base de datos más compacta. Contiene

todos los difonos del lenguaje. A partir de estos difonos y atendiendo a los

parámetros obtenidos en los procesos anteriores, se realiza una búsqueda

estadística, seleccionando el difono que más se ajuste.

Page 38: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

35

Como los difonos ya contienen una característica prosódica del lenguaje, no

es necesario realizar el proceso segmental de la unión por unidades pero si

conviene hacer un post-procesado para suavizar la unión de los mismos.

El resultado final es una voz robótica poco natural y parcialmente inteligible.

Por este motivo no se usa en aplicaciones comerciales pero si en

investigación ya que tiene programas de libre distribución

- Síntesis específica para un dominio: En esta síntesis, se tiene una base de

datos con palabras y oraciones grabadas directamente de la voz humana.

Se utiliza con fines sobre temas muy concretos, como por ejemplo un

sistema de sonido que de las horas.

En este sistema se nota mucho el cambio de entonación e intensidad entre

palabras. En cambio es uno de los sistemas más naturales que existen

puesto que la prosodia y entonación de las palabras como unidades son las

de las grabaciones originales. No es válido para oraciones de propósito

general (para cualquier tema) debido a la mínima base de datos.

2.4.2 Síntesis por formantes Esta tecnología crea zonas de concentración de energía en el espectro del sonido

sintetizado, lo que imita el sonido de la voz.

La síntesis de formantes no usa muestras de habla humana en tiempo de

ejecución. En lugar de eso, la salida se crea usando un modelo acústico. Parámetros

como la frecuencia fundamental y los niveles de ruido se varían durante el tiempo para

crear una forma de onda o habla artificial.

Se basa en la utilización de filtros para crear los distintos efectos sobre las ondas

que provocarían los aparatos fonadores humanos.

Estos filtros modifican los siguientes parámetros acústicos como muestra la

siguiente tabla

Page 39: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

36

Tabla 2. Parámetros de la síntesis de voz

Page 40: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

37

3. OBJETIVOS Los objetivos que se han propuesto para el presente TFG son los siguientes:

- Diseñar una solución VoIP para ofrecer un servicio vocal de consulta de

calificaciones.

- Instalar la centralita asterisk activando las funcionalidades necesarias para

la realización del servicio vocal de consulta de calificaciones.

- Describir la forma de personalizar la centralita asterisk en idioma Español

Castellano.

- Describir el proceso de instalación personalizada de la centralita asterisk

- Implementar reconocimiento vocal (speech recognition) en la centralita

asterisk usando dos alternativas diferentes. Por una parte a través de un

Script AGI escrito en Perl que hace uno de la API de reconocimiento vocal

de Google. Por otra parte a través de un servidor de reconocimiento interno

del proveedor Verbio mediante el uso de gramáticas ABNF.

- Implementar de síntesis de voz (text to speech) en la centralita asterisk

usando dos alternativas diferentes. Por una parte a través de un Script AGI

escrito en Perl que hace uso de la API de Google translate. Por otra parte a

través de un servidor interno del proveedor Verbio que realiza la síntesis de

voz

- Realizar reconocimiento de tonos DTMF en la centralita asterisk.

- Registrar terminales SIP en asterisk.

- Configurar el dialplan de la centralita asterisk para efectuar el servicio de

consulta de calificaciones.

- Utilizar la herramienta Loquendo TTS director para la creación y

manipulación de ficheros audio.

- Integrar asterisk con una base de datos Mysql.

- Crear y manipular una base de datos Mysql.

- Crear consultas para el acceso a la información por parte de la centralita

asterisk.

- Registrar la centralita asterisk con un proveedor SIP. Dicho proveedor

proporcionará un número RTB para acceder al servicio de consulta por vía

telefónica desde cualquier teléfono fijo o móvil.

Page 41: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

38

4. MATERIALES Y MÉTODOS Para la implementación del PFG se ha utilizado un PC en el que se han

instalado y configurado los siguientes componentes:

- El sistema operativo Ubuntu server 14.04. La descarga se realiza desde la

web http://releases.ubuntu.com/14.04/

- El software asterisk con la última versión disponible 13.10.0. La descarga se

realiza desde la web de digium: http://downloads.digium.com

- El software Loquendo TTS Director para la creación de los ficheros de audio

necesarios. Este software es de pago. Para la realización del proyecto

hemos utilizado una versión de evaluación.

- Las voces en español para asterisk 13. Son los ficheros de audio que

asterisk espera encontrar para proporcionar las locuciones necesarias para

su funcionamiento. Tienen un uso libre. Las hemos descargado de la url

http://www.improvisa.com/descargas/sonidos_esp_asterisk_11.tar.bz2

- Una base de datos transaccional con motor MySQL

- La API de reconocimiento vocal de Google. Ha sido necesario registrarse en

el foro de chronium para poder tener acceso a una clave necesaria para

acceder al servicio de reconocimiento vocal de google.

- La API de Google Translate.

- El servidor de reconocimiento y síntesis de voz del proveedor Verbio

Technologies con su motor de reconocimiento y su locutor para idioma

castellano. Se crearán gramáticas ABNF para realizar el reconocimiento

vocal a través de este proveedor de reconocimiento.

- El intérprete de perl. Se crearán scripts en perl para que asterisk pueda

acceder al servicio de reconocimiento vocal y text to speech de Google a

través de AGI (Asterisk Gateway interface)

Una vez descargados todos los componentes necesarios se ha realizado la

instalación y configuración necesaria en cada uno de ellos.

El reconocimiento vocal y síntesis de voz se ha realizado a través de dos

alternativas diferentes, por una parte a través de un proveedor externo (Google) y por

otra parte a través de un proveedor interno (Verbio).

El diagrama general para implementar el servicio de consulta de calificaciones

realizando el reconocimiento vocal y síntesis de voz a través de Google es el siguiente

Page 42: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

39

Figura 21

El diagrama general para implementar el servicio de consulta de calificaciones

realizando el reconocimiento vocal y síntesis de voz a través del proveedor verbio es el

siguiente

Page 43: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

40

Figura 22

Los diagramas de flujo de la aplicación teléfonica diseñada, se muestran a

continuación, en ellos indicamos el nombre del fichero de audio generado mediate la

aplicación Loquendo TTS director y el contenido del mensaje que se indica. Estan

divididos en tres digramas, en el primero indicamos el flujo desde el inicio de la llamada

hasta el final del reconocimiento del DNI, en el segundo diagrama indicamos el flujo

desde el inicio del proceso de reconocimiento de asignatura hasta el final del proceso del

mismo. En el último flujo indicamos el proceso de reconocimiento de la convocatoria y la

presentación del resultado de la consulta de la calificación obtenida.

Page 44: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

41

Figura 23. Flujo en reconocimiento de DNI

Page 45: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

42

Figura 24. Flujo en reconocimiento de Asignatura

Page 46: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

43

Figura 25. Flujo en reconocimiento de convocatoria y presentación de calificación obtenida

4.1 Instalación de la centralita Asterisk Se han instalado los siguientes módulos de asterisk mediante la compilación del

código fuente:

- Módulo Dahdi: ofrece los drivers necesarios al sistema operativo para que

pueda reconocer las tarjetas de telefonía y asterisk pueda utilizarlas.

- Módulo Libpri: implementa la señalización necesaria para líneas digitales.

- Módulo asterisk: ofrece todos los módulos necesarios para la

implementación de una centralita a través del sistema operativo.

Previamente a la instalación de los módulos anteriores es necesario instalar

unos paquetes que resuelven las dependencias necesarias para que la instalación de los

módulos indicados anteriormente se realice de forma correcta y no de errores.

Detallamos a continuación el proceso de instalación de asterisk, partimos de un

PC con el sistema operativo Ubuntu 14.04 instalado con el servidor ssh habilitado, una

dirección IP interna fija, el DNS configurado y con acceso a internet.

Page 47: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

44

Una vez que nos conectamos por ssh al servidor donde instalaremos la centralita

asterisk y realizado elevación de permisos mediante el comando sudo -i

Inicialmente es conveniente actualizar el sistema mediante los comandos

apt-get update

apt-get upgrade -y

apt-get dist-upgrade -y

A continuación es necesario instalar todas las dependencias necesarias para

que la instalación de cada uno de los componentes de la centralita asterisk pueda

realizarse y no de errores. Las dependencias a instalar son las siguientes:

apt-get install -y build-essential

apt-get install -y git-core

apt-get install -y pkg-config

apt-get install -y subversion

apt-get install -y libjansson-dev

apt-get install -y sqlite

apt-get install -y autoconf

apt-get install -y automake

apt-get install -y libtool

apt-get install -y libxml2-dev

apt-get install -y libncurses5-dev

apt-get install -y unixodbc

apt-get install -y unixodbc-dev

apt-get install -y libasound2-dev

apt-get install -y libogg-dev

apt-get install -y libvorbis-dev

Page 48: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

45

apt-get install -y libneon27-dev

apt-get install -y libsrtp0-dev

apt-get install -y libspandsp-dev

apt-get install -y libmyodbc

apt-get install -y uuid

apt-get install -y uuid-dev

apt-get install -y sqlite3

apt-get install -y libsqlite3-dev

Figura 26. Captura tras instalar el paquete build-essential requerido como dependencia para la

instalación de asterisk

Una vez instaladas es conveniente reiniciar el equipo mediante el comando

shutdown -r now

Una vez reiniciado el equipo instalaremos los componentes en el siguiente orden:

1. Módulo de Dahdi

2. Módulo de Libpri

3. Asterisk

4. Sonidos en Español Castellano para asterisk

Instalación del módulo de dahdi

Page 49: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

46

cd /usr/src

wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-

linux-complete-current.tar.gz

tar xvfz dahdi-linux-complete-current.tar.gz

cd dahdi-linux-complete-2.11.1+2.11.1/

make all

make install

make config

Figura 27. Captura tras instalar el módulo DAHDI

Instalación del módulo de Libpri

cd /usr/src

wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz

tar xvfz libpri-current.tar.gz

cd libpri-1.5.0

make

make install

Page 50: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

47

Figura 28. Salida de comandos make y make install en instalación de libpri

Instalación de Asterisk

cd /usr/src

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-

current.tar.gz

tar xvfz asterisk-13-current.tar.gz

cd asterisk-13.9.1

./configure

make menuselect

make

make install

make config

make samples

ldconfig

Page 51: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

48

Figura 29. Salida del comando ./configure en instalación de asterisk

Figura 30. Selección de módulos a instalar/desinstalar tras ejecutar comando make menuselect

Page 52: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

49

Para seleccionar el módulo es necesario pulsar enter. Si dicho módulo aparece

con un carácter “*” significa que el modulo está cargado, si no está el carácter “*” significa

que dicho módulo no está cargado. Los respectivos módulos se pueden incluir o eliminar

pulsando la tecla espacio. Para ir al nivel inferior es necesario pulsar enter. Para grabar

cambios al finalizar se pulsa “Y” cuando se solicite.

Figura 31. Channel drivers de diferentes protocolos de señalización VoIP

Page 53: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

50

Figura 32. Salida del comando make en instalación de asterisk

Figura 33. Salida tras instalación de asterisk

Page 54: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

51

Instalación de sonidos en español para asterisk:

cd /var/lib/asterisk/

mv sounds sounds-originales

wget http://www.improvisa.com/descargas/sonidos_esp_asterisk_11.tar.bz2

bzip2 -dc sonidos_esp_asterisk_11.tar.bz2 | tar -xv

Este último comando creará un directorio llamado sounds

cd sounds

chmod 664 * -R

find ./ -type d -exec chmod 775 {} \;

Si todas las acciones anteriores se han realizado correctamente ya se dispone

de la centralita asterisk operativa con las voces en español instaladas.

Para arrancar la centralita asterisk se ejecutará el comando:

/etc/init.d/asterisk start

Figura 34. Inicio de servicio asterisk

Si está correctamente arrancado será posible conectarse a la consola a través

del comando:

Asterisk –rvvvvvvvvvvvvvvvvvvvvvvvv

Figura 35. Conexión a consola de asterisk

Page 55: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

52

4.2 Instalación y configuración del motor de base de datos

La instalación del motor de base de datos Mysql se realiza mediante el comando:

apt-get -y install mysql-server

Una vez instalado se comprobará que se tiene acceso a la base de datos a

través del usuario root creado en el proceso de instalación anterior, para ello se ejecutará

el comando

mysql -p -u root

Y se introducirá la password que se definió en el proceso de instalación para el

usuario root.

Se proporcionarán todos los privilegios al usuario root, para ello desde la consola

de mysql se ejecutarán los siguientes comandos:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ‘password’;

FLUSH PRIVILEGES;

Crearemos una base de datos llamada ‘universidad’, para ello ejecutaremos el

comando:

CREATE DATABASE universidad;

Crearemos un usuario de acceso a base de datos al que llamaremos “asterisk”

con una contraseña “password” y le daremos los privilegios necesarios para realizar

operaciones en la base de datos ‘universidad’

CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON universidad.* TO 'asterisk'@'localhost';

Una vez creado el usuario asterisk comprobaremos que puede conectarse al

servidor mysql y puede acceder a la base de datos ‘universidad’.

mysql -p -u asterisk

Page 56: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

53

Figura 36. Conexión de usuario asterisk a bbdd universidad

Este será el usuario que configuraremos en la centralita asterisk para el acceso

a la base de datos a través del conector odbc.

4.2.1 Configuración del conector odbc en asterisk El conector odbc es una capa de abstracción que permite que asterisk pueda

comunicarse con diferentes motores de bases de datos sin necesidad de requerir un

desarrollo adicional en función del motor de base de datos a utilizar.

Antes de realizar la configuración del conector es necesario descargar los

paquetes de dependencias necesarios para que la configuración se realice correctamente

y no dé errores.

Para el sistema operativo Ubuntu las dependencias a instalar son las siguientes:

apt-get install -y unixODBC

apt-get install -y unixODBC-dev

Una vez instaladas las dependencias necesarias, es necesario realizar la

configuración del driver odbc para Mysql. Para ello es necesario incluir la configuración

necesaria en el fichero /etc/odbcinst.ini.

En el sistema operativo Ubuntu, este fichero no existirá, por tanto será necesario

crearlo a través del comando

touch /etc/odbcinst.ini

Una vez creado el fichero, será necesario editarlo con la configuración necesaria.

La configuración a introducir es la indicada en la figura 48.

Page 57: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

54

Figura 37. Configuración de drivers a usar por conector odbc para MySQL

El siguiente paso es realizar la configuración en el fichero /etc/odbc.ini, el cual se

usa para crear un identificador que asterisk podrá usar como referencia en su

configuración para tener acceso a la base de datos a través del conector odbc.

La configuración necesaria a introducir en el fichero /etc/odbc.ini es la indicada

en la figura 49. Es necesario incluir una descripción, el driver que se usará (deberá estar

configurado en el fichero /etc/odbcinst.ini, en nuestro caso el identificador del driver es

“MySQL”) el puerto TCP de conexión a la base de datos (por defecto en MySQL es el

3306), el nombre de la base de datos a conectar (en nuestro caso llamada “universidad”).

La dirección IP del servidor donde residirá el motor de base de datos (en nuestro caso

residirá en la máquina local donde también estará instalado asterisk) y la ruta del

fichero .sock de Mysql.

Figura 38. Configuración del conector odbc de acceso a la base de datos Mysql

Para verificar que es posible conectar a la base de datos “universidad” a través

del conector odbc creado anteriormente se puede ejecutar el comando indicado en la

fichera 49. Para ello se usará el nombre del conector odbc creado (“asterisk-conector”), el

usuario de conexión a la base de datos (usaremos el usuario “asterisk” para conectar a la

base de datos Mysql) y la password de dicho usuario de acceso a la base de datos

(omitiremos el password por seguridad).

Page 58: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

55

Figura 39. Verificación de conexión a BBDD a través de conector odbc

De esta forma ya está configurado y operativo el conector odbc para que asterisk

pueda hacer uso de él para acceder a la base de datos Mysql.

El siguiente paso es verificar que los módulos odbc de asterisk están instalados

para que el propio asterisk pueda hacer uso de ellos para acceder a la base de datos.

Los módulos que son necesarios son “res_odbc” y “func_odbc”

Para ello realizaríamos siguientes pasos:

Acceder al directorio donde están los ficheros fuente de asterisk, en nuestro

caso /usr/src/ asterisk-13.9.1

Ejecutar el comando “./configure”

Ejecutar el commando “make menuselect”

Seleccionar “dialplan functions”

Verificar que el modulo “func_odbc” está instalado

Page 59: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

56

Figura 40. Verificación de módulo func_odbc instalado en asterisk

Ir al nivel inferior pulsando el botón “Escape” y seleccionar “Resource modules”

Verificar que el módulo res_odbc está instalado

Page 60: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

57

Figura 41. Verificación de módulo res_odbc instalado en asterisk

En caso necesario seleccionar ambos módulos y salvar los cambios.

En caso necesario realizar la instalación de ambos módulos con el comando

“make install”

Una vez realizada la comprobación que los módulos de asterisk necesarios para

conectar a la base de datos por odbc están instalados, el siguiente paso es configurar el

fichero /etc/asterisk/res_odbc.conf para permitir a asterisk conectarse a la base de datos

a través del conector odbc. En este fichero se definen varios parámetros que usarán otros

módulos de asterisk para conectarse a la base de datos.

El contenido del fichero res_odbc.conf en nuestro caso es el siguiente:

[asterisk]

enabled => yes

dsn => asterisk-connector

username => asterisk

password => Password_acceso_a_bbdd_usuario_asterisk

pre-connect => yes

Page 61: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

58

Una vez realizada la configuración necesaria en el fichero res_odbc.conf

tendremos que hacer que asterisk aplique los cambios, para ello se ejecutará el comando:

Asterisk –rx “reload”

De esta forma asterisk releerá todos sus ficheros de configuración aplicando los

cambios que se hayan efectuado en los mismos.

Para comprobar que el conector odbc está configurado correctamente y asterisk

tiene acceso a la base de datos ejecutaremos el comando:

Asterisk –rx “odbc show”

Si la salida es similar a la mostrada en la figura 52, la configuración es correcta.

Figura 42. Verificación de conexión correcta de asterisk a BBDD por odbc

De esta forma ya está configurado asterisk para tener acceso a la base de datos

“Universidad” a través del conector odbc usando el usuario de acceso a base de datos

llamado “asterisk”.

El siguiente paso es definir las consultas necesarias a base de datos en el

fichero func_odbc.conf. Indicaremos la configuración en apartados posteriores.

4.2.2 Diseño de la base de datos Se ha creado una base de datos llamada universidad con dos tablas. Una tabla

llamada Alumno con los datos de información de los alumnos y otra tabla llamada

Asignatura con los datos de las asignaturas. Se han creado las consultas SQL necesarias

para la implementación de la consulta de información de calificaciones.

Crearemos las tablas ALUMNO y ASIGNATURA mediante los comandos

USE universidad;

CREATE TABLE ALUMNO;

Page 62: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

59

CREATE TABLE ASIGNATURA;

La definición de los campos de la tabla “ALUMNO” serán los siguientes:

DNI NUMERIC(8) NOT NULL,

NOMBRE VARCHAR(30),

APELLIDO1 VARCHAR(30),

APELLIDO2 VARCHAR(30),

EMAIL VARCHAR(30),

TELEFONO NUMERIC(12),

DIRECCION VARCHAR(40),

CIUDAD VARCHAR(30),

La definición de los campos de la tabla “ASIGNATURA” serán los siguientes:

ID INTEGER(6) NOT NULL AUTO_INCREMENT,

NOMBRE VARCHAR(60),

TITULACION VARCHAR(40),

CONVOCATORIA VARCHAR (20),

CREDITOS NUMERIC(2,1),

CALIFICACION VARCHAR(20),

NOTA NUMERIC(2,1),

DNIALUMNO NUMERIC(8),

Page 63: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

60

El diagrama entidad relación de la base de datos es el siguiente

Figura 43. Diagrama Entidad-Relación de BBDD creada

Se han introducido en la base de datos los siguientes valores en la tabla Alumno.

El objetivo ha sido introducir diversos números de DNI para comprobar el correcto

reconocimiento del mismo.

Figura 44. Datos introducidos en la tabla ALUMNO

Page 64: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

61

De esta forma el contenido de la tabla alumno es el siguiente:

Figura 45. Contenido de la tabla ALUMNO

En la tabla ASIGNATURA se han introducido los siguientes datos. El objetivo ha

sido introducir diversos nombres de diferentes asignaturas con los datos de la calificación

obtenida en una determinada convocatoria (ordinaria o extraordinaria)

Figura 46. Datos introducidos en la tabla ASIGNATURA

De esta forma el contenido de la tabla asignatura es el siguiente:

Page 65: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

62

Figura 47. Contenido de la tabla ASIGNATURA

De esta forma, con los datos introducidos ya se dispone de la información

necesaria en la base de datos para que asterisk pueda acceder a ella y tras efectuar el

reconocimiento de voz del número de DNI, de la asignatura y de la convocatoria a

consultar, pueda ofrecer la calificación y la nota obtenida almacenada en la base de datos.

4.3 Estudio de alternativas de reconocimiento vocal con asterisk

Para realizar el reconocimiento vocal se han estudiado diversas alternativas

existentes actualmente que puedan realizar el reconocimiento en idioma español

castellano y que puedan utilizarse con asterisk.

El proceso de reconocimiento vocal habitualmente conocido como ASR

(Automatic Speech Recognition) es un proceso por el cual el sistema espera que el

usuario hable y una vez finalizado el reconocimiento, el sistema realiza una transcripción

de lo indicado por el usuario, devolviendo las palabras reconocidas en modo texto. En

este proceso de reconocimiento hay una puntuación proporcionada por el motor de

reconocimiento que mide la probabilidad de haber efectuado un correcto reconocimiento.

Generalmente este valor va entre 0 y 1 y un valor superior a 0.9 suele ser válido para que

el reconocimiento efectuado haya sido correcto.

En el reconocimiento vocal es habitual, para simplificar las operaciones de

transcripción, limitar el vocabulario que puede utilizar el usuario, de forma que resulte

más sencillo para el reconocedor, realizar el proceso de búsqueda con un diccionario de

palabras menor, utilizando un rango de palabras o frases específicas para realizar el

reconocimiento.

Page 66: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

63

Para realizar el reconocimiento vocal es crucial que el motor seleccionado pueda

implementar el reconocimiento vocal en idioma español y pueda integrarse con asterisk.

Tras realizar una extensa búsqueda en internet sobre sistemas de

reconocimiento vocal con soporte para idioma español y que puedan utilizarse junto con

asterisk comprobamos que pueden usarse dos alternativas:

- Que el proceso de reconocimiento se efectúe por un servidor externo que

preste el servicio de reconocimiento y pueda ser accesible por asterisk, por

ejemplo a través de un script de AGI.

- Que el proceso de reconocimiento se efectúe por un motor de

reconocimiento configurado internamente en la misma red que el servidor

asterisk y que pueda integrarse con el propio asterisk.

4.3.1 Proceso de reconocimiento mediante servidor externo En el caso que el reconocimiento vocal se efectúe por un servidor externo,

existen varias alternativas, en todas ellas es posible acceder al servicio de

reconocimiento vocal a través de una API HTTP REST. Entre las empresas que

actualmente ofrecen este servicio destacan las siguientes:

- AT&T: Servicio speech recognition REST API: Es necesario registrarse en

su web para desarrolladores. Es necesario realizar un pago de 99$ anuales

más tasas por uso del servicio de reconocimiento vocal. Un ejemplo de uso

de esta API es:

En este ejemplo se envía el fichero de audio red_dress.wav por https al

servidor api.att.com/speech/v3/speechToText con las cabeceras indicadas,

el servidor devolverá a través de, por ejemplo una variable JSON, la posible

transcripción del audio detectado y un valor entre 0 y 1 que indicará la

probabilidad de haber realizado una transcripción correcta.

- NUANCE: Servicio Nuance speech recognition REST API: Es necesario

registrarse en su web para desarrolladores. Un ejemplo de uso de esta API

es:

Page 67: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

64

Este ejemplo es similar al anterior, en este caso se envía al servidor una

cabecera indicando el tipo de códec, los bits usados y la tasa de codificación.

- GOOGLE: Uso de la speech API de google. Por el momento no es un

servicio en producción de google. No hay un documento oficial sobre la API.

Es necesario registrarse en el grupo de desarrolladores de chronium para

poder obtener una clave necesaria para poder realizar el reconocimiento. Un

ejemplo de uso de esta API es:

En este ejemplo se envía el fichero de grabación red_dress.flac ya que

google únicamente admite ficheros con códec flac para realizar el

reconocimiento.

- IBM WATSON: Uso de IBM speech recognition REST API. Es necesario

registrarse en la web https://console.ng.bluemix.net/. Un ejemplo de uso de

esta API es:

- WIT: Esta herramienta es más para procesamiento de lenguaje natural (NLP

natural language processing) que para reconocimiento de voz. Es necesario

tener cuenta en Github. El objetivo de esta herramienta es ser capaz de

“enteder” los mensajes reconocidos. Un ejemplo de uso puede ser en

reproducir la canción “Jingle Bells” si el usuario dice “Robot, quiero escuchar

una canción de navidad”. Un ejemplo de uso de esta API es:

Page 68: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

65

Una empresa llamada Grid Dynamics ha realizado a finales del año 2015, un

estudio comparativo entre todos los motores de reconocimiento indicados anteriormente.

Para la realización del estudio han utilizado más de 3000 frases cortas del tipo “vestidos

rojos”, “pantalones Calvin Klein”, etc, realizadas por personas de diferentes edades, sexo,

diferente ruido de ambiente, etc y los resultados que obtuvieron fueron que el motor de

reconocimiento de GOOGLE es el que mejor resultado de reconocimiento proporcionó.

Esta empresa publicó dos gráficas con los resultados de las pruebas de

reconocimiento. En una de las gráficas se mide la tasa de error en reconocimiento de

palabras. El motor que más baja tasa tiene de error en el reconocimiento es el de Google.

En la otra gráfica se mide el número de frases exactas reconocidas de forma exacta por

el motor de reconocimiento. Al igual que antes el motor de google es el que más frases

exactas reconoció.

Figura 48. Tasa de error en reconocimiento de palabras

Fuente: www.griddynamics.com

Page 69: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

66

Figura 49. Porcentaje de frases exactas reconocidas

Fuente: www.griddynamics.com

Utilizaremos el motor de reconocimiento externo de google para la realización del

presente proyecto.

4.3.2 Proceso de reconocimiento mediante servidor interno También es posible realizar el reconocimiento vocal a través de un servidor de

reconocimiento ubicado en la misma red interna donde reside el servidor asterisk. Para

ello es necesario utilizar un motor de reconocimiento que sea compatible con asterisk y

que disponga de reconocimiento en idioma español. Tras consultar en internet las

diferentes alternativas posibles, indicamos las más relevantes.

- Lumenvox: Es una empresa americana. Actualmente es el partner oficial de

digium para ofrecer ASR en asterisk. Require licencia.

- Verbio: Es una empresa española especializada en ofrecer motores de

reconocimiento para uso telefónico. La integración con asterisk está

certificada. Requiere licencia.

- Nuance: Es una empresa americana. Su motor de reconocimiento es muy

potente. Es difícil acceder a su forma de configuración para uso

experimental. Requiere Licencia

Page 70: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

67

- E-speak: Es de uso libre. Presenta el problema que para idioma español el

reconocimiento no es excesivamente potente.

- Omilia: Es una empresa griega que ofrece soluciones de reconocimiento

vocal y de lenguaje natural. Requiere licencia. Al igual que Nuance es muy

difícil acceder a la configuración para uso experimental ya que no ofrece un

portal para poder descargar su producto de reconocimiento.

En el presente proyecto usaremos también un servidor interno para el

reconocimiento de voz, del proveedor Verbio.

4.4 Alternativas para síntesis de voz en Asterisk Un sistema Text To Speech (Texto a Conversación), también llamado TTS, es una

aplicación que convierte un texto escrito a audio, permitiendo a un invidente visual

escuchar un documento, un email o incluso llamar a un número de teléfono y poder

escuchar una información que previamente alguien ha escrito.

Indicamos a continuación algunos TTS que funcionan en español y pueden

utilizarse con asterisk:

- Festival: Es una aplicación desarrollada principalmente en lenguaje C/C++ y

creada en la Universidad de Edinburgo (UK). Es capaz de reproducir

cualquier texto en audio, permitiendo escuchar un documento, etc. Es

software libre. Se basa en la tecnología concatenativa por difonos. En

idioma español es muy recomendable utilizar unos locutores diferentes

desarrollados a petición de la Junta de Andalucía y distribuidos libremente

bajo el nombre de “hispavoces”. Estos locutores desarrollados por la junta

de Andalucía son los que incorpora la distribución de asterisk Elastix para

Festival en Español.

- E-Speak: es software libre y es el motor de voz que ofrece accesibilidad a

invidentes en sistemas Linux. Es posible usarlo junto con asterisk en idioma

español.

- Verbio TTS: Con bastante mejor calidad y soporte, requiere licenciamiento.

Es uno de los motores de síntesis de voz más utilizados en el mundo

empresarial junto con asterisk.

- Google TTS: A través de AGI es posible utilizar el servicio de traducción de

google en el idioma español para reproducir una frase, posteriormente se

Page 71: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

68

descarga el fichero de audio reproducido, se convierte a un formato de audio

“entendible” por asterisk y se reproduce este fichero de audio.

- Loquendo TTS: una compañía italiana, es popular por ser de las primeras en

disponer de una demo pública. Fue comprada por la empresa Nuance en el

año 2011. Este software tiene diccionarios para español en varios acentos.

Loquendo TTS dispone de voces verdaderamente naturales que pueden leer

cualquier texto. Incorpora una voz clara y agradable, tiene base de datos

para masculino y femenino e incluso para distintos acentos de un mismo

idioma (Español Castellano-Argentino-Mejicano, Ingles Británico-Americano,

etc.). Tiene soporte para Windows y Linux. Su motor de transcripción es muy

potente.

En el presente proyecto utilizaremos la síntesis de voz proporcionada por el

servicio de Google TTS. Utilizaremos un script en perl para implementar la síntesis de voz

usando el servidor de traducciones de google.

También usaremos un servicio de síntesis de voz a través de un servidor interno

del proveedor Verbio.

Utilizaremos también el motor de síntesis Loquendo TTS en un equipo Windows

para generar las locuciones específicas que necesitaremos para la implementación

práctica del proyecto.

4.5 Implementación del reconocimiento vocal en asterisk

Inicialmente vamos a detallar el proceso de reconocimiento vocal haciendo uso

del servicio externo de reconocimiento vocal de Google, posteriormente se detallará el

proceso de reconocimiento vocal haciendo uso del servicio de reconocimiento vocal

interno del proveedor Verbio.

Para poder utilizar la API de reconocimiento vocal de google, es necesario obtener

una clave para poder realizar las peticiones HTTPS al servidor de reconocimiento de

google.

Para obtener la clave necesaria, es necesario registrarse en el grupo de

desarrolladores de Chronium. Para ello es necesario disponer de una cuenta en Gmail.

Page 72: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

69

Una vez que se dispone de una cuenta en Gmail la url en la que es posible

hacerse miembro del grupo de desarrolladores de chronium es la siguiente:

https://groups.google.com/a/chromium.org/forum/#!forum/chromium-dev

Chromium es el proyecto de código abierto que utiliza el navegador Google

Chrome para obtener parte de su código fuente.

Una vez que se ha realizado la inscripción al grupo de desarrolladores de

Chronium, es necesario crear un proyecto dentro del grupo de desarrolladores de Google,

para ello es necesario ir a la siguiente url

https://console.developers.google.com

Una vez que hemos creado el proyecto y le hemos dado un nombre, podemos

buscar “speech api” y activarla

Figura 50. Activación de la API de reconocimiento de Google

Posteriormente en la sección de credenciales podremos obtener la key a usar en

las peticiones de reconocimiento (omitimos el contenido de la key por seguridad)

Figura 51. Clave a usar en las peticiones https a la API de reconocimiento de Google

Page 73: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

70

Una vez que se dispone de una clave válida para el uso de la API de

reconocimiento vocal, el siguiente paso es comprobar el funcionamiento. Para ello

utilizaremos un fichero de audio grabado en formato .wav en cuyo contenido se dice:

"indique la convocatoria de la que desea obtener la calificación”. El objetivo es pasar al

motor de google el fichero de audio en formato .flac y que el motor de google devuelva el

texto transcrito correcto con el contenido del fichero de audio.

Antes de efectuar la prueba es necesario instalar en el sistema operativo dos

paquetes necesarios como dependencias, por una parte para que el sistema operativo

pueda codificar audio en formato flac y por otro un software llamado sox para poder pasar

de un formato .wav a formato .flac (necesario para que google pueda realizar la

transcripción a texto).

Free Lossless Audio Codec (FLAC) es un códec de audio que permite comprimir

audio digital sin pérdidas de forma que es posible reducir el tamaño del archivo de audio

sin que se pierda ningún tipo de información. El audio digital comprimido por el algoritmo

de FLAC se puede reducir de 50 a 60% respecto a su tamaño original. La desventaja es

que el archivo ocupa mucho más espacio del que se obtendría en caso de aplicar un

algoritmo de compresión con pérdida.

Para instalar las dependencias efectuamos los siguientes comandos:

apt-get -y install perl

apt-get -y install libwww-perl

apt-get -y install libjson-perl

apt-get -y install flac

apt-get -y install sox

Una vez instaladas inicialmente se convertirá con sox el fichero que se desea

convertir (en nuestro caso el fichero tiene el nombre “indicar_convocatoria.wav” y el

fichero convertido se almacenará en la ruta /tmp y tendrá el nombre grabación_asr.flac

Figura 52. Conversión de formato a .flac con sox

Page 74: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

71

Una vez realizada la conversión podemos ver el formato de ambos ficheros a

través del comando de Linux file

Figura 53. Formatos de ficheros de audio .wav y .flac

Una vez que disponemos del fichero de audio en formato .flac realizaremos

petición al servidor de reconocimiento de google para comprobar el valor devuelto con el

audio transcrito, para ello efectuamos el comando:

wget --post-file /tmp/grabacion_asr.flac --header='Content-Type: audio/x-flac; rate=8000' -

O - 'http://www.google.com/speech-api/v2/recognize?lang=es_ES&key=Clave'

Siendo la salida de dicho comando la mostrada en la figura 61.

Figura 54. Petición https a la API de reconocimiento de Google

Page 75: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

72

El resultado de la petición es una variable JSON devuelta con el siguiente

contenido:

{"result":[]}

{"result":[{"alternative":[{"transcript":"indique la convocatoria de la que desea obtener la

calificación","confidence":0.9627533},{"transcript":"invite la convocatoria de la que desea

obtener la calificación"},{"transcript":"índice la convocatoria de la que desea obtener la

calificación"},{"transcript":"Inditex la convocatoria de la que desea obtener la

calificación"},{"transcript":"indie te la convocatoria de la que desea obtener la

calificación"}],"final":true}],"result_index":0}

Donde la variable “transcript” inicialmente muestra la transcripción más probable

de contenido del fichero, en este caso el valor inicial es: “indique la convocatoria de la

que desea obtener la calificación". Dentro de la variable JSON también hay una variable

llamada confidence cuyo valor estará entre 0 y 1. Cuanto más se aproxime a 1 mayor

será la probabilidad de haber efectuado una transcripción correcta. En el ejemplo anterior

el valor de la variable confidence es 0.9627533 lo cual indica una probabilidad de acierto

muy elevada. De forma general si el valor de la variable confidence es superior a 0,90 la

transcripción se habrá efectuado de forma correcta en la mayoría de los casos.

JSON (JavaScript Object Notation) es un formato de texto ligero para intercambiar

datos. JSON es un subconjunto de la notación literal de objetos de JavaScript aunque

hoy, debido a su extensa adopción como alternativa a XML, es considerado un formato

de lenguaje independiente.

Realizamos varias pruebas de transcripción y comprobamos que el motor de

reconocimiento de google tiene una muy buena tasa de acierto para el reconocimiento,

realizando una transcripción correcta en la mayoría de los casos.

Una vez comprobado el correcto funcionamiento de la API de reconocimiento de

google el siguiente paso es realizar un script AGI que se encargue de realizar el

reconocimiento y almacenar los resultados de la transcripción y de la probabilidad de

acierto en dos variables y que el dialplan de asterisk pueda utilizarlas. Una variable se

llamará UTTERANCE y almacenará el valor del texto transcrito y otra variable se llamará

CONFIDENCE y almacenará el valor entre 0 y 1 con la probabilidad de haber efectuado

una correcta transcripción.

Page 76: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

73

Realizamos el script utilizando el intérprete de Perl. Una vez creado el script lo

dejamos en la ruta donde asterisk espera encontrar los scripts AGI (/var/lib/asteris/agi-

bin).

El flujo del proceso que ejecuta el script está representado en la figura 62

Figura 55. Etapas en script .AGI usado para el reconocimiento vocal

Para realizar el reconocimiento vocal a través de un servicio de reconocimiento

interno mediante el proveedor Verbio es necesario realizar las siguientes tareas:

- Descargar los componentes necesarios desde la web http://www.verbio.com

para ello es necesario registrarse como usuario. Posteriormente este

proveedor enviará un email con los datos de acceso para poder realizar la

descarga de los componentes necesarios.

- Compilar asterisk haciendo uso de las aplicaciones de verbio para realizar el

reconocimiento vocal

- Crear las gramáticas necesarias para realizar el reconocimiento vocal

específico que se desee implementar

- Configurar el dialplan de asterisk para hacer uso de las aplicaciones de

reconocimiento vocal de verbio.

Los componentes que será necesario descargar serán los siguientes:

Page 77: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

74

- Servidor de voz ASR & TTS verbio VoxServer cliente y servidor. En nuestro

caso descargaremos la última versión 9.04 para arquitectura de 64bits y para

el sistema operativo basado en debían/Ubuntu.

- Idioma de reconocimiento para español castellano. En nuestro caso

instalaremos la versión 9.04 para el sistema operativo basado en

debían/Ubuntu

- Locutores de síntesis en español castellano. En nuestro caso usaremos el

locutor Carlos con calidad telefónica a 8khz y el sistema operativo

debían/Ubuntu.

- Integración Verbio con Asterisk. En este caso se instalará la última versión 4.2

para el entorno debían/Ubuntu

Una vez descargados todos los componentes necesarios será necesario leer

detenidamente el fichero de descripción de instalación que existe en el fichero

descargado de integración de Verbio con asterisk. En este fichero se indica la forma de

efectuar la instalación de Verbio en un entorno Linux basado en debían/Ubuntu, la forma

de compilar asterisk para que pueda hacer uso de verbio y las aplicaciones de verbio que

pueden usarse en asterisk para implementar el reconocimiento de voz.

La instalación de los componentes de verbio en el sistema operativo se realiza de

la siguiente forma:

1. Dpkg –i verbio-engines_9.04_amd64.deb

2. Dpkg –i verbio-clients_9.04_amd64.deb

3. Dpkg –i verbio-asr-es_9.04_amd64.deb

4. Dpkg –i verbio-tts-carlos-eseb_9.04_amd64.deb

De esta forma ya estará instalado el servidor de reconocimiento vocal y text to

speech, el reconocimiento vocal en idioma español castellano y el locutor de síntesis

Carlos en idioma español.

Posteriormente será necesario compilar asterisk para que pueda hacer uso del

módulo de reconocimiento vocal y text to speech de Verbio. Para ello una vez que

descargamos la carpeta de integración de verbio y asterisk, tendremos que realizar las

siguientes acciones:

- Copiar el fichero 'app_verbio_speech.c' a la carpeta 'apps' de los ficheros

fuente de Asterisk situados en la ruta /usr/src/asterisk-13.10.0.

- Editar el fichero 'Makefile' de la carpeta /usr/src/asterisk-13.10.0/apps y añadir

justo antes de la etiqueta 'all' el siguiente contenido:

Page 78: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

75

MENUSELECT_DEPENDS_app_verbio_speech+=VOX

VOX_LIB=-lvoxlib

_ASTCFLAGS+=-DASTERISK_VERSION_NUM=130000

- Situarse en el directorio /usr/src/asterisk-13.10.0 y ejecutar el comando make

install

- Crear la carpeta de gramáticas que usará el motor de verbio

/var/lib/asterisk/verbio/gram

- Copiar el fichero 'verbio.conf' en la ruta /etc/asterisk. Se configurará este

fichero para que asterisk pueda hacer uso del servidor verbio Voxserver, del

reconocimiento en idioma español y del locutor de síntesis carlos en idioma

español castellano.

Una vez realizadas estas acciones es necesario iniciar el servicio de

reconocimiento vocal y text to speech de verbio. Este software requiere licenciamiento

aunque es posible utilizarlo en modo de evaluación en intervalos de 1 hora finalizado este

tiempo es necesario reiniciarlo para volver a tener 1 hora de reconocimiento y así

sucesivamente.

Para iniciar el servidor de reconocimiento en modo de evaluación se ejecutará el

comando

verbiod -e

Una vez iniciado el servidor de verbio será necesario reiniciar el servicio asterisk a

través de los comandos

/etc/init.d/asterisk stop

/etc/init.d/asterisk start

Una vez iniciado asterisk se podrá comprobar si las aplicaciones de verbio están

instaladas correctamente. Para ello es necesario realizar el comando de consola de

asterisk

Asterisk –rx “core show applications”

Y comprobar que asterisk tiene las aplicaciones disponibles para su uso

Page 79: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

76

Figura 56. Aplicaciones verbio en asterisk

Una vez que las aplicaciones de verbio están instaladas, lo siguiente es crear las

gramáticas necesarias para que el motor de reconocimiento de verbio pueda usarlas.

Una gramática de reconocimiento define el universo de posibles respuestas que el

sistema puede reconocer en un determinado momento. Es el subconjunto del “lenguaje”

aceptado por el reconocedor. Por lo tanto debe haber una gramática adecuada para cada

instante del diálogo entre la persona y la máquina. Una gramática especifica el

vocabulario de palabras que el sistema puede reconocer así como las posibles

secuencias en que éstas se pueden combinar.

Existen dos tipos de gramáticas. Por una parte gramáticas con listas de palabras

aisladas y por otra parte gramáticas ABNF (augmented Backus-Naur Form).

ABNF es un metalenguaje basado en BNF (Backus-Naur Form) pero consistente

en una sintaxis y reglas propias. Se utiliza en protocolos de comunicación bidireccional.

Está definido en la RFC 5234. BNF es una de las principales técnicas de notación para la

creación de gramáticas de reconocimiento.

La gramática de lista de palabras es la más sencilla para el reconocimiento del

habla. Verbio permite usar ficheros de texto consistentes en listas de entradas (cada una

Page 80: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

77

con una o más palabras), una por línea. Cada una de estas entradas se denotará como

palabra del vocabulario. Por ejemplo podemos editar un fichero llamado gram1.txt y

situarlo en la ruta /var/lib/asterisk/verbio/gram introduciendo el siguiente contenido:

Luís Fernández

José Pérez

Pepe Pérez

María Sancho

De esta forma el vocabulario estará formado por 4 palabras, una por cada línea.

En este caso cada palabra será el nombre y apellido.

Las gramáticas de reconocimiento también pueden verse como una estructura

basada en patrones que describen las posibles secuencias de palabras del vocabulario

válidas. Estas gramáticas especifican cómo se comporta el lenguaje natural en una

determinada tarea.

Las gramáticas de Verbio siguen la sintaxis descrita en la especificación de

gramáticas para el reconocimiento del habla (SRGS, del inglés Speech Recognition

Grammar Specification) por el W3C Speech Interface Framework

(http://www.w3c.org/TR/speech-grammar) en su forma Augmented BNF (ABNF).

En este tipo de gramáticas se define el patrón de palabras a reconocer, que

contiene una regla consistente en una expresión regular que contiene palabras,

referencias a otras reglas o combinaciones de ambas.

En nuestro caso será necesario implementar dos tipos de gramáticas. Por una

parte una gramática para el reconocimiento de los números de DNI (sin letra). Por otra

parte una gramática para el reconocimiento de los nombres de las asignaturas. En este

proyecto únicamente se configurará el reconocimiento para los nombres de asignaturas

de ingeniería telemática.

En el anexo 3 se detallará la creación de gramáticas ABNF, necesarias para la

implementación del reconocimiento vocal a través de la herramienta Verbio.

Finalmente es necesario configurar en el dialplan de asterisk las aplicaciones de

verbio para que asterisk pueda hacer uso de ellas. Las aplicaciones de verbio para

asterisk son las siguientes

Page 81: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

78

- VerbioLoadVcb: Carga en memoria un vocabulario

- VerbioUnloadVcb: descarga de memoria un vocabulario

- VerbioRec: Realiza un reconocimiento vocal. Antes de invocar esta aplicación

es necesario que el vocabulario este en memoria.

- VerbioPrompt: realiza síntesis de voz de una cadena de texto o de un fichero

de audio.

- VerbioPromptAndRec: efectúa tanto síntesis de voz como reconocimiento

vocal.

- VerbioStreamAndRec: Reproduce un fichero de audio y realiza reconocimiento

vocal

- VerbioLastErr: devuelve el último error de verbio

- VerbioInfo: Devuelve información sobre el motor de verbio

- VerbioFreeChannel: libera los recursos usados por verbio, tanto de memoria

como de licencias (en el caso que estén instaladas)

Finalmente al utilizar estas aplicaciones en asterisk es posible acceder al

reconocimiento a través de unas variables de canal en las que se almacena el nombre

del DNI y de la asignatura indicada por el llamante.

El esquema general para realizar el reconocimiento vocal a través de Verbio es el

siguiente

Figura 57. Reconocimiento vocal a través de Verbio

Page 82: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

79

Una vez implementado el reconocimiento vocal a través de Verbio es posible

realizar llamadas de prueba y comprobar el correcto funcionamiento.

Figura 58. Reconocimiento vocal a través de Verbio con gramática ABNF para DNI

Figura 59. Reconocimiento vocal través de Verbio con gramática ABNF para reconocimiento de

nombre de asignatura

Page 83: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

80

4.6 Síntesis de voz en Asterisk En Asterisk el motor de síntesis de uso libre es Festival. Para realizar la

instalación de festival en el sistema operativo es necesario efectuar los siguientes

comandos:

apt-get install -y festival

apt-get install -y festival-dev

Posteriormente lo más recomendable es instalar las voces desarrolladas por la

junta de Andalucía para Festival en su proyecto “hispavoces”. Hay desarrolladas dos

voces una masculina (Pedro) y otra femenina (Silvia). En nuestro caso usaremos las de

Silvia. Para acceder a los ficheros de descarga es necesario acceder a la siguiente url:

https://github.com/guadalinex-archive/hispavoces/blob/master/packages/festvox-

sflpc16k_1.0-1_all.deb

Posteriormente es necesario instalar el paquete descargado accediendo a la

carpeta donde se descargó y ejecutando el comando:

dpkg -i festvox-sflpc16k_1.0-1_all.deb

Posteriormente es necesario borrar el fichero /etc/festival.scm creado

automáticamente en la instalación del paquete anterior

cd /etc

rm festival.scm

Se utilizará en su lugar el genérico de Festival (festival.scm) situado en la ruta

/usr/share/festival.

Hay que considerar que al instalar el paquete DEB con la voz, esta queda

automáticamente instalada en la ruta:

/usr/share/festival/voices/spanish/JuntaDeAndalucia_es_sf_diphone

Conocida esta información, es necesario editar el fichero

/usr/share/festival/festival.scm e incluir al final de dicho fichero el siguiente contenido:

(set! voice_default ‘voice_JuntaDeAndalucia_es_sf_diphone) (define (tts_textasterisk string mode)

Page 84: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

81

(let ((wholeutt (utt.synth (eval (list ‘Utterance ‘Text string))))) (utt.wave.resample wholeutt 8000) (utt.wave.rescale wholeutt 5) (utt.send.wave.client wholeutt)))

(set! server_access_list ‘(“localhost\\.localdomain” “localhost”))

El parámetro voice_default es el nombre del paquete de voz que se desea

utilizar en festival, en nuestro caso voice_JuntaDeAndalucia_es_sf_diphone. El resto de

los parámetros son específicos como la frecuencia a 8000Hz y que el acceso sea desde

el propio PC, ya que festival estará instalado en el mismo servidor que asterisk.

El siguiente paso es copiar el fichero de autoarranque de festival al directorio

/etc/init.d para que arranque automáticamente el servidor festival cada vez que se inicie el

PC. Para ello se efectúan los siguientes comandos:

cp /usr/share/doc/festival/examples/festival.init /etc/init.d/festival

chmod +x /etc/init.d/festival

Antes de arrancar el servidor de Festival para Asterisk, es necesario añadir en el

fichero /etc/default/festival la siguiente línea:

RUN_FESTIVAL=yes

De esta forma ya se podrá iniciar Festival como servicio a través del comando:

/etc/init.d/festival start

Figura 60. Inicio del proceso servidor Festival

Para que el servicio festival arranque cada vez que se inicia el PC ejecutaremos

el siguiente comando

ln -s /etc/init.d/festival /etc/rcS.d/S99festival

De esta forma ya estará instalado, arrancado y disponible para su uso el servidor

de síntesis Festival.

El siguiente paso es comprobar que la centralita asterisk tiene cargado el módulo

de Festival para su uso. Para ello se efectuará el siguiente comando de consola de

asterisk

Page 85: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

82

Asterisk –rx “module show like app_festival.so”

Si en Status aparece “Running” significa que el módulo de festival está instalado

en asterisk y puede hacer uso de él.

Figura 61. Verificación de módulo de Festival instalado en asterisk

La aplicación que ofrece el módulo app_festival.so, se encarga de conectar al

servidor Festival, lanzar el texto que se desea sintetizar a voz, y recoger el audio

generado y enviarlo al canal activo.

La sintaxis de esta aplicación es la siguiente:

Festival(‘texto_a_reproducir’,[teclas_interrupción])

Un ejemplo de uso en el dialplan de asterisk sería el siguiente:

Exten => 222,1,Festival(‘Bienvenido al servicio de consulta telefónica’)

De esta forma se configuraría la extensión 222 para que realice una petición de

síntesis de voz de la frase ‘Bienvenido al servicio de consulta telefónica’ al servidor de

festival y enviar la respuesta de síntesis al canal activo de asterisk que invocó a la

aplicación Festival.

En la aplicación Festival también es posible definir alguna tecla de interrupción

que en caso que se pulse interrumpiría el proceso de reproducción de la síntesis de voz

solicitada. En el caso que el valor sea ‘any’ cualquier tecla que se pulse desde el terminal

que efectuó la llamada interrumpiría el proceso de síntesis.

Tras comprobar la calidad de síntesis con Festival vemos que no es buena,

siendo una voz robótica poco conseguida, por lo que hemos optado por no usarla en el

presente proyecto fin de grado.

Para la implementación de la síntesis de voz hemos usado por una parte el

motor de síntesis del proveedor verbio y por otra parte el servicio de Google translate.

Es posible utilizar el servicio de google Translate como un sistema Text-To-

Speech y usarlo con asterisk.

Page 86: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

83

A través de la url:

http://translate.google.com/translate_tts?tl=<idioma>&q=<texto_a_reproducir>.

Se puede enviar una petición de traducción en idioma español del texto que

deseamos reproducir. Una vez enviado Google devolverá un fichero con el contenido del

audio indicado.

Al igual que en el caso del reconocimiento vocal es posible implementar a través

de un script en perl la síntesis de voz a través del uso de la API de google translate.

El flujo del proceso que ejecuta el script es el siguiente

Figura 62. Etapas en script .AGI usado para la síntesis de voz

También es posible usar el motor de síntesis de voz del proveedor Verbio. Este

motor produce una síntesis de voz clara y agradable. Para realizar la síntesis de voz a

través de verbio se puede usar la aplicación VerbioPrompt de forma que un ejemplo de

síntesis es el siguiente

Exten => 444,1,VerbioPrompt(“Fundamentos físicos de la ingeniería”)

En la que asterisk al llamar a la extensión 444 ejecutaría la síntesis de voz de la frase

“Fundamentos físicos de la ingeniería” a través del motor de síntesis Verbio.

Page 87: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

84

Tras realizar pruebas con los tres motores de síntesis (Festival, Api de google Translate y

Verbio) vemos que el tanto la síntesis a través de la API de Google translate como de

Verbio ofrecen buenos resultados.

4.7 Registro de terminales SIP en asterisk Para poder utilizar la centralita asterisk es necesario utilizar al menos un terminal

para poder ejecutar llamadas a través de la propia centralita asterisk.

En el presente proyecto utilizaremos un Teléfono IP CISCO SPA 303 que

registraremos en la centralita asterisk a través del protocolo SIP.

Inicialmente es necesario configurar en asterisk un terminal con señalización SIP.

Este tipo de señalización se configura en el fichero sip.conf situado en /etc/asterisk.

Para las pruebas configuraremos la extensión 3001 en el fichero sip.conf con la

siguiente configuración

[3001]

type=friend

host=dynamic

username=3001

secret=password3001

callerid="ILDE" <3001>

context=extensiones-internas

disallow=all

allow=alaw

qualify=yes

canreinvite=no

Con esta configuración se está definiendo un terminal de tipo friend (para recibir y

emitir llamadas a través de asterisk) con IP dinámica cuyo nombre de usuario sip es 3001

cuya password sip es “password3001”, con la identificación “ILDE” en las llamadas

salientes. Las llamadas salientes por este terminal se efectúan a través del contexto

Page 88: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

85

llamado “extensiones-internas”. En este terminal todos los codecs están deshabilitados

excepto el códec G.711 ley A que en asterisk se denomina alaw. Está habilitada la opción

qualify=yes para que asterisk emita cada cierto tiempo un paquete SIP OPTIONS contra

el terminal y espere un paquete de respuesta, en tal caso en la consola de asterisk se

indicará OK y el tiempo en milisegundos desde que asterisk envío el paquete SIP

OPTIONS hasta que recibió la respuesta del terminal. La opción de canreinvite=no es

para que los paquetes RTP de las comunicaciones entre terminales pase por la centralita

asterisk.

Una vez realizada la configuración en el fichero sip.conf es necesario ejecutar el

comando de consola

Asterisk –rx “sip reload”

De esta forma asterisk releerá el fichero de configuración sip.conf.

El siguiente paso es conectar el teléfono IP a la red y configurarlo a través de su

interfaz web. Para conocer la dirección IP del teléfono es posible a través de los botones

del teléfono navegar hasta la opción de red y comprobar la dirección IP asignada. Por

defecto los teléfonos IP suelen estar configurados de fábrica con la opción de obtener

dirección IP a través de DHCP.

Una vez que se conoce la dirección IP del teléfono IP es posible conectarse a él

mediante la siguiente url

http://direccion_IP_telefono_IP

Una vez conectado es necesario ir a: admin login Advanced

Aparecerán varias secciones en la parte superior de la pantalla. Será necesario ir

a “Ext 1” y en la sección “Proxy and configuration” poner la dirección IP o nombre DNS

del servidor asterisk en la zona indicada como “proxy”.

Figura 63. Configuración de servidor SIP en teléfono IP Cisco SPA 303

Page 89: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

86

Posteriormente configurar el username y el codec indicados anteriormente en

asterisk. Para ello configurar la sección “suscriber information” con el nombre “3001” la

password sip indicada en asterisk la información de Display “ILDE” y el códec G.711 ley A.

Figura 64. Configuración de usuario SIP en teléfono IP Cisco SPA 303

También es importante establecer el parámetro de paquetización RTP a 20ms

(valor 0.020) en la sección SIP RTP parameters, ya que si no se usa este valor puede

haber problemas en la calidad del audio.

Figura 65. Configuración de parámetros RTP en teléfono IP Cisco SPA 303

Una vez realizada esta configuración aplicamos y salvamos los cambios en el

teléfono IP.

Cuando guardamos los cambios el teléfono IP debería haberse registrado al

servidor SIP, en nuestro caso el servidor asterisk. Para comprobar el registro, ejecutamos

el comando

Asterisk –rx “sip show peers”

Page 90: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

87

Si el registro del terminal sip a Asterisk se ha efectuado correctamente aparecerá

el terminal conectado con Status “OK”.

De esta forma este terminal ya está preparado para recibir y emitir llamadas a

través de la centralita asterisk mediante el protocolo SIP.

Figura 66. Registro correcto de terminal SIP IP Cisco SPA 303 en centralita asterisk

4.8 Proceso de conexión a un proveedor SIP Se ha utilizado un proveedor SIP para proporcionar una cuenta sip y un número

RTB asociado para que se pueda tener acceso al servicio implementado en la centralita

asterisk a través de la RTB.

El proveedor elegido ha sido Voz.com. Este proveedor SIP dispone de un servicio

llamado Trunk sip que tiene un coste de 9€ al mes + IVA más el coste por llamadas

salientes efectuadas.

A través de este servicio es posible crear una cuenta sip en nuestra centralita

asterisk que conecte con este proveedor para poder enviar y recibir llamadas VoIP a

través de la red de datos, siendo el proveedor Voz.com el encargado de actuar como

Gateway entre la red de datos y la PSTN. Este proveedor asocia un número RTB a la

cuenta sip contratada y proporciona los datos de conexión necesarios para que nuestra

centralita asterisk pueda registrarse correctamente contra ellos.

Inicialmente es necesario ponerse en contacto con su departamento comercial

para solicitar el servicio trunk sip. Ellos enviarán un documento solicitando varios datos

del titular que habrá que devolverles firmado por email o fax.

Una vez que se ha cumplimentado la ficha de alta con los datos necesarios, el

proveedor enviará un email con los datos de la cuenta sip para poder configurarlos en la

centralita asterisk.

En esta caso los datos de conexión que voz.com envío por email una vez dados

de alta fueron los siguientes (omitimos la información de la contraseña de la cuenta sip

por seguridad):

Page 91: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

88

Figura 67. Datos de registro SIP enviados por proveedor Voz.com

Por seguridad es posible solicitar al proveedor sip restringir el registro de la cuenta

sip a la IP pública que tendrá nuestra centralita asterisk. Esto es válido cuando se cuenta

con una IP pública fija de acceso a internet. Desde cualquier otra dirección IP pública fija

no será posible registrarse al proveedor.

Esto es útil por si se compromete el usuario y la password de nuestra cuenta sip

con dicho proveedor, para que no pueda ser utilizada de forma fraudulenta por otra

persona desde otro equipo.

En este mismo email el proveedor voz.com envía también otro fichero de texto con

los datos de acceso personales para acceder a un portal web con algunos datos

estadísticos básicos de las llamadas cursadas por el trunk sip.

El portal web de estadísticas del proveedor es accesible a través de la url

panel.voz.com y tiene el siguiente aspecto:

Page 92: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

89

Figura 68. Portal de estadísticas de la cuenta sip del proveedor Voz.com

En el email que envía el proveedor también aparece asignado el número RTB

asignado. Es posible solicitar un número de la provincia para el número RTB que se

desea contratar. En nuestro caso hemos solicitado un número RTB de la provincia de

Jaén. El número asignado ha sido el 953827425, por tanto este será el número RTB que

usaremos para el acceso al servicio de consulta de calificaciones desde cualquier número

RTB.

Para realizar la configuración en la centralita asterisk es necesario introducir en el

fichero sip.conf al final del mismo la siguiente configuración.

Figura 69. Datos necesarios en sip.conf para registro en proveedor SIP

Page 93: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

90

Comentar que de forma general es necesario registrar nuestra cuenta sip en el

sistema sip del proveedor, para ello es necesario incluir al final del fichero sip.conf antes

de la configuración de los terminales sip una línea de registro con la siguiente estructura

Register => usuariosip:passwordsip@host_del_proveedor_sip/usuariosip

Posteriormente es necesario crear el terminal sip en asterisk a partir de los datos

proporcionados por el proveedor.

En general los proveedores SIP suelen indicar la configuración a introducir en el

fichero sip.conf si les comentas que vas a configurar la cuenta sip en un servidor asterisk.

Una vez introducida esta configuración para que la centralita asterisk relea el

fichero sip.conf es necesario introducir el siguiente comando de consola

Asterisk –rx “sip reload”

Para comprobar si el proceso de registro se ha efectuado correctamente es

posible efectuar dos comandos de consola. Por una parte comprobar los peers

registrados existentes en la centralita asterisk mediante el comando:

Asterisk –rx “sip show registry”

Figura 70. Comprobación de registro con proveedor sip

Si el estado de registro es “Registered” el proceso de registro se ha efectuado

correctamente.

Por otra parte comprobaremos que la cuenta sip tiene una correcta conectividad

contra el sistema del proveedor, para ellos ejecutaremos el comando:

Asterisk –rx “sip show peers”

Figura 71. Comprobación de conexión de cuenta sip de proveedor

En el caso que el status indique OK y el número de milisegundos de retardo,

significa que la cuenta sip está correctamente configurada contra el proveedor.

Page 94: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

91

Una vez comprobados estos pasos ya se podrían realizar llamadas al número

RTB facilitado por el proveedor sip que debería entrar en la centralita asterisk.

En el caso que el registro o la conexión no se efectúen correctamente, lo más

conveniente es revisar la configuración de cuenta sip, comprobar que no existe ningún

tipo de firewall que esté cortando la salida a internet por el puerto de conexión al sistema

del proveedor (generalmente UDP 5060) y que el router de acceso a internet no tenga

activada la opción SIP_ALG. Esta opción SIP_ALG es una opción que incluyen routers de

hace varios años, pero que no implementa correctamente la configuración del protocolo

SIP, por tanto en caso que esté activada es recomendable desactivarla si se trabaja con

una centralita asterisk en esa red.

El esquema de la configuración es el siguiente:

Figura 72. Esquema de conexión con proveedor SIP y RTC

4.9 Creación de ficheros de audio personalizados Para la creación de ficheros de audio personalizados para ofrecer un

determinado servicio, ha sido necesario utilizar la herramienta Loquendo TTS disk

director. A través de esta herramienta es posible escribir frases de texto y convertirlas a

ficheros de audio entendibles por asterisk. Esta herramienta es útil para la generación de

ficheros de audio específicos para ofrecer un servicio determinado. En nuestro caso la

Page 95: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

92

hemos utilizado para generar todos los ficheros de audio necesarios en la interactuación

hombre-máquina para el proceso de consulta de las calificaciones de los alumnos.

La herramienta Loquendo TTS disk director se instala sobre sistema operativo

Windows, por lo que hemos utilizado otro PC para instalar este software y los ficheros de

audio generados los hemos copiado en el PC de la centralita asterisk.

Una vez instalado el software Loquendo TTS accedemos al programa “Loquendo

TTS director”. A través de este software es posible escribir texto y generar su

correspondiente fichero de audio en formato .wav siendo reproducible por asterisk.

Figura 73. Inicio de software Loquendo TTS Director

Este software dispone de varios locutores en castellano. Es posible escribir el

texto deseado y pulsar el botón “play” para reproducirlo. Después de ver los diferentes

locutores disponibles en castellano, decidimos elegir el locutor “Jorge” ya que nos parece

la voz más clara y entendible.

Figura 74. Interfaz gráfico del programa Loquendo TTS Director

Page 96: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

93

Para guardar el audio generado es necesario pulsar en File Save audio as y

guardarlo con codificación linear y con 8000Hz de frecuencia.

Figura 75. Ventana salvar audio en Loquendo TTS Director

También es posible guardar en un fichero el texto introducido que se sintetizó a

voz. Para ello ir a File save as: y almacenar el fichero con el nombre deseado

Figura 76. Ventana salvar texto en Loquendo TTS Director

Page 97: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

94

A través de esta herramienta hemos creado todas las locuciones necesarias

para ofrecer el servicio de consulta de calificaciones.

Posteriormente hemos copiado a través del protocolo SCP (Secure Copy

Protocol) las locuciones creadas al servidor asterisk a través de la herramienta winSCP.

En el servidor asterisk las locuciones personalizadas las hemos incorporado al directorio

/var/lib/asteris/sounds/es/particular. El directorio /var/lib/asteris/sounds/es/ es donde

asterisk espera encontrar los ficheros de audio en idioma español. Se ha creado la

carpeta particular para alojar en ella todas las locuciones específicas del servicio de

consulta de calificaciones y poder así diferenciarlas del resto de locuciones que usa la

centralita asterisk

4.10 Configuración del dialplan de la centralita asterisk Para ofrecer el servicio de consulta de calificaciones es necesario realizar las

configuraciones necesarias en la centralita asterisk.

Por una parte es necesario realizar la configuración necesaria en el dialplan de

asterisk, editando de forma conveniente el fichero extensions.conf. Por otra parte es

necesario editar el fichero func_odbc.conf para que asterisk pueda realizar las consultas

necesarias a la base de datos “universidad” para la consulta de las calificaciones.

Inicialmente es necesario configurar en asterisk el idioma español como idioma

por defecto. Para ello en el fichero asterisk.conf es necesario establecer la variable

defaultlanguage = es

Posteriormente es necesario reiniciar asterisk a través de los comandos:

/etc/init.d/asterisk stop

/etc/init.d/asterisk start

De esta forma asterisk utilizará los sonidos en español.

Posteriormente es necesario realizar la configuración necesaria en el fichero

extensions.conf para implementar el servicio de reconocimiento vocal.

Se definirá un contexto que se llamará “app_de_consulta_notas”. El contenido

de sus primeras líneas es el siguiente:

[app_de_consulta_notas]

Page 98: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

95

exten => 222,1,Answer

same => n,Set(Intentos_DNI=4)

same => n,NoOp(${Intentos_DNI})

same => n,PlayBack(Particular/Bienvenida1)

same => n(dni),PlayBack(Particular/indicar_DNI)

same => n,agi(rec_vocal.agi,es-ES,4,,NOBEEP)

same => n,Verbose(1,Lo que dijiste fue: ${utterance})

same => n,Verbose(1,La probabilidad de ser correcto es: ${confidence})

Revisando estas líneas se aprecia que en el contexto “app_de_consulta_notas”

se define la extensión 222 y en la primera prioridad se ejecuta la aplicación “Answer” que

descuelga el canal. Posteriormente se ejecuta la apliación Set que establece la variable

llamada Intentos_DNI al valor 4.

La aplicación NoOp no realiza ninguna acción simplemente se introduce para

que en los logs de consola de asterisk pueda verse el contenido de la variable

Intentos_DNI.

Posteriormente se ejecuta la aplicación Playback que reproduce un fichero de

audio, el fichero de audio está situado en la ruta /var/lib/asterisk/sounds/es/Particular y se

llama Bienvenida1.wav. En asterisk la ruta de los ficheros de audio es relativa al directorio

del idioma por tanto únicamente es necesario indicar Particular. Tampoco es necesario

indicar .wav en los ficheros de audio.

Después se ejecuta la aplicación agi que invoca al script rec_vocal.agi ubicado

en la ruta /var/lib/asterisk/agi-bin el cual tiene varios argumentos de entrada. Estos

argumentos son el idioma español indicado como es-ES, 4 segundos de silencio como

tiempo de timeout para detectar el fin de reconocimiento y que no se indique ningún tipo

de señal para iniciar el proceso de reconocimiento. El script establece la variable

Utterance con el reconocimiento transcrito a texto y la variable confidence con el valor

entre 0 y 1 de probabilidad de haber efectuado un reconocimento correcto.

La aplicación verbose es similar a NoOp, se utiliza para ver por la consola de

asterisk el contenido de las variables utterance y confidence que se establecen a través

del script .agi.

Page 99: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

96

Una vez realizada la explicación de la parte inicial y de las aplicaciones utilizadas

seguimos con las siguientes aplicaciones que ejecuta el dialplan que son las siguientes:

same => n,GoSub(subQuitarEspacios,Espacio,1(${utterance}))

same => n,Set(DNIsinEspacios=${GOSUB_RETVAL})

same => n(dnipordtmf),Verbose(1,La cantidad de caracteres que tiene el DNI

introducido es:

same => n(comprob-long_dni),GotoIf($[${LEN(${DNIsinEspacios})} < 7 ]?errDNI)

same => n,NoOp(La Longitud de DNI es: ${LEN(${DNIsinEspacios})})

same => n,GotoIf($[${LEN(${DNIsinEspacios})} > 8 ]?errDNI)

same => n,NoOp(La Longitud de DNI es: ${LEN(${DNIsinEspacios})})

same => n,PlayBack(Particular/documento_indicado_es)

same => n,SayDigits(${DNIsinEspacios})

La primera aplicación que aparece es GoSub. Esta aplicación se utiliza para

llamar a una subrutina, en este caso el nombre de la subrutina a la que se llama es

“subQuitarEspacios” esta subrutina tiene una extensión que se llama Espacio y la

prioridad de la subrutina a la que se desea invocar es la 1. Se le pasa como argumento a

la subrutina el valor de la variable ${utterance}.

Una subrutina se utiliza para evitar tener que estar escribiendo en el dialplan

tareas repetitivas. De esta forma solo es necesario escribir el dialplan que ejecutará la

subrutina una única vez y llamarla desde el dialplan a través de la aplicación GoSub

cuando se desee que el dialplan vuelva a realizar lo establecido por la subrutina.

En este caso la subrutina subQuitarEspacios se encarga de eliminar los

espacios entre dígitos en el reconocimiento del DNI de forma que el DNI queda

establecido con todos los dígitos en una variable.

En la siguiente instrucción del dialplan se ejecuta la aplicación set la cual

establece una variable llamada DNIsinEspacios al valor del contenido de la variable de

canal ${GOSUB_RETVAL}. Esta variable es una variable de canal especial a la que

asterisk establece un valor cada vez que se ejecuta una subrutina. El objetivo de esta

variable es enviar al dialplan esta variable con información sobre la ejecución de la

subrutina (en caso que sea necesario) para que pueda ser utilizada posteriormente por el

Page 100: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

97

dialplan. En el caso de la subrutina “subQuitarEspacios” en la variable

${GOSUB_RETVAL} se almacena el DNI sin espacios, el cual luego se pasa al dialplan y

se almacena en la variable DNIsinEspacios de la aplicación Set.

En la siguiente instrucción del dialplan se define la etiqueta “dnipordtmf”. El

objetivo de definir etiquetas es para que el dialplan posteriormente pueda volver a esta

instrucción en caso necesario. La aplicación verbose ya la comentamos anteriormente.

En este caso la variable: ${LEN(${DNIsinEspacios})} devuelve el número de caracteres

de la variable DNIsinEspacios.

Las siguientes aplicaciones realizan tareas ya comentadas. La última apliación

llamada SayDigits índica dígito a dígito los dígitos de la variable ${DNIsinEspacios}.

Posteriormente se efectúa una instrucción de condición llamada GotoIf y que de

forma general tiene la estructura:

GotoIf(Condición?destino_si_verdadero:destino_si_falso)

En el caso del dialplan se comprueba la longitud del dni reconocido y en el caso

que sea inferior a 7 el dialplan saltaría a la extensión con la etiqueta errDNI de esta

misma extensión (222) y este mismo contexto (app_de_consulta_notas). En el caso que

no se cumpla la condición al no estar definida la acción si falso el dialplan seguiría por la

siguiente instrucción.

El siguiente bloque de instrucciones del dialplan son las siguientes:

same => n,Read(Digito,Particular/pulse1_o_0)

same => n,NoOp(${Digito})

same => n,GotoIf($[${Digito} = 1]?:errDNI2)

same => n,Set(validaDNI=${VALIDNI_VALIDADNI(${DNIsinEspacios})})

same => n,GotoIf($["${validaDNI}"!=""]?:NoMatriculadouni)

En este grupo de instrucciones del dialplan, la primera de ellas utiliza la apliación

Read la cual se utiliza para almacenar el valor detectado por dtmf en la variable que se le

pasa como primer argumento, en nuestro caso la variable Dígito, y como segundo

parámetro se puede especificar un fichero de audio, en nuestro caso en el fichero de

audio pulse1_o_0 se indica que se pulse 1 si el DNI es correcto o 0 si no lo es. Esta

Page 101: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

98

instrucción se utiliza para ofrecer el mensaje de validación en el número de DNI

introducido almacenando el valor pulsado por dtmf en la variable Digito.

Si la variable dígito no es uno el dialplan salta a la etiqueta ErrDNI2 y si es 1 el

diaplan continúa por la siguiente instrucción.

En la siguiente instrucción se efectúa la apliación Set pero la forma de la variable

${VALIDNI_VALIDADNI(${DNIsinEspacios})} indica que esta variable accede a base de

datos a través del conector odbc. En el fichero func_odbc.conf existe la siguiente

configuración

[VALIDADNI]

prefix=VALIDNI

dsn=asterisk

readsql=SELECT DNI FROM ALUMNO WHERE DNI = '${ARG1}'

De esta forma la sección VALIDADNI utiliza un prefijo llamado VALIDNI y realiza

la consulta indicada en la tabla alumno a la que se le pasa un único parámetro el cual se

expresa como ${ARG1}. En el caso que haber pasado más parámetros los valores serían

${ARG2}, ${ARG3}, etc.

El parámetro que le enviamos a esta consulta en la aplicación

Set(validaDNI=${VALIDNI_VALIDADNI(${DNIsinEspacios})})

Es el valor de la variable ${DNIsinEspacios} y en el caso que la consulta

devuelva algún valor este quedará almacenado en la variable validaDNI

De esta forma ya hemos visto la forma en la que se realizan las consultas en

asterisk. Inicialmente es necesario definir cada consulta que se desea realizar por parte

del diaplan en el fichero func_odbc definiendo los parámetros que se utilizarán y en el

dialplan invocar a la consulta a través del nombre de consulta y prefijo definidos en el

formato indicado en el ejemplo.

Finalmente la validación del DNI se efectúa si la consulta devuelve algún valor,

lo que significará que en la tabla alumno hay algún DNI con los datos introducidos en la

consulta.

El contenido de las consultas definidas en el fichero func_odbc.conf para la

realización del proyecto además de la indicada anteriormente es el siguiente:

Page 102: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

99

[NUMERICA]

prefix=CALIF

dsn=asterisk

readsql=SELECT NOTA FROM ASIGNATURA WHERE NOMBRE = '${ARG1}'

AND DNIALUMNO = '${ARG2}'

[GENERAL]

prefix=CALIF

dsn=asterisk

readsql=SELECT CALIFICACION FROM ASIGNATURA WHERE NOMBRE =

'${ARG1}' AND DNIALUMNO = '${ARG2}'

De esta forma se configuran las consultas de asterisk a la base de datos.

Para ofrecer el servicio de consulta de calificaciones se van introduciendo

mensajes grabados con el flujo del servicio definido y se realizan las consultas necesarias

a la base de datos para ofrecer la calificación y la nota de la asignatura elegida para el

alumno con el DNI indicado hasta tener definidas todas las acciones posibles en el

contexto llamado app_de_consulta_notas.

Para poder probar desde el teléfono IP y llamar a la extensión 222 es necesario

añadir la siguiente línea en el contexto “extensiones-internas”

include => app_de_consulta_notas

Para ir depurando el código es necesario ir haciendo llamadas de prueba desde

el teléfono IP a la extensión 222 hasta tener el servicio operativo y con la funcionalidad

deseada.

Para que desde el número RTB asociado a la cuenta SIP del proveedor voz.com

se pueda acceder al servicio de consulta, es necesario crear el siguiente contexto con la

siguiente configuración en el fichero extensions.conf

[consulta_desde_RTB]

exten => _[*#%0-9].,1,Goto(app_de_consulta_notas,222,1)

Page 103: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

100

El contexto “consulta_desde_RTB” es el configurado en la cuenta sip creada en

sip.conf para el usuario sip de voz.com

En este caso en el contexto consulta_desde_RTB se ha realizado un pattern

matching para todos los números llamantes, a través de la expresión _[*#%0-9].

Posteriormente mediante la aplicación Goto realizamos un salto en el dialplan al contexto

app_de_consulta_notas, extensión 222 prioridad 1 para que el dialplan se ejecute desde

ahí.

5. RESULTADOS Y DISCUSIÓN El resultado del presente TFG ha sido la creación de un servicio telefónico de

consulta de calificaciones para los alumnos matriculados en la Universidad de Jaén.

El servicio de consulta desarrollado permite a sus usuarios realizar consultar sus

notas por vía vocal obteniendo la respuesta de la calificación y la nota obtenida en la

asignatura consultada desde el momento en el que estén almacenadas en la base de

datos

Para lograrlo, se ha hecho uso del protocolo SIP, el software asterisk,

reconocimiento vocal, síntesis de voz, creación de locuciones personalizadas y creación

y diseño de base de datos.

Por un lado, se han estudiado todos los procesos necesarios para realizar la

implementación, eligiendo el considerado más adecuado para su uso en asterisk en el

presente proyecto

Por otro lado, se han realizado todas las instalaciones y configuraciones

necesarias tanto en asterisk, como en la base de datos, creando scripts para el

reconocimiento vocal y realizando la configuración del dialplan para ofrecer el servicio de

calificaciones.

El servicio de consulta de calificaciones tiene el siguiente funcionamiento:

- Se solicitará al alumno que diga su número de DNI y realizará el

reconocimiento vocal del mismo. Posteriormente ofrecerá una verificación a

través de Text to speech y confirmación por dtmf del valor reconocido. Habrá

un total de 4 intentos para el servicio de reconocimiento del DNI los dos

primeros será a través de reconocimiento vocal y los siguientes serán a

través de reconocimiento de tonos DTMF

Page 104: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

101

- Se solicitará al alumno que diga el nombre de la asignatura de la que desea

obtener la información de la calificación y realizará el reconocimiento vocal

de la misma. Posteriormente ofrecerá una verificación a través de Text to

speech y confirmación por dtmf del valor reconocido. Habrá un máximo de

tres intentos para efectuar el reconocimiento vocal de la asignatura.

- La centralita solicitará al alumno que indique la convocatoria de la que desea

obtener la calificación, existiendo las convocatorias, ordinaria y

extraordinaria.

- La centralita asterisk inicialmente ofrecerá la información de la calificación

en la asignatura indicada por el alumno indicado, consultándola en la base

de datos. En esta información se indicará la calificación obtenida (suspenso,

aprobado, notable, sobresaliente o matrícula de honor).

- La centralita asterisk posteriormente indicará la nota numérica obtenida por

el alumno en la asignatura solicitada.

- Una vez ofrecida la información sobre la calificación, se ofrecerá un mensaje

indicando si se desea consultar la calificación de otra asignatura. A través de

dtmf se indicará si se desea consultar otra asigntura o se desea finalizar. En

caso de elegir la opción de finalización, se ofrecerá un mensaje de

agradecimiento por utilizar el servicio y se colgará el canal.

Si se accede a la consola de asterisk y se llama al número RTB configurado para

el acceso al servicio (953827425) pueden verse las acciones del dialplan que van

ejecutándose en cada instante de la comunicación. Al inicio de la comunicación se

ejecutan las aplicaciones indicadas en la sección 4.9

Figura 77. Datos de consola asterisk en inicio de llamada al servicio de calificaciones

Posteriormente se van ejecutando las diferentes subrutinas y se realiza el

proceso de reconocimiento vocal

Page 105: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

102

Figura 78. Ejecución de diaplan de asterisk en subrutina

También se aprecia la detección de los tonos DTMF

Figura 79. Detección de tonos DTMF

Vemos como se asignan a diferentes variables el resultado del reconocimiento

vocal de la asignatura indicada

Figura 80. Asignación a variable del resultado del reconocimiento de asignatura

Posteriormente se efectúa el tratamiento para la consulta a la base de datos y en

función de la información obtenida ofrecer las respectivas locuciones con la calificación

obtenida y con la nota numérica obtenida.

Page 106: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

103

Figura 81. Consulta a base de datos e información de resultados

Finalmente se ofrecer consultar otra asignatura y en caso negativo se cuelga el

canal, liberándolo

Figura 82. Consulta a base de datos e información de resultados

A través de la consola de asterisk es posible realizar debug de las aplicaciones

AGI a través del comando

Asterisk –rx “agi set debug on”

Una vez activada la opción de debug para los scripts AGI, es posible visualizar la

interactuación del script y asterisk y ver las variables que se van configurando en la

ejecución del script.

Page 107: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

104

Figura 83. Ejecución de script AGI de reconocimiento vocal

En el caso de ejecutar el reconocimiento vocal a través de la herramienta de

Verbio, al efectuar una llamada pueden visualizarse los diferentes mensajes generados

Figura 84. Ejecución de aplicaciones Verbio en Dialpla

En asterisk también es posible activar el modo debug en la consola, de forma

que aparezcan todos los módulos de asterisk que van actuando en el proceso de la

llamada. Este log se activa a través del comando:

Asterisk –rx “core set debug 10”

Page 108: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

105

Figura 85. Máximo debug activado en consola de asterisk

Desde la consola de asterisk también es posible visualizar los paquetes SIP,

para poder realizar tareas de debug sobre el protocolo SIP. Activar la visualización de los

paquetes SIP es necesario realizar el comando

Asterisk –rx “sip set debug on”

De esta forma se activaría el debug del protocolo SIP en todos los terminales

conectados, si se desea activar el debug SIP únicamente en un único terminal el

comando sería el siguiente

Asterisk –rx “sip set debug ip dirección_IP_terminal”

Se muestra a continuación el mensaje SIP INVITE recibido en la centralita

asterisk al realizar la llamada al número RTB 953827425 asociado a la cuenta sip del

proveedor voz.com. También se muestra la información sobre la descripción de sesión

(SDP) asociada.

Page 109: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

106

Figura 86. Mensaje SIP con SDP mostrado desde consola asterisk

En asterisk también es posible visualizar los paquetes de audio RTP activando el

debug en el protocolo RTP a través del comando

Asterisk –rx “rtp set debug on”

Al igual que para el protocolo sip es posible limitar el debug a un único terminal a

través del comando

Asterisk –rx “rtp set debug ip dirección_IP_terminal”

Page 110: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

107

Figura 87. Datos de paquetes RTP mostrados desde consola asterisk

Asterisk también permite mostrar información del protocolo de control de RTP

RTCP, para ello es necesario ejecutar el siguiente comando

Asterisk –rx “rtcp set debug on”

Al igual que para el protocolo rtp es posible limitar el debug a un único terminal a

través del comando

Asterisk –rx “rtcp set debug ip dirección_IP_terminal”

Figura 88. Datos de paquetes RTCP mostrados desde consola asterisk

Aunque desde la consola de asterisk es posible revisar información para realizar

debug en los protocolos que soporta, en el caso de que el servidor asterisk procese

muchas llamadas, es impracticable poder realizar tareas de debug de una llamada

Page 111: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

108

concreta ya que no existe una forma de filtrar los datos más allá de los filtros del sistema

operativo Linux en el caso que la información de la consola también se esté escribiendo

en un fichero de log.

Para poder realizar debug de los protocolos VoIP que maneja asterisk, se suele

utilizar la herramienta de Linux tcpdump. De esta forma es posible capturar el tráfico de

red que cursa por la interfaz de red del servidor asterisk y almacenar el contenido de la

captura en un fichero de texto. Un comando de ejemplo para la captura de paquetes

mediante tcpdump es el siguiente:

Tcpdump –n –s 1500 –w /tmp/cap1.cap

En este commando se capuran los datos en la interfaz de red del equipo y se

escriben en el fichero /tmp/cap1.cap. Para finalizar la captura es necesario pulsar

control+C.

Figura 89. Captura de tráfico de red con tcpdump

Una vez que se tiene el fichero con los datos de la captura es posible copiarlo en

un PC que tenga instalado Wireshark y examinar con detalle los protocolos que sean

necesarios. Con Wireshark se pueden realizar los filtros que sean necesarios y es una

herramienta excelente para examinar paquetes de red.

Figura 90. Datos SIP recogidos de servidor asterisk y visualizados con wireshark

Page 112: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

109

Wireshark también permite visualizar de forma gráfica los paquetes

intercambiados en una sesión SIP

Figura 91. Gráfico de análisis de señalización SIP en wireshark

También permite mostrar los datos de otros protocolos como RTP y RTCP

realizando los filtros que sean necesarios

Figura 92. Detalle de paquetes RTP mostrado a través de wireshark

Page 113: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

110

6. CONCLUSIONES El resultado del presente TFG ha sido la creación de un servicio telefónico de

consulta de calificaciones para los alumnos matriculados en la universidad de Jaén.

Para la consecución de dicho resultado se han llevado a cabo las siguientes

acciones:

- Instalación del servidor asterisk

- Instalación del motor de base de datos relacional Mysql

- Configuración del conector odbc en el servidor asterisk para el acceso a la

base de datos

- Estudio de diversas alternativas para efectuar reconocimiento vocal con

asterisk

- Estudio de diversas alternativas para efectuar síntesis de voz con asterisk

- Desarrollo de un script AGI escrito en lenguaje Perl para efectuar el

reconocimiento vocal a través de la API de reconocimiento de google

- Instalación del motor de síntesis Festival mejorado con las voces

desarrolladas por la Junta de Andalucía en su proyecto Hispavoces para su

uso por parte de asterisk.

- Desarrollo de un script AGI escrito en lenguaje Perl para efectuar peticiones

de síntesis de voz al servicio de google Translate

- Creación de varias locuciones personalizadas, mediante la herramienta

Loquendo TTS Director, necesarias para ofrecer el servicio de consulta de

calificaciones.

- Desarrollo del dialplan necesario en el servidor asterisk para implementar el

servicio de consulta de calificaciones por vía vocal.

- Configuración de terminales SIP, efecuando su registro en el servidor

asterisk para tener acceso al servicio.

- Configuración de una cuenta SIP ofrecida por un proveedor VoIP asociada

al número RTB 953827425 de acceso al servicio de consulta creado.

El ámbito de funcionamiento del servicio de voz diseñado es tanto a nivel de red

local la red local, registrando un teléfono IP a la centralita asterisk y llamando al número

222 de acceso al servicio, o bien llamando desde cualquier terminal telefónico fijo o móvil

al número RTB 953827425.

Page 114: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

111

Todos los objetivos marcados al inicio del TFG han sido cumplidos

profundizando en la utilización de la centralita asterisk para diseñar un servicio telefónico

de utilidad.

Por otro lado, se ha hecho un estudio detallado del proceso de reconocimiento

vocal y de síntesis de voz que además ha incluido el estudio de herramientas disponibles

actualmente para incorporar estos servicios de reconocimiento vocal y de síntesis de voz

en la centralita asterisk

Asimismo, se ha realizado un estudio y pruebas con éxito de la comunicación

entre un terminal SIP (Teléfono IP Cisco SPA 303) y la centralita asterisk. También se ha

utilizado un proveedor SIP para ofrecer un número RTP que pueda tener acceso a la

configuración del servicio diseñado en la centralita asterisk

Gracias al desarrollo llevado a cabo durante el periodo que ha durado la

realización del TFG, el autor del mismo ha desarrollado una serie de habilidades y características:

- Evolución de los conocimientos acerca de la programación del dialplan

asterisk.

- Aprendizaje sobre los procesos de reconocimiento vocal y síntesis de voz.

- Evolución de los conocimientos acerca de la programación en Perl.

- Aprendizaje y mejora sobre el diseño y funcionamiento de bases de datos

relacionales.

- Aprendizaje del funcionamiento la API de reconocimiento vocal de Google

- Aprendizaje del funcionamiento del motor de reconocimiento y TTS de

Verbio

- Aprendizaje de funcionamiento del motor de síntesis de voz Festival

- Aprendizaje de funcionamiento de la API de google translate

- Mejora de la capacidad de trabajo.

- Mejora de la capacidad de organización.

- Desarrollo de la capacidad de convertir indicaciones en acciones.

- Desarrollo de la capacidad de dar soluciones a problemas de distinta

dificultad.

- Realización personal.

Se han desarrollado un servicio de consulta de información por vía vocal que

puede ser de utilidad por los siguientes motivos:

Page 115: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

112

- Permite acceder de forma rápida a un servicio de consulta de información

por vía telefónica sin necesidad de disponer de conexión a internet

- Tiene facilidad de uso.

- Restringe la consulta de la información al usuario llamante, el cual debe

validarse mediante su DNI.

- Permite incorporar el servicio en múltiples entornos para la consulta de

calificaciones

Como líneas de futuro se podrían incluir las siguientes:

- Como mejora se podría plantear el montaje tanto de la centralita asterisk

como de la base de datos en alta disponibilidad, de forma que existan al

menos dos servidores que compartan el servicio asterisk y si uno de ellos

cae, el servicio no se vea afectado y pueda ofrecerse por el otro servidor

- Incorporar servicios adicionales a la consulta, que realicen además

operaciones de inserción y modificación en la base de datos, de esta forma

se podrían ofrecer diferentes servicios, por ejemplo de venta de entradas, de

reservas, etc. a través de un canal telefónico.

7. ACRÓNIMOS TFG: Trabajo Fin de Grado.

SIP: Session Initiation Protocol.

LAN: Local Area Network.

URI: Uniform Resource Identifier.

UA: User Agent.

UAC: User Agent Client.

UAS: User Agent Server.

SDP: Session Description Protocol.

VoIP: Voice over IP.

API: Application Programming Interface.

ASR: Automatic Speech Recognition.

Page 116: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

113

TTS: Text To Speech.

DTW: Dynamic Time Warping.

HMM: Hidden Markov Models.

RTP: Real Time Protocol.

RTCP: Real Time Control Protocol.

AGI: Asterisk Gateway interface.

JSON: JavaScript Object Notation.

FLAC: Free Lossless Audio Codec

IAX: Inter Asterisk eXchange

ODBC: Open DataBase Connectivity

ABNF: Augmented Backus-Naur Form

8. REFERENCIAS BIBLIOGRÁFICAS Asterisk The definitive Guide versión 4. Oreally

Asterisk The future of telephony versión 3. Oreally

Asterisk Advanced Course. Digium

Asterisk Gateway Inteface1.4 and 1.6 Programing. Nir SimioNovich. Packt Publishing

The Conversational Interface, Talking to Smart Devices. Michael McTear, Zoraida

Callejas, David Griol. Springer

Google speech API. Information and Guidelines. Travis Payton

Speech recognition for asterisk. http://zaf.github.io/asterisk-speech-recog/

Daniel Ortega Ufano. Goldfinch: Automatic Speech Recognition Platform

Pablo Marin Plaza. Síntesis de voz y reconocimiento del habla. Implementación en el

robot HOAP-3

Rosario Villarreal M.A, Herrera Vega F. El estándar VoIP. Redes y servicios de banda

Ancha. (2006). http://www.monografias.com/trabajos33/estandar-voip/estandar-voip.shtml

Page 117: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

114

Asterisk Architecture. Digium.

http://www.berklix.org/bim/talks/asterisk_overview_2007_01_17/asterisk-bim-17.01.07-

all/asterisk-bim-17.01.07-html/AsteriskBIM.html

Asterisk Advanced Course. Digium

X. Huang, A. Acero, H. Hsiao-Wuen; “Spoken Language Processing”, in Dr. R. Reddy, ed.,

New Jersey, Prentice Hall PTR, pp. 377-664, 2.001.

http://blog-archive.griddynamics.com/2016/01/automatic-speech-recognition-services.html

http://releases.ubuntu.com/14.04/

http://downloads.digium.com/pub/

http://www.improvisa.com/descargas/sonidos_esp_asterisk_11.tar.bz2

http://www.verbio.com/webverbiotm/html/reference/es/guide

Webminar: Verbio: Hablando con su máquina asterisk. Soluciones ASR y TTS

Verbio Software Reference. Guía del usuario

Verbio 9 Instalation Guide

RFC3261. (2002). Obtenido de https://tools.ietf.org/html/rfc3261

Ruano Ruano, I. (2013). Apuntes de la asignatura de Sistemas de Telefonía. Tema 5:

Arquitectura de VoIp SIP. Jaén, Jaén, España. Recuperado el 12 de Marzo de

2015

Introducción a la VoIP a través de Elastix. PFC Jose Álvaro Perera Domínguez (2013).

Page 118: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

115

ANEXO 1: ASTERISK El software de Asterisk está organizado a través de un conjunto de directorios,

algunos contienen información complementaria para la ejecución del programa, mientras

que otros, albergan ficheros de configuración que podrá editarse. El contenido de estos

ficheros de configuración determinará el funcionamiento de la centralita.

Los directorios se instalan por defecto en ubicaciones predeterminadas, aunque

es posible personalizar los directorios editando el archivo “asterisk.conf”.

A continuación se indican los directorios más relevantes:

- /etc/asterisk: Contiene los archivos relacionados con la configuración de

Asterisk, excepto la configuración de las interfaces hardware.

- /usr/bin: Programas ejecutables y scripts incluyendo asterisk, astman,

astgenkey y safe_asterisk.

- /usr/lib/asterisk: Objetos binarios específicos de la arquitectura de Asterisk.

- /var/lib/asterisk/modules: Módulos para aplicación, driver de canales, driver

de formato archivos, etc

- /usr/include/asterisk: Archivos de cabecera requeridos para construir

aplicaciones, drivers de canales y otros módulos.

- /var/lib/asterisk/agi-bin: Scripts AGI utilizados en el plan marcado por la

aplicación AGI.

- /var/lib/asterisk/astdb: La base de datos de Asterisk, mantiene información

de configuración. Este archivo nunca se modifica a mano, para ello, debe

usarse el comando "database" desde la línea de comandos de Asterisk.

- /var/lib/asterisk/sounds: Archivos de audio, mensajes de bienvenida, etc,

usados por las aplicaciones de Asterisk. Este directorio contiene a su vez

otros directorios con las iniciales de los respectivos idiomas, por ejemplo una

centralita asterisk que tenga instalados los idiomas de inglés y español

tendrán dos directorios uno llamado “es” que contendrá los ficheros de audio

en español y otra carpeta llamada “en” que contendrá los ficheros de audio

en inglés.

- /usr/lib/asterisk/modules: En este directorio se almacenan los módulos de

Asterisk que han sido compilados. Dependiendo de la versión de Asterisk,

se cargan todos los módulos disponibles o sólo los que se van a utilizar

realmente. También existe la posibilidad de seleccionar los módulos según

las necesidades mediante la edición del archivo de configuración

denominado “modules.conf”.

Page 119: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

116

- /var/spool/asterisk: Es directorio que almacena archivos generados por

Asterisk durante su funcionamiento. Dichos archivos pueden ser, por

ejemplo mensajes de audio grabados por el buzón de voz o grabaciones de

las llamadas realizadas.

- /var/log/asterisk: En este directorio almacenan los log de eventos generados

en la actividad de la centralita. El grado de información que se muestra en

los logs, es configurable a través de la edición del archivo logger.conf.

Una vez instalado asterisk hay diversas formas de arrancarlo que indicamos a

continuación:

- Iniciar el demonio directamente a través del comando /usr/sbin/asterisk

(como root).

- Iniciar en modo consola a través del comando asterisk –c (como root). Este

método se utiliza para realizar debugging de problemas de inicialización de

asterisk.

- Iniciar el demonio a través de los scripts de arranque de Linux, esta es la

opción más habitual. Los scripts de arranque se configuran automáticamente

cuando en la instalación de asterisk se efectúa el comando “make config”.

Los scripts de arranque inician el proceso asterisk una vez que arranca el

sistema operativo y lo finalizan en el caso de apagado. Una vez arrancado el

demonio asterisk es posible pararlo manualmente generalmente mediante el

comando “/etc/init.d/asterisk stop” y volver a iniciarlo manualmente mediante

el comando “/etc/init.d/asterisk start”.

Una vez arrancado el demonio asterisk como servicio, es posible conectarse a él

ya que dispone de una consola a través de la cual el posible realizar tareas de debug y

lanzar comandos para efectuar diversas acciones en los diferentes módulos de asterisk.

La forma de conectarse a la consola de asterisk es mediante el comando

“asterisk –rvvvvvv” donde r significa “reconnect” y las diferentes v significan la verbosidad

con la que se conectará a la consola de asterisk, en el caso anterior al haber 6 caracteres

v la verbosidad será de 6 en la conexión a la consola de asterisk.

Una vez realizado el comando anterior cuando se produzca la conexión a la

consola aparecerá el prompt *CLI>. De esta forma podremos introducir comandos de

consola a asterisk. También aparecerán mensajes en el caso que la consola esté

configurada para mostrar mensaje de procesamiento de llamadas

Page 120: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

117

Figura 93. Conexión a la consola de asterisk

En ocasiones la consola de asterisk muestra mucha información de eventos

especialmente si el servidor asterisk procesa simultáneamente muchas llamadas, en

estos caso la forma de ejecutar comandos de consola de asterisk sin necesidad de estar

conectado a la consola es mediante el comando

asterisk –rx “instrucción_de_consola_a_ejecutar”

De esta forma se ejecutará la instrucción de consola de asterisk sin tener el

terminal de Linux conectado a la consola de asterisk.

Los ficheros de configuración más relevantes de asterisk para la ejecución de

este proyecto son los siguientes:

- asterisk.conf: fichero donde se ubican todos los ficheros de Asterisk

(ficheros de log, de configuración...), el idioma por defecto de asterisk, etc.

- sip.conf: es el fichero donde se definen las extensiones que se registrarán

en la centralita asterisk.

- extensions.conf: fichero donde se configura todo el dialplan de la centralita

centralita asterisk. Es el corazón de Asterisk y el fichero más importante.

- Logger.conf: fichero que define los logs que mostrará asterisk en la consola

de asterisk y los ficheros donde se guardarán en caso que se necesite

exportar los eventos de asterisk a ficheros de texto.

- Res_odbc.conf: fichero donde se configuran los parámetros que varios

módulos de asterisk utilizarán para conectarse a una base de datos a través

de odbc.

- Func_odbc.conf: Es el fichero en el que se definen las consultas y acciones

SQL que se usarán en el dialplan de asterisk.

Los ficheros de configuración de asterisk están ubicados por defecto en el

directorio /etc/asterisk. Además de los ficheros mencionados anteriormente en este

directorio hay muchos más ficheros de configuración, cada uno de ellos permite realizar

Page 121: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

118

diferentes configuraciones para diferentes módulos de asterisk (por ejemplo el fichero

voicemail.conf contiene parámetros para configurar el buzón de voz de extensiones, el

fichero meetme.conf contiene parámetros para configurar las conferencias de asterisk,

etc). Por defecto cada fichero cuenta en su interior con información sobre su uso y

diversas alternativas de configuración.

Registro de terminales Para registrar un terminal en asterisk es necesario crear la configuración del canal

de comunicación determinado entre asterisk y el teléfono dependiendo de qué tipo de

señalización utiliza el propio teléfono que se desea registrar. En función del tipo de

terminales será necesario incluir la configuración necesaria en el archivo o archivos

necesarios. Indicamos a continuación los tipos de registro más habituales:

- Si el terminal a conectar implementa señalización a través del protocolo SIP

(Sessión Initiation Protocol) será necesario crear una cuenta en el fichero

sip.conf

- Si el terminal a conectar implementa señalización a través del protocolo

IAX2 (Inter Asterisk eXchange versión 2) será necesario crear una cuenta en

el fichero iax.conf.

- Si el terminal a conectar implementa señalización a través del protocolo

H323 será necesario crear una cuenta en el fichero h323.conf

- Si el terminal a conectar es un teléfono analógico será necesario configurar

la línea analógica en el fichero chan_dahdi.conf y configurar el hardware

conectado al servidor que ofrece el acceso analógico en el fichero

system.conf

Los terminales más habituales que suelen conectarse a asterisk implementan la

señalización a través del protocolo SIP. Una configuración de un terminal SIP es la

mostrada a continuación, cuya configuración se efectúa en el fichero sip.conf

En este ejemplo se configura un terminal al que se le crea una cuenta llamada

“ts_polycom” al que se conecta un terminal de tipo friend que tendrá una dirección IP

dinámica cuyas llamadas entrarán en el contexto llamado “users” (que debe estar

Page 122: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

119

configurado en el fichero extensions.conf) y cuya contraseña sip es “donttell”. En los

ficheros de configuración de asterisk si se utiliza el carácter “;” asterisk ingnorará el

contenido posterior a dicho carácter en la línea donde aparezca.

En el propio terminal que se desee registrar a asterisk se deberá configurar una cuenta

sip con los datos de registro configurados previamente en el servidor asterisk y

apuntando a dirección IP o DNS del servidor asterisk.

Los tipos de terminales que pueden utilizarse en asterisk son de 3 tipos:

- Users: Para terminales que efectúan llamadas a asterisk

- Peers: Terminales a los que asterisk envía llamadas

- Friends: Terminales que son tanto users como peers

Habitualmente el tipo de terminal más utilizado por simplicidad es type=friend.

Adicionalmente a los parámetros indicados en el ejemplo anterior, es habitual definir en

las cuentas de los terminales muchos más parámetros, como el códec a utilizar, el

protocolo a usar para implementar dtmf, etc.

Dialplan En el plan de numeración, conocido como dialplan, se almacenan todas las

acciones que realiza la centralita asterisk en las llamadas.

El dialplan es muy importante en Asterisk, ya que él se define cómo gestiona

Asterisk la entrada y la salida de llamadas. Se compone de una lista de instrucciones que

que se ejecutan hasta completar una llamada. A diferencia de los sistemas telefónicos

tradicionales, el dialplan de Asterisk es fácilmente personalizable ya que se crea

mediante la edición de ficheros de texto introduciendo una configuración determinada.

El dialplan se compone de cuatro elementos principales: los contextos, las

extensiones, las prioridades y las aplicaciones. En los siguientes apartados se realiza

una descripción de cada una de ellas.

El dialplan, está almacenado en el archivo de texto extensions.conf. En este

archivo, a las extensiones ejecutan ciertas acciones, cada extensión pertenece a un

contexto, ya sea contexto por defecto o un contexto específico que se haya creado.

Todos los usuarios conectados a Asterisk pertenecen a un contexto, especificado en el

archivo de configuración de los respectivos usuarios. En este fichero es donde Asterisk

encontrará el contexto asociado a cada usuario.

Page 123: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

120

Contextos El dialplan se divide en bloques llamados contextos. Los contextos determinan el

comportamiento para un grupo de extensiones. Una extensión que se define en un

contexto es completamente independiente de otras definidas en cualquier otro contexto, a

menos que exista una configuración por la cual la llamada pueda pasar de un contexto a

otro. Los contextos se referencian con un nombre que se indica entre corchetes.

Todas las instrucciones situadas después de la definición de un contexto

pertenecen a ese contexto, hasta el siguiente contexto que se defina. Al comienzo del

dialplan, hay dos contextos especiales llamados “general” y “globals”.

El contexto representa uno de los parámetros principales a la hora de crear un

canal, que supone la base del funcionamiento de la centralita.

En la configuración del dialplan es necesario tener cuidado con la configuración

de los contextos ya que es posible que en una llamada se produzca un bucle infinito en el

caso que una llamada vaya pasando de un contexto a otro. En el caso que la centralita

esté configurada para almacenar los logs de las llamadas efectuadas, la existencia de

bucles en el dialplan, puede provocar una escritura masiva de información de logs en el

disco teniendo impacto en la centralita si el particionado del disco no está correctamente

efectuado y los logs están en la partición principal /.

Figura 94. Relación entre contextos en sip.conf y extensions.conf

Fuente: Asterisk: The definitive Guide

Extensiones Dentro de cada contexto pueden existir una o más extensiones. En una

extensión se definen una o más instrucciones que ejecutará el motor de asterisk

Page 124: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

121

La sintaxis para la definición de una extensión es la palabra exten seguida de

una flecha formada por los signos igual y mayor, de la siguiente manera:

Exten =>

Si una misma extensión ejecuta más de una acción, a partir de la segunda

acción en adelante se utiliza la palabra same en lugar de exten.

Same =>

Seguidamente se pone el nombre o número de la extensión. Cuando se trata de

sistemas de telefonía, se tiende a pensar en las extensiones como en los números que

permiten llamar de un teléfono a otros, sin embargo en Asterisk tiene muchas más

funcionalidades.

Una extensión completa se compone de tres elementos:

- El nombre o número de la extensión.

- La prioridad. Cada extensión puede ejecutar varias instrucciones, a cada

instrucción se le asigna una prioridad.

- La aplicación o comando que ejecuta alguna acción.

Estos tres componentes están separados por comas, de la siguiente manera:

exten = > nombre,prioridad,aplicación()

En el caso de extensiones con más de una acción, se usará:

Same => n,aplicación()

En estas líneas no se indica la extensión y asterisk utilizará la extensión indicada en la

línea exten => anterior.

Asterisk también cuenta con unas extensiones especiales que se utilizan para diferentes

tareas. Estas extensiones son las siguientes:

- Extensión i: Es la extensión de entrada inválida. Se suele utilizar tras la

aplicación background para que las llamadas puedan entran a alguna

extensión en caso que el llamante introduzca una extensión que no esté

definida en la IVR.

- Extensión t: Es la extensión de timeout en respuesta. Se suele utilizar tras la

aplicación background para que las llamadas puedan entran a alguna

Page 125: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

122

extensión en caso que el llamante no introduzca una extensión en un tiempo

determinado.

- Extensión T: Es la extensión que indica Timeout Absoluto. Se suele usar

cuando se desea que las llamadas que cursa asterisk tengan una duración

máxima determinada, por ejemplo puede establecerse que cada llamada

tenga como máximo una duración de 2 horas.

- Extensión h: Es la extensión para colgar. Se suele utilizar para colgar en

canal a través de esta extensión. Invoca a la aplicación hangup por tanto es

similar a usar dicha aplicación.

- Extensión s: La extensión de comienzo (start). Se suele usar para tener una

alternativa donde enviar las llamadas en caso que el llamante no presente el

callerID.

- Extensión o: La extensión Operador. Se usa para el voicemail

- Extensión a: La extensión asistencia. Se usa para el voicemail

Prioridades Cada extensión puede ejecutar varias instrucciones, de forma que cada

instrucción tiene asignada una prioridad. Cada prioridad se enumera secuencialmente,

comenzando con 1.

En el ejemplo presentado se especifica una extensión que define primero

responder al teléfono, lo cual se refleja con la prioridad número 1 y, a continuación se

realizan varias tareas, y finalmente se cuelga.

Es importante asegurarse de que las prioridades empiecen en 1 y se numeren

consecutivamente ya que si se salta una prioridad, Asterisk no continuará.

Sin embargo, para la definición de extensiones con un número elevado de

prioridades, a partir de la versión 1.2 de Asterisk, se introdujo el concepto de la prioridad

n. La ventaja que presenta consiste en que cada vez que Asterisk se encuentra con esa

prioridad, se encarga de seleccionar el número de prioridad anterior y le añade una

unidad. Esta funcionalidad permite realizar modificaciones en el dialplan de una forma

más fácil y cómoda.

Page 126: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

123

A partir de la versión de asterisk 1.6 a partir de la prioridad 2 en adelante se

utiliza la orden same => de forma que las instrucciones anteriores a partir de asterisk 1.6

serían

También se pueden introducir etiquetas a las prioridades, de esta forma será posible

acceder a una prioridad concreta de una determinada extensión.

Aplicaciones Las aplicaciones son una parte muy importante del dialplan. Cada aplicación

realiza unas acciones en el canal actual. Estas acciones pueden ser la reproducción de

una locución, la aceptación de un tono de entrada, colgar la llamada, etc.

Algunas aplicaciones, como la de Answer() y Hangup(), no necesitan parámetros

para ejecutar su función. Otras aplicaciones sí requieren parámetros para que puedan

utilizarse.

Un ejemplo en el que se muestra la aplicación Playback, la cual reproduce un

fichero de audio que se le pasa como parámetro, es el siguiente:

Variables En asterisk existen 3 tipos de variables, las variables globales, las variables de

canal y las variables de entorno. Su objetivo es poder almacenar información que será

usada posteriormente por el dialplan.

Variables globales

Page 127: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

124

Estas variables serán visibles por todos los canales de asterisk. Se definen bajo

el contexto [globals] situado en el fichero extensions.conf.

En el ejemplo anterior se define la variable global LEIF al valor

“SIP/0000FFFF0001”.

La forma en la que asterisk accede al contenido de estas variables es mediante

${nombre_variable_global} en el dialplan

Variables de canal Estas variables son específicas para cada canal. Aunque el nombre de la

variable sea el mismo para llamadas de diferentes canales, su contenido apunta a

direcciones de memoria diferentes para cada canal.

La forma en la que asterisk accede al contenido de estas variables es mediante

${nombre_variable_de_canal} en el dialplan.

Un ejemplo de uso de variable de canal es el siguiente:

Variables de entorno Estas son las variables de entorno del sistema operativo Linux. Desde asterisk

está disponible el acceso a estas variables por si resultara utilidad para ejecutar alguna

acción que requiera del valor de alguna de las variables de entorno.

La forma en la que asterisk accede al contenido de estas variables es mediante

${ENV(nombre_variable_de_entorno)} en el dialplan.

Búsqueda por expresiones Asterisk permite crear una única extensión en el dialplan que sea válida para

diferentes números, esta técnica se le conoce como pattern matching. La sintaxis es la

siguiente:

Page 128: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

125

La extensiones que utilizan pattern matching siempre empiezan con el signo “_”

esto le indica a asterisk que se utilizará una expresión para encontrar la extensión en

lugar del nombre o número explícito de la extensión.

Después del signo “_” se pueden usar uno o más caracteres como los siguientes:

- X: válido para cualquier dígito entre el 0 y el 9.

- Z: válido para cualquier dígito entre el 1 y el 9.

- N: valido para cualquier dígito entre el 2 y el 9.

- Valores de números entre corchetes: por ejemplo [15-7] será válido para un

dígito que sea 1, 5, 6 ó 7.

- . (un punto): es un comodín, significa uno o más caracteres.

- ! : es otro comodín, significa cero o más caracteres

Un ejemplo de uso de pattern matching es el siguiente:

Integración de base de datos con asterisk Poder Integrar asterisk con bases de datos relacionales, es uno de los aspectos

fundamentales para poder construir servicios de envergadura. La potencia de las bases

de datos habilitará el acceso al dialplan de asterisk a datos modificados dinámicamente

por la base de datos.

Inicialmente será necesario instalar el motor de la base de datos a utilizar. Es

posible utilizar diversos motores de bases de datos, en el presento proyecto utilizaremos

el motor Mysql ya que no requiere licenciamiento.

Una vez instalado el motor de base de datos será necesario habilitar y conceder

los permisos necesarios al usuario con el que asterisk accederá a la base de datos.

Posteriormente será necesario instalar y configurar el conector odbc. Este

conector es una capa de abstracción que hace posible que asterisk pueda comunicarse

con diversos motores de bases de datos.

Una vez que el conector odbc está correctamente instalado y configurado es

necesario configurar los módulos necesarios de asterisk para que pueda tener acceso a

la base de datos a través del conector odbc. Los ficheros de configuración necesarios

para realizar la configuración de los módulos son: res_odbc.conf y func_odbc.

Page 129: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

126

En el fichero res_odbc.conf localizado en /etc/asterisk se definen las conexiones

odbc que utilizará asterisk contra bases de datos. En este fichero se configuran los

parámetros necesarios que utilizarán varios módulos de asterisk para conectarse a la

base de datos.

Un ejemplo de configuración del fichero res_odbc.conf es el siguiente:

En este ejemplo se usa el nombre de conexión llamado “asterisk” indicado entre

corchetes, este nombre es el que se usará en el fichero de configuración func_odbc.conf

para referirse a esta conexión a través del conector odbc. El parámetro dsn apunta a la

conexión contra la base de datos definida en el fichero de configuración odbc para el

sistema operativo (/etc/odbc.ini). Se definen el usuario y password de acceso a la base

de datos y es posible limitar el número de conexiones a la base de datos mediante el

parámetro limit.

El siguiente diagrama muestra las relaciones entre los distintos ficheros usados

para la conexión de asterisk a la base de datos a través del conector odbc.

Page 130: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

127

Figura 95. Relación entre func_odbc.conf, res_odbc.conf, /etc/odbc.ini (Linux ODBC) y la conexión a la bbdd

Fuente: Asterisk: The definitive guide

En el fichero func_odbc.conf se definen las consultas SQL necesarias a las que

también se les proporcionan un nombre y un identificador. En el dialplan se podrá

acceder a la consulta necesaria a través del uso del nombre y del identificador y

almacenar el resultado de la consulta en una variable de canal.

Un ejemplo de configuración del fichero func_odbc.conf es el siguiente:

[GENERAL]

prefix=CALIF

dsn=asterisk

readsql=SELECT CALIFICACION FROM ASIGNATURA WHERE NOMBRE =

'Programación 1' AND DNIALUMNO = '26234565'

Page 131: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

128

En este ejemplo definimos el nombre de la consulta como “GENERAL” y

asociamos el identificador CALIF

El acceso al valor devuelto por dicha consulta desde el dialplan es mediante la

aplicación Set que asigna el valor a una variable que se desee.

Same => n,Set(nota_general=${CALIF_GENERAL()})

Asterisk Gateway Interface La interfaz AGI de asterisk proporciona una interfaz común de acceso a

programas externos para que asterisk pueda hacer uso de ellos y obtener información.

AGI se usa principalmente para manejar lógica avanzada o acciones que

asterisk no es capaz de realizar por sí mismo o bien para simplificar tareas que pueden

realizarse mediante otros lenguajes de programación como bash, perl, pynton, etc de

forma más eficiente y sencilla que desde el propio asterisk.

Figura 96. Arquitectura de AGI

Fuente: Asterisk Gateway Inteface1.4 and 1.6 Programing

Los scripts AGI utilizan dos canales estándar de comunicación en Linux para

comunicarse con asterisk, estos canales son STDIN (Estándar input) y STDOUT

(estándar output). Estos canales son la forma por la cual los programas agi leen

Page 132: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

129

infomación desde asterisk a través de STDIN, ejecutan una serie de acciones y escriben

información de retorno a asterisk a través de STDOUT.

Los scripts AGI ejecutan acciones determinadas, por ejemplo acceder a un

sistema externo para obtener información, almacenarla en variables y el contenido de

estas variables enviarlo a asterisk a través del canal estándar STDOUT.

El flujo de ejecución de entre asterisk y los programas AGI es el siguiente

Figura 97. Flujo de procesamiento entre asterisk y un script AGI

Fuente: Asterisk Gateway Inteface1.4 and 1.6 Programing

Page 133: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

130

ANEXO 2: DESCRIPCIÓN DE PROTOCOLOS SIP Y RTP

El protocolo SIP SIP es un protocolo de señalización del nivel de aplicación definido por la IETF

en la RFC 3261 para la creación, modificación y terminación de sesiones sobre una red

IP. El término sesión podría ser descrito como un intercambio de información multimedia

entre varios participantes. Una vez que se establece la comunicación, dicha información

multimedia puede ser transportada mediante otros protocolos como RTP/RTCP (Znaty,

Dauphin, & Geldwerth, 2005).

Figura 98. Protocolos

Fuente: Ruano Ruano 2013

El protocolo SIP está basado en un modelo cliente-servidor. El cliente realiza

solicitudes/peticiones1 (requests) al servidor y, éste, da respuestas (responses) a dichas

solicitudes.

En la arquitectura SIP, los usuarios son identificados por un Identificador de

Recursos Uniforme (Uniform Resource Identifier, URI). Los URI’s SIP identifican recursos

de comunicación y contienen suficiente información para iniciar y mantener una sesión de

comunicación con dicho recurso. Un posible ejemplo sería sip:[email protected], donde

anónimo se correspondería con la identidad del usuario o el recurso en el host al cual se

dirige la petición, y donde ujaen.es sería el dominio o la fuente que proporciona el recurso.

Las funciones del protocolo SIP podrían agruparse en dos:

- Creación, modificación y terminación de sesiones.

- Localización de usuarios.

1 De ahora en adelante, se usarán indistintamente los términos solicitud y petición.

Page 134: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

131

En SIP se pueden encontrar dos tipos de equipos:

- Terminales: equipos finales que usan los usuarios. Tienen dos componentes

fundamentales para operar como Agentes de Usuario (UA):

o Agente de Usuario Cliente (UAC): aplicación que permite a un

terminal enviar mensajes SIP y aceptar respuestas.

o Agente de Usuario Servidor (UAS): aplicación que permite a un

terminal recibir solicitudes SIP y devolver respuestas en nombre del

usuario.

- Servidores: Equipos intermedios. Pueden ser de 3 tipos:

o Servidor de registro: acepta peticiones de registro de clientes (UAC)

y mantiene registro de direcciones de cada usuario.

o Servidor proxy: recibe solicitud de cliente (UAC), la analiza y decide

el servidor al que se la envía.

o Servidor de direccionamiento: recibe solicitud de cliente (UAC) y

responde con la/s dirección/ones donde la debe enviar.

Los mensajes SIP son mensajes de texto que se envían entre cliente y servidor.

Cualquier intercambio de mensajes en SIP está organizado en solicitudes y respuestas.

Se componen de una línea de inicio, una cabecera y, si se requiere, un cuerpo del

mensaje.

Figura 99. Estructura del mensaje SIP

Fuente: Ruano Ruano 2013

Page 135: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

132

Existen seis métodos de solicitud SIP definidos por la RFC 3261 (Sinnreich &

Johnston, 2006):

- REGISTER: Usado para que un cliente registre su dirección IP (localización)

en un servidor SIP.

- INVITE: Se usa para invitar a participar en una sesión. En el cuerpo del

mensaje de incluyen parámetros necesarios como el asunto de la llamada o

el códec soportado. El llamado responderá incluyendo los suyos.

- ACK: El cliente (llamante) confirma al servidor (llamado) que ha recibido la

aceptación a la invitación a participar en la llamada. Sólo se usa tras

solicitudes INVITE.

- BYE: Usado para terminar una sesión. Se envía cuando cuelga el usuario.

- CANCEL: Usado para cancelar una solicitud pendiente de respuesta.

- OPTIONS: Se usa para que un UA solicite información a un UAS sobre sus

capacidades (codecs soportados, tipos de contenido, etc.).

Figura 100. Línea de solicitud

Fuente: Ruano Ruano 2013

Además, existen otros métodos que son extensiones a SIP y son definidos en

otras RFCs. Entre ellos, se encuentra el método MESSAGE, el cual indica el transporte

de un mensaje instantáneo.

Existen seis clases de respuestas SIP: (Escalada Espinoza, 2012)

Page 136: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

133

- 1xx: Respuesta de información. El requerimiento ha sido recibido y está en

fase de tratamiento.

- 2xx: Respuestas de éxito. El requerimiento ha sido recibido, entendido y

aceptado.

- 3xx: Respuestas de redirección. La llamada requiere otros procesamientos

antes de poder determinar si puede ser realizada.

- 4xx: Errores de solicitud. El requerimiento no puede ser interpretado o

servidor por el servidor y debe ser modificado antes de ser reenviado.

- 5xx: Errores de servidor. El servidor fracasa en el procesamiento de un

requerimiento aparentemente válido.

- 6xx: Errores globales. El requerimiento no puede ser procesado por ningún

servidor.

Figura 101. Línea de respuesta

Fuente: Ruano Ruano 2013

Un mensaje SIP tiene los siguientes campos de cabecera: (García, 2008)

- Via: Indica el transporte usado para el envío e identifica la ruta de la petición.

Por ello, cada proxy añade una línea con un campo Via.

- From: Indica la dirección del origen de la petición.

- To: Indica la dirección del destinatario de la petición.

- Call-Id: Es un identificador único para cada llamada y contiene la dirección

del host. Debe ser igual para todos los mensajes dentro de una transacción.

Page 137: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

134

- Cseq: Se inicia con un número aleatorio e identifica de forma secuencial

cada petición. La respuesta a una solicitud debe llevar el mismo Cseq.

- Contact: Contiene una dirección que puede ser usada para contactar con el

usuario.

- Record-Route y Route: Ambos contienen una lista de URIs SIP, cada lista

identificando una serie de proxies SIP. El campo Record-Route es insertado

en una petición por un proxy para forzar a enrutar futuras peticiones a través

de él. El UA copiará el contenido del campo Record-Route de la petición

recibida en el campo Route de nuevas peticiones generadas dentro del

diálogo.

- Max-Forwards: Contiene un entero que se decrementa con cada salto. Si su

valor llega a 0, la petición es rechazada.

- User Agent: Contiene el agente de usuario que realiza la comunicación.

- Content- Length: Longitud en octetos del cuerpo del mensaje.

- Content-Type: Indica tipo de contenido del cuerpo (p.e. application/sdp).

- Content-Disposition: Indica cómo interpretarse el cuerpo.

- Subject: Texto que indica el asunto de la llamada.

Adicionalmente, las sesiones derivadas de SIP pueden ser descritas mediante el

protocolo Session Description Protocol (SDP), definido en la RFC 4566. Para crear

sesiones, los mensajes SIP incluyen campos pertenecientes al protocolo SDP que

permiten a los participantes acordar una serie de parámetros necesarios para la

comunicación multimedia (Ruano Ruano, 2013).

Descripción de sesión

- v: versión del protocolo.

- o: Dueño/creador e identificador de sesión.

- s: Nombre de la sesión.

- i: Información de la sesión.

- u: URI de la descripción.

- e: Dirección email de responsable de sesión.

- p: Número de teléfono.

- c: Información de la conexión.

- b: Información de ancho de banda.

- z: Ajustes de la zona de tiempo.

- k: Clave del cifrado.

- a: Cero o más líneas de atributos de sesión.

Page 138: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

135

Descripción de tiempo

- t: Hora comienzo y fin de la sesión activa.

- r: Ceo o más tiempo de repetición.

Descripción de medio

- m: Tipo de medio.

- i: Título de los medios

- c: Información de la conexión.

- b: Información de ancho de banda.

- k. Clave de cifrado.

- a: Cero o más líneas de atributos de medios.

El protocolo RTP Debido a la dependencia del tráfico de voz respecto al tiempo, UPD/IP es la

elección lógica para transportar la voz. Sin embargo, se necesita más información que la

que UDP ofrece para basar la comunicación en paquetes. Por tanto, para tráfico en

tiempo real o sensible a retrasos, IETF (Internet Engineering Task Force) adoptó el

protocolo RTP. VoIP usa RTP, el cual usa UDP. Por tanto, VoIP es transportada por la

pila de protocolos RTP/UDP/IP. RTP es el estandard para transmitir tráfico sensible a

retrasos en redes basadas en paquetes. RTP da a los nodos receptores información que

no está en los streams UDP/IP. Como se muestra en la Ilustración 8, dos bits importantes

de información son el bit de secuencia y el timestamp. RTP usa la información de

secuencia para determinar si los paquetes están llegando en orden, y usa la información

de time-Stamp para saber el tiempo entre llegada de paquetes (Jitter)

Page 139: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

136

Figura 102. Cabecera paquete UDP con RTP

Fuente: Introducción a la VoIP a través de Elastix

Junto a RTP se usa también RTCP (RTP Control Protocol) para enviar datos de

control entre el emisor y receptor de una secuencia RTP. Los paquetes RTCP son

enviados aproximadamente cada cinco segundos, y contienen datos que ayudan a

verificar las condiciones de transmisión en el extremo remoto.

RTCP soporta también conferencias en tiempo real de grupos de cualquier

tamaño en Internet. Esto incluye identificación del origen y soporte de gateways, como

brigdes de audio y video, así como traductores de multicast a unicast. También ofrece

realimentación de QoS desde los receptores al grupo multicast, así como soporte para la

sincronización de diferentes streams de medios.

El uso de RTP es importante en tráfico en tiempo real, pero tiene sus

inconvenientes. Las cabeceras de los protocolos IP/RTP/UPD son de 20, 8 y 12 bytes, lo

que suman una cabecera de 40 bytes, que puede llegar a ser demasiado grande

comparada con la carga útil.

Page 140: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

137

ANEXO 3: MOTOR DE RECONOCIMIENTO Y TTS VERBIO Verbio es un conjunto de librerías y utilidades destinadas a conseguir una rápida

y sencilla incorporación de herramientas del habla (reconocimiento y síntesis del habla,

verificación de locutor y soluciones relacionadas) en aquellas aplicaciones en las que

pueda resultar interesante disponer de una interfaz vocal.

Cualquier entorno que disponga de un dispositivo que permita obtener y/o

reproducir muestras de audio será susceptible de incorporar las herramientas contenidas

en Verbio. Es decir, el sistema de reconocimiento requerirá la obtención de las muestras

de audio dictadas por el locutor para procesarlas y obtener el resultado de

reconocimiento. Por otro lado, el sistema de síntesis de voz requerirá la reproducción de

las muestras de audio que haya generado a partir del texto introducido.

Los motores de reconocimiento y síntesis del habla Verbio están diseñados para

funcionar en una arquitectura cliente-servidor. Es decir, se requiere uno o más servidores

que atienden las peticiones de uno o más clientes. Entendemos por cliente toda

aplicación que utilice recursos de reconocimiento y/o síntesis del habla y/o verificación de

voz

Reconocimiento del habla El reconocimiento del habla permite que una aplicación tenga la funcionalidad de

transformar la entrada de voz de un usuario en texto escrito. El reconocedor de Verbio es

independiente de locutor, lo que significa que no se necesita entrenar o adaptar el

sistema al usuario para que el reconocedor funcione. Verbio ha sido entrenado con una

población de miles de hablantes de cada lengua en una proporción equilibrada en sexo y

edad y de todas las partes del territorio de uso de cada lengua, recogiendo sus voces a

través de la red telefónica fija y móvil para los modelos a 8KHz, así como micrófono para

los modelos a 16 KHz.

El reconocimiento del habla puede transformar la voz procedente del habla de un

usuario a texto si conoce todas las posibles combinaciones de palabras que el usuario

puede decir en un determinado momento. La descripción del vocabulario de palabras a

usar por el reconocedor así como el conjunto de posibles secuencias de éstas en

cualquier oración válida es lo que se conoce por gramática de reconocimiento.

Cuanto más se especializa una gramática, mejores pueden ser los resultados.

En contrapartida, esto disminuye a menudo la flexibilidad y naturalidad en el estilo de

Page 141: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

138

habla de los usuarios. Por ejemplo, una gramática A para reconocimiento de fechas

puede considerar fechas en formato estándar “21 de mayo”. Otra gramática B puede

considerar además fechas relativas como “el viernes” o “el mes que viene, el cuatro”. La

gramática B será obviamente más flexible, pero podría cometer más errores al intentar

reconocer fechas en su formato estándar. Incluso una tercera gramática C podría

considerar las horas y destinaciones para la reserva de vuelos además de las fechas. La

flexibilidad en este caso será mucho mayor, pero las prestaciones del reconocimiento

podrían disminuir frente a la situación mucho más controlada ofrecida por las gramáticas

A y B. Las gramáticas de uso más habitual (fechas, números, respuestas de tipo sí/no,

etc.), ya están definidas internamente en el sistema con tal de poder obtener los mejores

resultados en todo momento.

Una vez se ha definido una gramática, existen varios parámetros de tiempo a

considerar como: la máxima duración del silencio inicial, el silencio permitido una vez el

usuario ya ha empezado a hablar y el tiempo máximo total. Procesar el resultado no

consiste solamente en obtener el texto resultante de la voz de entrada sino que es

importante conocer una medida de confianza por parte del reconocedor (lo que permite

rechazar resultados o, al menos, pedir confirmación al usuario), evaluando hipótesis

alternativas (N-best) o procesando el resultado a través de una interpretación semántica.

La inicialización del motor de reconocimiento del habla consiste en habilitar uno

o más idiomas para usar en la aplicación así como especificar el idioma por defecto para

un vocabulario de reconocimiento.

Una gramática de reconocimiento define el universo de posibles respuestas que

el sistema puede reconocer en un determinado momento. Es el subconjunto del “lenguaje”

aceptado por el reconocedor. Por lo tanto debe haber una gramática adecuada para cada

instante del diálogo entre la persona y la máquina. Una gramática especifica el

vocabulario de palabras que el sistema puede reconocer así como las posibles

secuencias en que éstas se pueden combinar.

Existen dos tipos de gramáticas. Por una parte gramáticas con listas de palabras

aisladas y por otra parte gramáticas ABNF (augmented Backus-Naur Form).

La gramática de lista de palabras es la más sencilla para el reconocimiento del

habla. Verbio permite usar ficheros de texto consistentes en listas de entradas (cada una

con una o más palabras), una por línea. Cada una de estas entradas se denotará como

palabra del vocabulario.

Page 142: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

139

Las gramáticas de reconocimiento también pueden verse como una estructura basada en

patrones que describen las posibles secuencias de palabras del vocabulario válidas.

Estas gramáticas especifican cómo se comporta el lenguaje natural en una determinada

tarea.

Las gramáticas de Verbio siguen la sintaxis descrita en la especificación de gramáticas

para el reconocimiento del habla (SRGS, del inglés Speech Recognition Grammar

Specification) por el W3C Speech Interface Framework (http://www.w3c.org/TR/speech-

grammar) en su forma Augmented BNF (ABNF).

En este tipo de gramáticas se define el patrón de palabras a reconocer, que contiene una

regla consistente en una expresión regular que contiene palabras, referencias a otras

reglas o combinaciones de ambas.

Gramáticas ABNF Formato de gramáticas ABNF

Este apartado resume la SRGS (Speech Recognition Grammar Specification) en su forma

ABNF. Una gramática define el patrón de palabras a reconocer, una regla consistente en

una expresión regular que contiene palabras, referencias a otras reglas o combinaciones

de ambas.

Tokens

Un token es la parte de la gramática que define las palabras que pueden pronunciarse,

las anteriormente definidas palabras del vocabulario. En la sintaxis, un token es cualquier

combinación de caracteres delimitados por espacios o símbolos especiales (; = | () {} * +

/* */ // <> ! "). Si un token contiene espacios o símbolos especiales debe entrecomillarse

(“”).

El símbolo “_” entre dos palabras indica que en la transcripción fonética se tendrán

especialmente en cuenta los fenómenos de coarticulación entre palabras. Esta opción no

debería usarse a menos que exista una particularmente alta coarticulación entre palabras

(por ejemplo la coarticulación de “y” en números como 34, “treinta_y_cuatro”).

Hola // token ponme con Juan // 3 tokens diferentes "buenos días" // 1 token treinta_y_dos // 1 token "[SIL]" // 1 token: [SIL]

Page 143: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

140

Reglas

Cada regla se identifica con un nombre de regla. Una referencia a una regla local

(definida en la misma gramática) se define con su nombre de regla, que debe empezar

siempre con el carácter “$”.

$dia $mes

Secuencias

Una secuencia de tokens, reglas o combinaciones de ambas es a su vez una regla, lo

que implica el orden cronológico en el que las palabras pueden pronunciarse.

ponme con Juan // secuencia de 3 tokens ponme con $nombre // secuencia de 2 tokens y 1 referencia a una regla $relleno $nombre // secuencia de referencias a reglas

Alternativas

Un conjunto de alternativas también es una regla. Se identifican como una lista de reglas separadas por el símbolo “|”. Juan | José | "José Luis" | $nombres

Cada alternativa puede opcionalmente tener un peso (valor en coma flotante entre “/”). /2/ Juan | /3/ José | /1/ "José Luis"

Este peso es proporcional a la probabilidad de inserción de dicha alternativa en el

reconocimiento de una elocución. Por defecto, el peso es 1.0 Un peso mayor que 1

aumenta la probabilidad de inserción de un token comparado con el resto de palabras. Un

peso menor que 1 implica una mayor probabilidad de eliminar dicha palabra del

reconocimiento. Si todas las palabras tienen un peso superior a 1, la probabilidad de

inserción de palabras es más alta. Por lo tanto, una lista de alternativas con todos los

pesos a 1 no es equivalente a la misma lista con todos los pesos a 10, por ejemplo. En

este último caso, la probabilidad de inserción de palabras se vería incrementada. Si el

peso se asigna a una regla o expresión, dicho peso multiplicará a los pesos de todas las

palabras contenidas en dicha regla. Por lo tanto, la regla:

/2/ Juan | /3/ José | /3/ (/1/ Luis | /2/ Jorge)

es equivalente a:

/2/ Juan | /3/ José | /3/ Luis | /6/ Jorge

Por lo tanto, es conveniente usar los pesos con cuidado y preferiblemente en las palabras

finales exclusivamente.

Page 144: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

141

Reglas especiales

- GARBAGE: Define una regla que puede mapear cualquier segmento de

habla hasta que lo haga la siguiente regla o bien el final de la elocución.

- SILENCE: Define una regla que puede mapear un silencio. Es útil para

indicar silencios particularmente largos dentro de una elocución. Por defecto,

los silencios al principio y final de la elocución ya se insertan

automáticamente en el procesador de gramáticas. Entre palabras, y también

de forma automática, se insertan silencios cortos opcionales.

// "ponme con Juan" // "por favor podrías ponerme con José" // "Luis" $GARBAGE (Juan | José | Luis)

Repeticiones

Palabras o reglas opcionales se delimitan por corchetes [...]. Los símbolos * y + indican

que la palabra o regla precedente puede repetirse cero o más veces o una o más veces

respectivamente.

// "1" // "1 4 3 2" $digit + // "pizza" // "pizza grande con queso" // "pizza pequeña con queso y anchoas" pizza [[muy] grande | pequeña] ([con | y] $complemento)*

Tags

Cada token puede asociarse a una cadena de texto que el reconocedor devuelve en lugar

de la palabra pronunciada. El tag se delimita entre llaves {...}.

["ponme con" {}] ("Luís Fernández" {1023} | "José Pérez" {1024} | "Pepe Pérez" {1024})

Cuando el tag está vacío “{}”, el token se considera como una palabra de relleno y no

será jamás devuelta por el reconocedor. En el ejemplo anterior, el resultado del

reconocedor ante la elocución "ponme con José Pérez" sería "1024".

Idioma

Las gramáticas ABNF soportan vocabularios plurilingües, es decir, palabras de la

gramática que se pronunciarán en un idioma distinto al establecido por defecto. Siempre

hay un idioma por defecto con el que el vocabulario se prepara.

El idioma por defecto de un vocabulario o gramática puede establecerse inline usando el

descriptor “language” seguido por el identificador de idioma ( “es” para español, “ca” para

Page 145: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

142

catalán, “eu” para euskera, “ga” para gallego, “es-ar” para español argentino, “es-cl” para

español chileno, “es-co” para español colombiano, “es-mx” para español mexicano, “es-

ve” para español venezolano, “pt” para portugués, “pt-br” para brasileño, “fr” para francés

y “en-us” para inglés americano) y un punto y coma.

El idioma de los tokens puede establecerse añadiendo después del token el símbolo de

admiración “!” seguido del identificador de idioma.

language es; $color = verde | azul | rojo | // en español verd!ca | blau!ca | vermell!ca // en catalán ;

Precedencia

La precedencia de operadores en la definición de reglas es:

1. Nombre de regla denotado por el símbolo “$”.

2. Paréntesis “()” para agrupar y corchetes “[]” para agrupar opcionales.

3. Operadores unarios “*” y “+” y tags “{}” aplican a la palabra o regla immediatamente

precedente (los paréntesis permiten agrupar palabras y reglas).

4. Secuencias de palabras y/o reglas.

5. Secuencias de palabras y/o reglas separadas por “|”.

Definición de reglas

Una definición de regla permite asociar una regla a un nombre de regla. Consiste en una

declaración opcional de ámbito seguido de un nombre de regla (que debe empezar

obligatoriamente por “$”), un signo igual “=”, la propia definición de la regla, y un punto y

coma “;” al final.

$nombre = regla; public $nombre = regla; $color = rojo | verde | azul | "azul marino";

La declaración del ámbito puede ser “public” o “private”, siendo esta última la declaración

por defecto. Las reglas definidas como “public” son las reglas iniciales para el

reconocimiento.

Regla principal (root)

Page 146: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

143

Si una (y sólo una) de las reglas se declara con el ámbito “root”, será la única regla usada

por el reconocedor. Si no existe ninguna regla declarada como “root”, el reconocedor

usará como regla principal la alternativa de todas las reglas declaradas como “public”.

Comentarios

Comentarios en el estilo C/C++/Java se admiten en la definición de las gramáticas. Los

comentarios delimitados por “/*” y “*/” o entre “//” y el final de la línea son ignorados por el

procesador de gramáticas.

En la sintaxis de las gramáticas ABNF todas las gramáticas deben empezar por

“#ABNF 1.0 ISO8859-1;”.

Ejemplo de gramáticas ABNF

#ABNF 1.0 ISO8859-1;

$rgb = rojo {COLOR=R} | // si se reconoce "rojo" retorna COLOR=R verde {COLOR=G} | // si se reconoce "verde" retorna COLOR=G azul {COLOR=B} | "azul marino" {COLOR=B}; // "el color azul" -> COLOR=B // "el rojo por favor" -> COLOR=R // "azul marino" -> COLOR=B root $color = [color {} | "el color" {} | el {}] $rgb "por favor" {}]; #ABNF 1.0 ISO8859-1; public $dia_semana = [el {}] (lunes | martes | miércoles | jueves | viernes | sábado | domingo); public $dia_relativo = ayer | hoy | mañana | "pasado mañana"; // implicit declaration of rule "root $dia = $dia_semana | $dia_rel;"

Verbio para asterisk Fichero de configuración verbio.conf

Al instalar verbio es necesario editar el fichero de configuración verbio.conf Este fichero

reside en: '/etc/asterisk'. Las opciones más importantes a configurar en este fichero son:

Sección [general]

- primary_vox_server : ip de la máquina donde corre verbiod.

Sección [tts]

- default_language : Lenguaje por defecto del sintetizador de voz.(X)

- default_speaker : Locutor por defecto del sintetizador de voz. (X)

- text_prompts_path : Ruta (por defecto) de los prompts de texto.

Page 147: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

144

Sección [asr]

- default_config : Configuración por defecto del reconocimiento.(X)

- default_language : Lenguaje por defecto del reconocimiento. (X)

- grammar_path : Ruta por defecto de las gramáticas.

Como ejemplo, el siguiente fichero de configuración es válido para una instalación la cual

disponga, al menos, de los siguientes paquetes Verbio instalados:

* verbio-engines (Motores de síntesis y reconocimiento)

* verbio-clients (Librerías de desarrollo)

* verbio-asr-es (Reconocimiento español)

* verbio-tts-esao (Locutora española Laura)

;;;;;;;;;;;;;; verbio.conf ;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Verbio ASR and TTS engines Configuration

;;;;;;;;;;;;;;;;;;;;;;

; General options ;

;;;;;;;;;;;;;;;;;;;;;;

[general]

; Primary Voxserver (default: 127.0.0.1)

primary_vox_server = 127.0.0.1

; Backup voxserver

backup_vox_server = 127.0.0.1

; Network Timeout (seconds)

; default 5

net_timeout = 5

;;;;;;;;;;;;;;;;;;;;;;

; TTS Engine Options ;

Page 148: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

145

;;;;;;;;;;;;;;;;;;;;;;

[tts]

; Default TTS language (depends on your verbio setup)

; If you do not want to load TTS, comment this option.

default_language = es

; Default TTS speaker (depends on your verbio setup)

default_speaker = laura

; Default path to promt files (text files that you want to be readed by Verbio TTS)

text_prompts_path =/var/lib/asterisk/verbio/text

; Misc options

; Delays in ms

init_delay = 300

end_delay = 20

;;;;;;;;;;;;;;;;;;;;;;

; ASR Engine Options ;

;;;;;;;;;;;;;;;;;;;;;;

[asr]

; Default ASR config (depends on your verbio setup)

; If you do not want to load ASR, comment this option.

default_config = es

; Default ASR lang (depends on your verbio setup)

default_language = es

; Default path to grammar files

grammar_path = /var/lib/asterisk/verbio/gram

Page 149: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

146

; Max duration of initial silence 10ms units.(300 -> 3 seconds)

; default: 300

init_sil = 300

; Max duration of final silence 10ms units.(200 -> 2 seconds)

; default: 200

max_sil = 200

; VAD (Voice Activity Detection) options

; min_ref: 5 (to be used in quiet rooms) - 190 (to be used in noisy rooms)

; default: 5

min_ref = 5

; Absolute timeout (max recognition time)

; default 30 (seconds)

;absolute_timeout = 30

;;;;;;;;;;;;;;;;;;;;;;

; Debug options ;

;;;;;;;;;;;;;;;;;;;;;;

[debug]

; Global verbose mode

; Comment it to disable glogal verbose mode.

; Enable verbose on all Verbio applications, even if

; application's 'v' option is not set.

; If you are using 'res_speech_verbio', you can also set/unset

; verbosity (in your dialplan) using 'Set(SPEECH_ENGINE(verbose)=1)'

; or 'Set(SPEECH_ENGINE(verbose)=0)'

Page 150: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

147

;verbose = 1

; Extended verbosity (verbose mode must be set)

; Comment it to disable extended verbosity

;extended_verbose = 1

; save recorded files

; default: 0

;keep_recorded_files = 1

; Path to recorded files

; default /var/lib/asterisk/verbio/audio

;recorded_files_path = /var/lib/asterisk/verbio/audio

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Aplicaciones Verbio para Asterisk

Una vez realizada la configuración necesaria en el fichero de configuración verbio.conf,

describimos las diferentes aplicaciones de verbio en asterisk.

Nota: Si los parámetros marcados como opcionales se omiten, estos tomarán los valores

del fichero '/etc/asterisk/verbio.conf'.

VerbioLoadVcb(gram_file|gram_type[|config][|lang][|options])

Descripción:

Esta función carga una gramática (sobre un puerto verbio asociado al canal Asterisk).

Parámetros:

gram_file : fichero de gramática.

gram_type : tipo de gramática ((ISOLATED, CONNECTED, ABNF o BUILTIN)).

config : configuración de reconocimiento (opcional).

lang : lenguaje a utilizar (opcional).

options : opciones. Las opciones disponibles son:

Page 151: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

148

- v (verbose)

- n (no ejecutar colgado cuando se produzca un error referente a Verbio)

Una vez cargada la gramática, se establecerá una variable de canal (VVCB_HANDLE) la

cual contiene el identificador de la gramática cargada.

VerbioUnloadVcb(vcb_handle[|config][|lang][|options])

Descripción:

Descarga una gramática.

Parámetros:

vcb_handle : identificador de gramática (-1 para descargar todas)

config : configuración de reconocimiento (opcional).

lang : lenguaje a utilizar (opcional).

options : opciones. Las opciones disponibles son:

- v (verbose)

- n (no ejecutar colgado cuando se produzca un error referente a Verbio)

VerbioRec([|config][|lang][|initsil][|maxsil][|abs_timeout][|options])

Descripción:

Lanza el reconocimiento. Antes de hacer cualquier llamada a esta aplicación, deberemos

haber cargado alguna gramática con la función 'VerbioLoadVcb'.

Parámetros:

config : configuración de reconocimiento (opcional).

lang : lenguaje a utilizar (opcional).

initsil : máxima duración de silencio de inicio (unidades de 10ms)

maxsil : máxima duración de silencio final (unidades de 10ms)

abs_timeout : timeout absoluto de reconocimiento (segundos) (opcional)

options : opciones. Las opciones disponibles son:

Page 152: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

149

- b (beep antes de lanzar el reconocimiento)

- v (verbose)

- a (descolgar el canal)

- d (habilitar la detección de dtmf)

- n (no ejecutar colgado cuando se produzca un error referente a Verbio)

Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de

Asterisk) las siguientes variables de canal:

- VASR_WORDS : Número de palabras reconocidas (n).

- VASR_INDEXn : Índice (dentro de la gramática) de la palabra-n reconocida.

- VASR_RESULTn : Resultado-n del reconocimiento.

- VASR_SCOREn : Score-n (confianza) del reconocimiento.

- VASR_UTTERANCEn : Utterance el resultado n.

- VASR_WEIGHTn : Peso del resultado n dentro de la gramática.

- VASR_RULEn : Regla a la que pertenece el resultado n.

Para compatibilidad con anteriores versiones:

- VASR_INDEX = VASR_INDEX0

- VASR_RESULT = VASR_RESULT0

- VASR_SCORE = VASR_SCORE0

- VASR_UTTERANCE = VASR_UTTERANCE0

- VASR_WEIGHT = VASR_WEIGHT0

- VASR_RULE = VASR_RULE0

Si la detección de dtmf (opción 'd') está habilitada, podemos consultar su estado con las

siguientes variables de canal:

- VDTMF_DETECTED :TRUE (se ha detectado un tono) o FALSE (no se ha detectado

tono)

Page 153: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

150

- VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el

valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-.

Se puede configurar el número máximo de dtmf a detectar y el dtmf de

terminación, configurando (set) las siguientes variables del dialplan:

- VERBIO_DTMF_MAXLEN

- VERBIO_DTMF_TERMINATOR

Nota: si la opción 'keep_recorded_files' está activada en 'verbio.conf', podemos consultar

el nombre del fichero generado (una vez la aplicación de reconocimiento ha terminado),

mediante la siguiente variable del dialplan: VASR_REC_FILE.

VerbioPrompt(text_or_file[|lang][|speaker][|options])

Descripción:

Sintetiza un texto o fichero de texto.

Parámetros:

text_or_file : texto (o fichero - ver opciones -) a sintetizar.

lang : lenguaje a utilizar (opcional).

speaker : locutor a utilizar (opcional).

options : opciones. Las opciones disponibles son:

- f (tratar el parámetro fichero_o_texto como si fuera un fichero)

- v (verbose)

- p (habilitar pausa/reproducción mediante dtmf -tecla por defecto '#'.Para

especificar una tecla: p0,p1,..,p*,p#. p. para qualquier tecla-)

- s (habilitar parada del prompt mediante dtmf -tecla por defecto '#'. Para

especificar una tecla: s0,s1,..,s*,s#. s. para qualquier tecla-)

- a (descolgar el canal)

- n (no ejecutar colgado cuando se produzca un error referente a Verbio)

Si la opción de parar el prompt ('s') está habilitada, podemos consultar su estado con las

siguientes variables de canal:

Page 154: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

151

- VDTMF_DETECTED (TRUE -si el usuario ha pulsado la tecla de parada del prompt- or

FALSE)

- VDTMF_RESULT (si VDTMF_DETECTED = TRUE, contiene el valor de la tecla

pulsada)

Al trabajar con la opción 'f', los ficheros de texto a sintetizar, se buscarán en la ruta

definida por el parámetro 'text_prompts_path', del fichero de configuración

('/etc/asterisk/verbio.conf').

Si queremos sintetizar un fichero de texto que se encuentre en una ubicación distinta,

deberemos introducir el path completo al fichero.

No olvidarse de escapar las comas (',') del texto que queremos sintetizar (ejemplo: "Hola\,

buenas tardes."). (Si usamos un fichero de texto -opción 'f'- esto último no aplica).

VerbioPromptAndRec(text_or_file[|initsil][|maxsil][|tts_lang][|tts_spkr][|asr_conf][|asr_lang][

|abs_timeout][|options])

Descripción:

Lanza (al mismo tiempo) una síntesis y un reconocimiento. Dicha aplicación permite, si la

opción bargein está activada, que el usuario interrumpa la máquina (si durante la locución

el reconocedor detecta que el usuario ha dicho algo, se parará la síntesis y la aplicación

terminará. Permitiéndonos, así, consultar el resultado del reconocimiento efectuado)

Parámetros:

text_or_file : texto (o fichero - ver opciones -) a sintetizar.

initsil : máxima duración de silencio de inicio (unidades de 10ms) (opcional)

maxsil : máxima duración de silencio final (unidades de 10ms) (opcional)

tts_lang : lenguaje (del sintetizador) a utilizar (opcional).

tts_spkr : locutor (del sintetizador) a utilizar (opcional).

asr_conf : configuración de reconocimiento (opcional).

asr_lang : lenguaje (del reconocedor) a utilizar (opcional).

abs_timeout : timeout absoluto de reconocimiento (segundos) (opcional)

Page 155: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

152

options : opciones. Las opciones disponibles son:

- f (tratar el parámetro fichero_o_texto como si fuera un fichero)

- v (verbose)

- a (descolgar el canal)

- b (beep antes de reconocer)

- g (activar bargein. Permitir al usuario interrumpir a la máquina. Esta

opción desactivará 'b'.)

- i (interrumpir de manera inmediata el prompt al detectar voz. Esta opción

activará 'g'.)

- d (habilitar la detección de dtmf)

- n (no ejecutar colgado cuando se produzca un error referente a Verbio)

Al trabajar con la opción 'f', los ficheros de texto a sintetizar, se buscarán en la ruta

definida por el parámetro 'text_prompts_path' del fichero de configuración

('/etc/asterisk/verbio.conf'). Si queremos sintetizar un fichero de texto que se encuentre en

una ubicación distinta, deberemos introducir el path completo al fichero.

No olvidarse de escapar las comas (',') del texto que queremos sintetizar (ejemplo: "Hola\,

buenas tardes."). (Si usamos un fichero de texto -opción 'f'- esto último no aplica).

Cuando usemos bargein, hay que tener mucho cuidado al seleccionar los parámetros

'initsil', 'maxsil' y 'abs_timeout'.Si, por ejemplo, seleccionamos un 'initsil' o 'abs_timeout'

demasiado pequeño, no le daremos suficiente tiempo de escucha al usuario, y nuestro

mensaje (prompt) se verá interrumpido.

Si no indicamos un valor para 'initsil', 'maxsil' o 'abs_timeout', se utilizarán los valores

indicados en el fichero de configuración (verbio.conf)

Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de

Asterisk) las siguientes variables de canal (una vez la aplicación 'VerbioPromptAndRec'

haya terminado):

- VASR_WORDS : Número de palabras reconocidas (n).

- VASR_INDEXn : Índice (dentro de la gramática) de la palabra-n reconocida.

Page 156: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

153

- VASR_RESULTn : Resultado-n del reconocimiento.

- VASR_SCOREn : Score-n (confianza) del reconocimiento.

- VASR_UTTERANCEn : Utterance el resultado n.

- VASR_WEIGHTn : Peso del resultado n dentro de la gramática.

- VASR_RULEn : Regla a la que pertenece el resultado n.

Para compatibilidad con anteriores versiones:

- VASR_INDEX = VASR_INDEX0

- VASR_RESULT = VASR_RESULT0

- VASR_SCORE = VASR_SCORE0

- VASR_UTTERANCE = VASR_UTTERANCE0

- VASR_WEIGHT = VASR_WEIGHT0

- VASR_RULE = VASR_RULE0

Si la detección de dtmf (opción 'd') está habilitada, podemos consultar su estado con las

siguientes variables de canal:

- VDTMF_DETECTED :TRUE (se ha detectado un tono) o FALSE (no se ha detectado

tono)

- VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el

valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-.

Se puede configurar el número máximo de dtmf a detectar y el dtmf de

terminación, configurando (set) las siguientes variables del dialplan:

- VERBIO_DTMF_MAXLEN

- VERBIO_DTMF_TERMINATOR

Nota: si la opción 'keep_recorded_files' está activada en 'verbio.conf', podemos consultar

el nombre del fichero generado (una vez la aplicación de reconocimiento ha terminado),

mediante la siguiente variable del dialplan: VASR_REC_FILE.

Page 157: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

154

VerbioStreamAndRec(audio_file[|initsil][|maxsil][|asr_conf][|asr_lang][|abs_timeout][|option

s])

Descripción:

Lanza (al mismo tiempo) la reproducción de un fichero de sonido y un reconocimiento.

Esta aplicación, igual que la anterior, nos permite realizar 'bargein'.

Parámetros:

audio_file : fichero a reproducir.

initsil : máxima duración de silencio de inicio (unidades de 10ms) (opcional)

maxsil : máxima duración de silencio final (unidades de 10ms) (opcional)

asr_conf : configuración de reconocimiento (opcional).

asr_lang : lenguaje (del reconocedor) a utilizar (opcional).

abs_timeout : timeout absoluto de reconocimiento (segundos) (opcional)

options : opciones.Las opciones disponibles son:

- v (verbose)

- a (descolgar el canal)

- b (beep antes de reconocer)

- g (activar bargein. Permitir al usuario interrumpir a la máquina. Esta

opción desactivará 'b'.)

- i (interrumpir de manera inmediata el stream al detectar voz. Esta opción

activará 'g'.)

- d (habilitar la detección de dtmf)

- n (no ejecutar colgado cuando se produzca un error referente a Verbio)

Cuando usemos bargein, hay que tener mucho cuidado al seleccionar los parámetros

'initsil', 'maxsil' y 'abs_timeout'.Si, por ejemplo, seleccionamos un 'initsil' o 'abs_timeout'

demasiado pequeño, no le daremos suficiente tiempo de escucha al usuario, y nuestro

fichero a reproducir se verá interrumpido.

Page 158: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

155

Si no indicamos un valor para 'initsil', 'maxsil' o 'abs_timeout', se utilizarán los valores

indicados en el fichero de configuración (verbio.conf)

Para acceder al resultado del reconocimiento, podemos consultar (desde el dialplan de

Asterisk) las siguientes variables de canal (una vez la aplicación 'VerbioPromptAndRec'

haya terminado):

- VASR_WORDS : Número de palabras reconocidas (n).

- VASR_INDEXn : Índice (dentro de la gramática) de la palabra-n reconocida.

- VASR_RESULTn : Resultado-n del reconocimiento.

- VASR_SCOREn : Score-n (confianza) del reconocimiento.

- VASR_UTTERANCEn : Utterance el resultado n.

- VASR_WEIGHTn : Peso del resultado n dentro de la gramática.

- VASR_RULEn : Regla a la que pertenece el resultado n.

Para compatibilidad con anteriores versiones:

- VASR_INDEX = VASR_INDEX0

- VASR_RESULT = VASR_RESULT0

- VASR_SCORE = VASR_SCORE0

- VASR_UTTERANCE = VASR_UTTERANCE0

- VASR_WEIGHT = VASR_WEIGHT0

- VASR_RULE = VASR_RULE0

Si la detección de dtmf (opción 'd') está habilitada, podemos consultar su estado con las

siguientes variables de canal:

- VDTMF_DETECTED :TRUE (se ha detectado un tono) o FALSE (no se ha detectado

tono)

- VDTMF_RESULT :si VDTMF_DETECTED = TRUE, VDTMF_RESULT contiene el

valor de la tecla pulsada -0,1,2,3,4,5,6,7,8,9,*,#...-.

Se puede configurar el número máximo de dtmf a detectar y el dtmf de

terminación, configurando (set) las siguientes variables del dialplan:

Page 159: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

156

- VERBIO_DTMF_MAXLEN

- VERBIO_DTMF_TERMINATOR

Nota: si la opción 'keep_recorded_files' está activada en 'verbio.conf', podemos consultar

el nombre del fichero generado (una vez la aplicación de reconocimiento ha terminado),

mediante la siguiente variable del dialplan: VASR_REC_FILE.

VerbioLastErr(var)

Descripción:

Esta aplicación permite consultar el último mensaje de error referente a las funciones

Verbio.

Parámetros:

var: variable de canal donde guardaremos el mensaje de error.

Las aplicaciones Verbio deberán ser ejecutadas con la opción 'n' (para evitar, cuando se

produzca un error por parte de las funciones de Verbio, el cuelgue de la llamada).

Códigos de error:

EVX_NOERROR NO ERROR

EVX_INVSETUP Vox ERROR (Files may be corrupted. Check disk and repeat Vox

Setup)

EVX_NOMEM OUT OF MEMORY. (Check memory leakages)

EVX_VCBFILE THE VOCABULARY FILE NAME IS NOT VALID. (Check the

vocabulary file name and path writing permission)

EVX_INVWORD THE VOCABULARY CONTAINS AN INVALID WORD. (Check and

correct invalid words)

EVX_NOLICFILE NO LICENSE FILE WAS FOUND. (Use Setup and CheckOut to

obtain the Vox directory structure and the license file)

EVX_INVLIC THE LICENSE FILE IS NOT VALID. (Use CheckOut to obtain a valid

license file)

EVX_SYSTEM SYSTEM ERROR (Check errno)

Page 160: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

157

EVX_NOLIBINIT VOXLIB WAS NOT SUCCESSFULLY LOADED. (Call vox_libinit()

before using any Vox function)

EVX_NOLIC NO LICENSE

EVX_NOSETVCB NO ACTIVE VOCABULARY. (Use vox_setvcb() to set the active

vocabulary)

EVX_NORECSTR NO RECOGNITION. (Use vox_recstr() to init recognition)

EVX_NOLINE NO MORE LINES ARE AVAILABLE FOR THE SPECIFIED CHANNEL

DEVICE

EVX_BADPARM INVALID PARAMETER IN FUNCTION CALL

EVX_NOTIMP NOT IMPLEMENTED

EVX_NORECIND NO RECIND OR NBEST. (Call vox_recind() before calling

ATVOX_NIND())

EVX_INVFILE INVALID FILENAME

EVX_NETWORK NETWORK ERROR

EVX_DICFILE THE DICTIONARY FILE NAME IS NOT VALID

EVX_PARSER ABNF PARSER ERROR

EVX_INVVER THE VOXSERVER VERSION DOES NOT MATCH THE CLIENT

VERSION

EVX_UNKNOWN Unknown error

2.8 - VerbioInfo()

Descripción:

Esta aplicación imprimirá información diversa sobre la configuración de Verbio (locutores

instalados, configuraciones de reconocimiento instaladas, versiones, licencias, etc...).

Esta aplicación creará las siguientes variables de canal:

- VTTS_SPEAKERS : locutores disponibles (formato:

'id1:name1:gender1:age1:lang1;id2:name2:gender2:age2:lang2;')

- VASR_CONFIGS : configuraciones de reconocimiento disponibles.

Page 161: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

158

VerbioFreeChannel

Descripción:

Esta aplicación liberará los recursos (licencias y memoria) del servidor Verbio para el

canal actual. Esta aplicación deberá ser ejecutada SIEMPRE, antes de terminar una

llamada que haga uso de las aplicaciones Verbio. Esta aplicación es equivalente a

ejecutar VerbioUnloadVcb con el parámetro vcb_handle a -1.

Ejemplo de uso de las aplicaciones Verbio en Asterisk.

Consideraciones previas:

- Previamente a la ejecución del ejemplo, deberemos copiar el fichero de gramática

'vdemo.txt' a la carpeta '/var/lib/asterisk/verbio/gram'.

- Este ejemplo supone un fichero de configuración verbio.conf, tal como el mostrado

anteriormente

- Los parámetros marcados como 'opcional' se han obviado a la hora de realizar las

llamadas a las aplicaciones Verbio.

Ejemplo (con todos los parámetros):

exten => s,n,VerbioLoadVcb(vdemo.txt,isolated,es,es,v)

Ejemplo (solo con los parámetros 'obligatorios'):

exten => s,n,VerbioLoadVcb(vdemo.txt,isolated)

Ejemplo (algunos parámetros 'obviados'):

exten => s,n,VerbioLoadVcb(vdemo.txt,isolated,,,v)

Ejemplo:

;[...]

exten => 802,1,Goto(VERBIO_TEST,s,1)

;[...]

;;;;;;;;;;;;;;;;;;;;;;;;

; VERBIO TEST Context ;

Page 162: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

159

;;;;;;;;;;;;;;;;;;;;;;;;

[VERBIO_TEST]

; (1) Cargar el vocabulario (vdemo.txt)

exten => s,1,Answer()

exten => s,n,VerbioLoadVcb(vdemo.txt,isolated,,,v)

exten => s,n,VerbioPrompt(Establecido vocabulario ${VVCB_HANDLE}.)

; Guardar el último posible error de Verbio (opcional)

exten => s,n,VerbioLastErr(VERROR)

exten => s,n,NoOp(${VERROR})

; (2) Ejemplo de reconocimiento y prompt

exten => s,n,VerbioPromptAndRec(Hola\,indícame una entrada de la gramática.

Recuerda que\,si la opción baryin está activada\, esta aplicación te permite interrumpirme

en cualquier momento.Gracias por llamar.,1500,100,,,,,,vg)

exten => s,n,VerbioPrompt("Palabras ${VASR_WORDS}. Resultado: ${VASR_RESULT0}.

Score: ${VASR_SCORE0}",,,v)

; (3) Ejemplo de prompt

;exten => s,n,VerbioPrompt(/var/lib/asterisk/verbio/text/test.txt,,,fv)

exten => s,n,VerbioPrompt(Hola\,indícame una entrada de la gramática.,,,v)

; (4) Ejemplo de reconocimiento

exten => s,n,VerbioRec(,,,,,vb)

exten => s,n,VerbioPrompt("Palabras ${VASR_WORDS}. Resultado: ${VASR_RESULT}.

Score: ${VASR_SCORE}",,,v)

; (5) Descargar vocabulario establecido previamente

exten => s,n,VerbioUnloadVcb(${VVCB_HANDLE},,,v)

; (6) Liberar recursos (tanto licencias como memoria)

exten => h,1,VerbioFreeChannel()

Page 163: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

160

ANEXO 4: MANUAL DE INCORPORACIÓN DE EXTENSIONES SIP

Para incorporar extensiones sip en el sistema asterisk, es necesario editar el

fichero de configuración sip.conf situado en /etc/asterisk. Una vez editado es necesario

situarse al final del mismo e introducir nuevas extensiones con el siguiente formato

[nueva_extensión]

;parámetros necesarios para la extensión

type=friend

host=dynamic

username=nueva_extensión

secret=password_sip_nueva_extensión

Como ejemplo se pueden incluir diferentes extensiones, similares a la existente

3001 si al final del fichero sip.conf se incluye por ejemplo el siguiente contenido.

[3002]

type=friend

host=dynamic

username=3002

secret=password3002

callerid="ALONSO" <3002>

context=extensiones-internas

disallow=all

allow=alaw

qualify=yes

Page 164: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

161

canreinvite=no

Una vez realizados los cambios en el fichero sip.conf es necesario activarlos a

través del comando

Asterisk –rx “sip reload”

De la misma forma se pueden incorporar todas las extensiones sip que se

deseen variando el número o nombre de la extensión sip. Una vez habilitadas las

extensiones en el servidor asterisk, es necesario configurar en algún dispositivo que

implemente el protocolo sip, los datos de extensión, password sip y codecs configurados

previamente en el servidor asterisk y comprobar en el propio servidor que las extensiones

introducidas se registran correctamente.

Page 165: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

162

ANEXO 5: MANUAL DE CREACIÓN DE CONSULTAS EN BASE DE DATOS

Para realizar diferentes consultas a una base de datos desde asterisk, es

necesario definir todas las consultas que se deseen realizar en el fichero func_odbc.conf.

Las diferentes consultas se crearán editando el fichero func_odbc.conf, situándose al final

del mismo e incluyendo líneas con el siguiente contenido.

[NOMBRE_CONSULTA1]

prefix=PREFIJO1

dsn=asterisk

readsql=Consulta_1_sql_a_realizar_con_parámetros

[NOMBRE_CONSULTA2]

prefix=PREFIJO2

dsn=asterisk

readsql=Consulta_2_sql_a_realizar_con_parámetros

[NOMBRE_CONSULTAn]

prefix=PREFIJOn

dsn=asterisk

readsql=Consulta_n_sql_a_realizar_con_parámetros

Una vez definidas las diferentes consultas a realizar, podrán ejecutarse desde el

dialplan de asterisk a través del uso de diferentes variables de canal que almacenen los

respectivos resultados de las consultas definidas.

A continuación se expone el dialplan necesario para almacenar el resultado de

las tres consultas indicadas anteriormente. La sentencia set debe tener el formato

indicado para que la consulta se efectúe correctamente

Page 166: Escuela Politécnica Superior de Linarestauja.ujaen.es/bitstream/10953.1/3742/1/TFG_Valcarcel... · 2018-03-20 · reconocimiento vocal y síntesis de voz utilizados, como diferentes

163

Exten,200,Set(variable_resultado_consulta1=${PREFIJO1_NOMBRE_CONSULTA1

("${Parametro1_consulta_sql1}",${ Parametro2_consulta_sql1},${ Parametron_consulta_s

ql1})})

Exten,201,Set(variable_resultado_consulta2=${PREFIJO2_NOMBRE_CONSULTA2

("${Parametro1_consulta_sql2}",${ Parametro2_consulta_sql2},${ Parametron_consulta_s

ql2})})

Exten,202,Set(variable_resultado_consultan=${PREFIJOn_NOMBRE_CONSULTA3

("${Parametro1_consulta_sqln}",${ Parametro2_consulta_sqln},${ Parametron_consulta_s

qln})})

El guión bajo de color rojo lo indicamos para diferenciar de forma clara que el

nombre del prefijo debe estar separado por un guión bajo del nombre de la consulta

definido en el fichero func_odbc.conf. En los ejemplos anteriores se han supuesto 3

extensiones diferentes 200, 201 y 202 para almacenar las respectivas variables de canal

que almacenarán el resultado de la consulta.

Cada una de las sentencias anteriores debe estar en una única línea.

Las variables ${Parametro1_consulta_sqln}, ${Parametro2_consulta_sqln},

${Parametron_consulta_sqln} deben ser datos almacenados previamente en estas

variables. Estos datos serán los argumentos que se pasarán a la consulta para que

devuelva los respectivos resultados.

En el caso del presente proyecto estos parámetros serán el DNI del alumno, el

nombre de la asignatura y la convocatoria.