You are on page 1of 35

UNIVERSIDAD NACIONAL DE INGENIERÍA

FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS

OFICINA DE TIC

RECONOCIMIENTO DE VOZ

SISTEMA DESARROLLADO PARA EL CURSO


DE INTELIGENCIA ARTIFICIAL AVANZADA
Historial de Versiones

Autor Versión Descripción Fecha


1.0 Elaboración del formato 24/09/2016

Revisado y Aprobado por:

Nombre

Cargo

Firma

Nombre

Cargo

Firma
Tabla de contenido
1. DESCRIPCIÓN DEL SISTEMA....................................................................................4
2. DESCRIPCIÓN DEL PROBLEMA................................................................................4
3. ALCANCE DEL SISTEMA............................................................................................5
4. SELECCIÓN DE LA TÉCNICA PARA RESOLVER EL PROBLEMA.............................7
Extracción de características a corto plazo:...............................................................12
Extracción de características a medio plazo:..............................................................13
Eliminación de ruido y normalizar...............................................................................13
Filtración..................................................................................................................... 13
Procesamiento........................................................................................................... 13
5. PLAN PARA EL DESARROLLO DEL SISTEMA.........................................................14
6. DESCRIPCIÓN DE LA ARQUITECTURA DEL SISTEMA..........................................17
6.1. Arquitectura técnica............................................................................................17
Aparatos usados para capturar los datos.......................................................................17
7. DESCRIPCIÓN DE LOS DATOS DEL SISTEMA.......................................................18
8. DESCRIPCIÓN DEL PROTOTIPO DEL SISTEMA....................................................20
9. DESCRIPCIÓN DETALLADA DEL SISTEMA.............................................................20
10. RESULTADOS DEL SISTEMA IA...........................................................................20
11. TRABAJOS FUTUROS...........................................................................................20
12. REFERENCIAS......................................................................................................20
13. ANEXOS................................................................................................................. 20
14. ARCHIVOS FUENTES...........................................................................................21
1. DESCRIPCIÓN DEL SISTEMA

Nombre del sistema Reconocimiento de Voz


Descripción del Sistema El grupo de trabajo ha optado por realizar un proyecto
que consiste en crear un asistente personal para una
casa que escuche las órdenes, las analice y las
procese. De esta manera convertir una casa común en
una casa inteligente que se adapte mejor a nuestro
lenguaje y tener un mejor control sobre los elementos de
la casa.
Miembros del Equipo  Caicedo Reluz, Jhan Carlos
 Heredia Carrasco, Orlando
 Huaraca Berrospi, Angelo Michael
 Surichaqui Aquino, James Joel

Actualmente, en nuestra vida diaria, hacemos uso de muchos aparatos mientras estamos
en casa, en la oficina, en la universidad, etc. Dicho esto, en ocasiones sería mucho más
sencillo sin con tan sólo el uso de la voz pudiésemos controlar el funcionamiento de
dichos aparatos eléctricos y electrónicos: el encendido o apagado de un ventilador, por
citar un ejemplo. Esta sería pues, una funcionalidad muy útil que representaría una
solución no sólo para la mayoría de las personas (al facilitarle las cosas), sino para
personas discapacitadas que normalmente pueden presentar dificultades con el uso de
tales aparatos. En los últimos años, algunas empresas tecnológicas como Amazon y
Google están desarrollando dispositivos para el control de ciertos aparatos mediante la
voz, como es el caso de “Amazon Echo” que realiza estas funciones. Este trabajo está
tomando como referencia el método CRISP-DM, se desarrollará un modelo de
reconocimiento de voz mediante la técnica de árbol de decisiones, el que cual será
entrenado y puesto a prueba con el Dataset obtenido después de pre procesar las
grabaciones con la palabra PRENDETE y APAGATE, y haberlos transformados en
vectores, para poder así poder reconocer la palabra “PRENDETE”. Dicho modelo se
introducirá a un dispositivo inteligente el cual realizará la ejecución de la acción.

2. DESCRIPCIÓN DEL PROBLEMA


En nuestra vida diaria, las personas hacen uso de muchos aparatos mientras están en
casa, en la oficina, en la universidad o en otro lugar, etc. Dicho esto, en ocasiones se hace
difícil poder controlar el funcionamiento de estos aparatos eléctricos y electrónicos cuando
no nos encontramos en el mismo espacio (el encendido o apagado de un ventilador, por
citar un ejemplo). Este es un problema no sólo para la mayoría de las personas (al
facilitarle las cosas), sino además para personas discapacitadas que normalmente pueden
presentar dificultades con el uso de tales aparatos.
3. ALCANCE DEL SISTEMA

El proyecto planteado por el grupo tiene como finalidad obtener un sistema capaz de
controlar por reconocimiento de voz dispositivos electrónicos para ello nuestros datos de
entrada serán las señales de voz de un interlocutor que se halle próximo al dispositivo
inteligente.

Dicha señal de voz será procesada para ejecutar una acción en base a si esta señal es
fonéticamente congruente con las palabras “PRENDETE” y “APAGATE”.
“PRENDETE” y “APAGATE” serán las palabras cuyo sonido, al ser reconocido por el
dispositivo inteligente realizara una determinada acción, en este caso, el encendido y
apagado de algún otro aparato interconectado.
Dicha acción la realizara un servomotor o una señal eléctrica o infrarroja, dependiendo del
aparato final sobre el cual actuara nuestro dispositivo.
Este proceso intermedio consistirá en un modelo de reconocimiento de voz que detectará
un comando en base a la señal de voz captada por el dispositivo.

¿Pero, qué es una señal de voz?


La señal de voz está constituida por un conjunto de sonidos generados por el aparato
fonador. Esta señal acústica puede ser transformada por un micrófono en una señal
eléctrica, la señal de voz en el tiempo puede ser representada en un par de ejes
cartesianos y como todos los sonidos, está formado por curvas elementales (senos y
cosenos), pero las posibles combinaciones de estas pueden ser complejas.
La representación de la señal de voz en función del tiempo es importante puesto que
brinda información sobre características importantes como la energía y los cruces por
cero, las cuales facilitan su estudio y análisis.
A continuación se visualiza 3 señales de voz “PRENDETE” de nuestra muestra.
Señal Préndete: muestra 1
Señal Préndete: muestra 2

Señal Préndete: muestra 3

A continuación se visualiza 3 señales de voz “APAGATE” de nuestra muestra.

Señal Apágate: muestra 1 Señal Apágate: muestra 2

Señal Apágate:
muestra 3
4. SELECCIÓN DE LA TÉCNICA PARA RESOLVER EL PROBLEMA
Dentro de la técnica empleada para la elaboración del modelo se utilizó La técnica del
Árbol que representa un conjunto de decisiones. Estas decisiones generan reglas para la
clasificación de un conjunto de datos.

 Técnica del árbol de decisiones

Son modelos que tienen estructuras de forma de árbol que representan conjuntos de
decisiones. Estas decisiones generan reglas para la clasificación de un conjunto de datos.
Métodos específicos de árboles de decisión incluyen Árboles de Clasificación y Regresión
(CART: Classification And Regression Tree). Básicamente, los árboles de decisión, son
representaciones gráficas de la lógica de las probabilidades aplicada a las alternativas de
decisión. El tronco del árbol es el punto de partida de la decisión. Las ramas de éste
comienzan con la probabilidad del primer acontecimiento. La probabilidad de cada
acontecimiento produce dos o más efectos posibles, algunos de los cuales conducen a
otros 9 acontecimientos de probabilidad y a puntos de decisión subconsecuentes. Los
valores en los que se cifran las ramas del árbol, provienen de un análisis muy cuidadoso
que se basa en el establecimiento de un criterio para la toma de decisión.

Librerías o programas usados

Pyaudio
PyAudio proporciona enlaces Python para PortAudio, el audio multiplataforma biblioteca
de E / S.
Python puede utilizar PyAudio para reproducir y grabar audio en una variedad de
plataformas, tales como GNU / Linux, Microsoft Windows y Apple Mac OS X.
Proporciona métodos para:
 Inicializar y terminar PortAudio
 Apertura y cierre de flujos
 consultar e inspeccionar las PortAudio host APIs disponibles
 consultar e inspeccionar los dispositivos de audio PortAudio disponibles

PyaudioAnalisis
La librería pyAudioAnalisys de Python permite la extracción de características,
clasificación, segmentación y Aplicaciones para las señales de audio.
El usuario puede realizar las siguientes tareas:
 Extraer una amplia gama de características de audio y representaciones ( por ejemplo,
espectrograma , chromagram )
 Entrenamiento, sintonía de parámetros y evaluar clasificadores basados en segmentos
 Clasificar las muestras desconocidas
 Detectar eventos de audio y excluir a los periodos de silencio a partir de grabaciones de
larga duración
 Realizar la segmentación supervisada (es decir, aplicar un modelo de clasificacion en
segmentos de tamaño predeterminado)
 Realizar la segmentación sin supervisión
 Extraer imágenes en miniatura de audio
 Entrenar y utilizar modelos de regresión de audio (ejemplo de aplicación: el
reconocimiento de emociones)
 Aplicar técnicas de reducción de dimensionalidad para visualizar similitudes de datos y de
contenido de audio
MODELO DE SOLUCIÓN

1. Unidad o instancia de procesamiento

La unidad o instancia de procesamiento serían:


“Las grabaciones de voz que contengan que harán que se prenda o apague el dispositivo.
Dichos mensajes pueden contener:
 GRABACIÓN DE VOZ: “PRENDETE”

 GRABACIÓN DE VOZ: “APÁGATE”

 GRABACIÓN DE VOZ: “ENCIÉNDETE”

 GRABACIÓN DE VOZ: “DESVANECER”


 GRABACIÓN DE VOZ: “LUCES”

 GRABACIÓN DE VOZ: “OSCURIDAD”

 GRABACIÓN DE VOZ: “ILUMÍNATE”

 GRABACIÓN DE VOZ: “MITIGAR”


2. Definición de la clase o del target

La unidad o instancia de procesamiento serían:


Lo que se quiere es que el modelo detecte cuales de las grabaciones de voces que digan
la palabra “Préndete” y “Apágate”
CLASE Output
Grabación de voz que contenga la palabra "Préndete" 1
Grabación de voz que contenga la palabra "Enciéndete" 1
Grabación de voz que contenga la palabra "Luces" 1
Grabación de voz que contenga la palabra "Ilumínate" 1
Grabación de voz que contenga la palabra "Apágate" 0
Grabación de voz que contenga la palabra "Desvanecer" 0
Grabación de voz que contenga la palabra "Oscuridad" 0
Grabación de voz que contenga la palabra "Mitigar" 0

3. Tamaño de la muestra de trabajo

n= 384,16
Donde:
n = El tamaño de la muestra que queremos calcular
Z = Es la desviación del valor medio que aceptamos para lograr el nivel de confianza
deseado. En función del nivel de confianza que busquemos, usaremos un valor
determinado que viene dado por la forma que tiene la distribución de Gauss. Los valores
más frecuentes son:
Nivel de confianza 95% -> Z=1,96
e = Es el margen de error máximo que admito (p.e. 5%)
p = Es la proporción que esperamos encontrar. (50%)

4. Muestra de trabajo
5. Procedimiento de preparación de los datos.
Se empieza importando librerías las cuales nos permiten transformaciones de datos.
Se definen los parámetros.
Se captura la señal de audio por medio del micrófono y se empieza la grabación al

detectar una interrupción en el silencio.


Se define la función principal record () el cual empieza por crear, y abrir un canal para la
captura de la voz. Por este canal se lee los frame y luego estos son almacenados en un
array data_chuk para posteriormente almacenarlos en un data_all transformados en
formato de 16 bits. La función is_silent recibe como parámetro los data_chuk el cual
evalúa si estos frame sobrepasan el umbral mínimo de silencio definido anteriormente
para empezar a grabar o detener la grabación, este procedimiento es un bucle que en
todo momento
Todas las muestras son normalizadas y luego almacenadas en un array para
próximamente ser tratadas.
Para un mejor tratamientos de los datos (data_all) las funciones normalize y trim recibirán
como parámetro el data_all para normalizar los datos y recortar los silencios de las data
respectivamente.

Posteriormente a la captura del audio se procede a crea el archivo en formato wav,


asignándole el canal de audio, definiendo el ancho de las muestras en bytes, la frecuencia
de muestreo, y poder guardar en este archivo los frame cuya trama ha sido establecida
anteriormente.
Luego utilizaremos la librería pyAudioAnalysis para extraer las principales variables de
cada archivo de audio.
Hay dos etapas en la metodología de extracción de características de audio:

Extracción de características a corto plazo:


Esto se implementa en la función def stFeatureExtraction() del archivo
audioFeatureExtraction.py.
Se divide la señal de entrada en ventanas a corto plazo (frames) y calcula una serie de
características para cada trama. Este proceso da lugar a una secuencia de vectores de
características a corto plazo para toda la señal.
Extracción de características a medio plazo:
En muchos casos, la señal es representada por las estadísticas sobre las secuencias de
características a corto plazo extraídas descritas anteriormente. Con este fin, la función def
mtFeatureExtraction() del archivo audioFeatureExtraction.py extrae características
estadisticas (por ejemplo, media y desviación estándar) a lo largo de cada secuencia
característica de corto plazo. El número total de características a corto plazo
implementadas en pyAudioAnalysis es 34.

Explicación de cada una de las transformaciones.


Captura A/D

La señal de Voz se captura y se convierte en un archivo de audio mediante el uso del


micrófono. Este archivo de Audio es el que se procesara para obtener las variables
características de la señal de voz.

Eliminación de ruido y normalizar


Primero se realiza un filtrado de una señal para reducir los efectos del ruido que
acompañan la señal de voz ingresada, sin este filtrado se tendríamos datos que no
necesitamos.

Filtración
Para realizar un seguimiento de la señal un poco más de cerca, se puede utilizar un filtro
de media móvil ponderada que intenta adaptarse a un polinomio de un orden especificado
durante un número determinado de muestras en un sentido de mínimos cuadrados.
Finalmente podemos comparar a través de un plot la señal filtrada y la señal que
obtuvimos en el paso anterior.

Procesamiento

Luego al archivo de audio se le aplican las funciones de la librería pyAudioAnalisys para


obtener las variables o características de corto y largo plazo.
Dichas variables permiten definir y distinguir a la señal de audio de las demás, ya que son
características inherentes a la señal de voz que la genera.

5. PLAN PARA EL DESARROLLO DEL SISTEMA


Se procederá a utilizar la siguiente metodología
 Identificación
 Conceptualización
 Formalización
 Implementación
 Testeo
 Revisión del prototipo

FASE 1: IDENTIFICACIÓN
Abarca desde la lectura de libros o artículos, las entrevistas o charlas con las personas
familiarizadas con el tema y la búsqueda de un experto que esté dispuesto a colaborar
con la construcción del sistema; como así también la definición de cuáles son las
funciones o tarea más idóneas para ser realizadas por el sistema experto. Esas tareas
son importantes para determinar que lenguaje y que sistema se usará:
 Cumplir con todo los objetivos que se planteo
 Que el sistema experto brinde resultados eficientes

FASE 2: CONCEPTUALIZACIÓN
Se realizan entrevistas con el experto, con el objetivo de identificar y caracterizar el
problema informalmente. El experto de campo y el grupo definen el alcance del sistema
experto, es decir, que problemas va a resolver concretamente el sistema experto.

FASE 3: FORMALIZACIÓN
Con el problema adecuadamente definido el grupo empieza a determinar los principales
conceptos del dominio que se requieren para realizar cada una de las tareas que va a
resolver el sistema, tratando de entender conceptos que son relevantes e importantes
solicitándole al experto que explique y justifique los razonamientos que utiliza para
resolver los problemas. Esto es importante para la tarea de definición del sistema experto
y para mantener una adecuada documentación del mismo, ya que es útil para la tarea de
diseño, construcción y para posteriores modificaciones del sistema.
La estructura del conocimiento indica que tareas y que términos está usando y la
estrategia indica cómo y cuándo el sistema experto debe establecerlas.

FASE 4: IMPLEMENTACIÓN
Crear un prototipo del sistema experto para así comprobar si hemos conceptualizado bien
la solución del problema.
Formalizar el conocimiento obteniendo del experto y elegir la organización y el lenguaje de
programación, en nuestro caso se podría usar Java o implementarlo en php con Mysql
para que se una herramienta web.

FASE 5: PRUEBA
Se refina el sistema prototipo, depurado la base de conocimiento, refinando reglas,
rediseñando la estructura del conocimiento, o reformulando conceptos básicos, con el
objetivo de capturar información adicional que haya proporcionado el experto. También se
consultan en esta etapa otros expertos para, corroborar, controlar, ampliar y refinar el
prototipo.

FASE 6: REVISIÓN DEL PROTOTIPO


Cuando el sistema prototipo ha crecido tanto que resulta difícil de manejar se debe
rediseñar un sistema más eficiente. Este nuevo sistema deberá refinarse y extenderse a
fin de completar así el desarrollo del sistema experto.

Plan de desarrollo del sistema experto:

MES SETIEMBRE OCTUBRE NOVIEMBRE


SEMANAS SEMANAS SEMANAS
N FASE 1 2 3 4 1 2 3 4 1 2 3 4
1 Revisión bibliográfica
2 Entrevista con personas
relacionadas

3 Planeación de entrevista
con experto
Esquematización del
4 proceso general de
solución
Realización de entrevista
5
con experto
6 Definición del problema

7 Definición del alcance


del sistema

8 Identificación de las
actividades de solución
Determinación de los
9 conceptos de dominio
por actividad
Definición de estrategias
10 para completar las
actividades
11 Recolección de datos

12 Procesamiento y
creación del dataset
13 Creación del prototipo
14 Diseño de los casos de
pruebas
Realización de las
15 pruebas de funcionalidad
y control
Refinamiento y rediseño
del sistema según los
16
resultados de las
pruebas

17 Consulta a expertos de la
efectividad del modelo
Preparación de la
18 presentación y
documentación

19 Presentación del
prototipo a la clase

Plan de actividades por fase:

TIEMPO
FASE ACTIVIDAD RECURSOS (Días)
Revisión bibliográfica Todos 14
Entrevista con personas relacionadas OH, JS. 14
IDENTIFICACIÓN Planeación de entrevista con experto AH, JC 14
Esquematización del proceso general de
solución Todos 14
CONCEPTUALIZACIÓN Realización de entrevista con experto OH, AH 10
Definición del problema JC, JS 12
Definición del alcance del sistema JS 11
Identificación de las actividades de solución Todos 10
Determinación de los conceptos de dominio
por actividad Todos 13
FORMALIZACIÓN
Definición de estrategias para completar las
actividades Todos 12
Recolección de datos Todos 9
IMPLEMENTACIÓN Procesamiento y creación del dataset Todos 18
Creación del prototipo JC, JS 20
Diseño de los casos de pruebas AH 5
Realización de las pruebas de funcionalidad
y control OH 10
PRUEBA Refinamiento y rediseño del sistema según
los resultados de las pruebas Todos 9
Consulta a expertos de la efectividad del
modelo Todos 4
Preparación de la presentación y
REVISIÓN DEL PROTOTIPO documentación Todos 10
Presentación del prototipo a la clase Todos 1

Leyenda:

OH: Orlando Heredia

JC: Jhan Caicedo

JS: James Surichaqui

AH: Angelo Huaraca

6. DESCRIPCIÓN DE LA ARQUITECTURA DEL SISTEMA


6.1. Arquitectura técnica

Pyaudio
PyAudio proporciona enlaces Python para PortAudio, el audio multiplataforma
biblioteca de E / S.
Python puede utilizar PyAudio para reproducir y grabar audio en una variedad de
plataformas, tales como GNU / Linux, Microsoft Windows y Apple Mac OS X.
Proporciona métodos para:
 Inicializar y terminar PortAudio
 Apertura y cierre de flujos
 consultar e inspeccionar las PortAudio host APIs disponibles
 consultar e inspeccionar los dispositivos de audio PortAudio disponibles
PyaudioAnalisis
La librería pyAudioAnalisys de Python permite la extracción de características,
clasificación, segmentación y Aplicaciones para las señales de audio.
El usuario puede realizar las siguientes tareas:
 Extraer una amplia gama de características de audio y representaciones ( por ejemplo,
espectrograma , chromagram )
 Entrenamiento, sintonía de parámetros y evaluar clasificadores basados en segmentos
 Clasificar las muestras desconocidas
 Detectar eventos de audio y excluir a los periodos de silencio a partir de grabaciones
de larga duración
 Realizar la segmentación supervisada (es decir, aplicar un modelo de clasificacion en
segmentos de tamaño predeterminado)
 Realizar la segmentación sin supervisión
 Extraer imágenes en miniatura de audio
 Entrenar y utilizar modelos de regresión de audio (ejemplo de aplicación: el
reconocimiento de emociones)
 Aplicar técnicas de reducción de dimensionalidad para visualizar similitudes de datos
y de contenido de audio
Aparatos usados para capturar los datos.

Micrófono

Máquina para el procesamiento


7. DESCRIPCIÓN DE LOS DATOS DEL SISTEMA

Dentro de los atributos que se tomó en cuenta para la data y que fueron obtenidos de un
artículo de pre procesamiento de voz tenemos:
A) Zero Crossing Rate
En el contexto de señales de tiempo discreto, se dice que un paso por cero ocurre si
muestras sucesivas tienen diferentes signos algebraicos. La velocidad a la que se
producen los cruces por cero es una medida simple del contenido de frecuencia de una
señal. La tasa de cruce por cero es una medida del número de veces en un intervalo de
tiempo / trama dada que la amplitud de las señales de voz pasa a través de un valor de
cero.

B) Energy
La amplitud de los segmentos sin voz es notablemente inferior a la de los segmentos
sonoros.

C) Entropy of Energy
La entropía de energías normalizados subtramas. Puede interpretarse como una medida
de los cambios bruscos.

D) Spectral Centroid
El centroide espectral se asocia comúnmente con la medida del brillo de una sonar. Esta
medida se obtiene evaluando el "centro de gravedad" por medio de la transformada de
Fourier de transformar la información de la frecuencia y magnitud. El centroide individual
de una trama espectral que se define como la frecuencia media ponderada por
amplitudes, dividido por la suma de las amplitudes, o:

Aquí, F [k] es la amplitud correspondiente a bin k en el espectro DFT


En la práctica, centroide encuentra esta frecuencia para una trama dada, y luego
encuentra la más cercana bin espectral para esa frecuencia. El centro de gravedad es por
lo general mucho más alto de lo que cabría intuitivamente esperar, porque hay mucha
más energía por encima (de debajo) de la que fundamental que contribuye a la media.

E) Spectral Spread
El espectro ensanchado (también llamado espectro esparcido, espectro disperso, spread
spectrum o SS) es una técnica de modulación empleada en telecomunicaciones para la
transmisión de datos digitales y por radiofrecuencia.

F) Spectral Entropy
La entropía de las energías espectrales normalizadas para un conjunto de sub-tramas.

G) Spectral Flux
El flujo del espectro es una medida de la rapidez con que el espectro de potencia de una
señal se cambia, calculado comparando el espectro de potencia para una trama contra el
espectro de potencia de la trama anterior. Más precisamente, generalmente se calcula
como el 2-norma (también conocido como la distancia euclidiana) entre los dos espectros
normalizados. Calculado esta manera, el flujo del espectro no depende de la potencia total
(ya que los espectros se normalizan), ni en consideraciones de fase (ya que sólo las
magnitudes se comparan). El flujo del espectro se puede utilizar para determinar el timbre
de una señal de audio, o en la detección de la aparición, entre otras cosas.

H) Spectral Rollof
También llamado gradiente espectral, es una medida de la dependencia de la reflectancia
en la longitud de onda.
La expresión deriva de la noción de planear el rango de frecuencia de audio de un
componente en forma de un gráfico.Se utiliza para distinguir la voz de la voz no hablada o
la música

I) MFCCs (Mel Frequency Cepstral Coefficients)


Coeficientes Cepstrales en las Frecuencias de Mel o MFCCs son coeficientes para la
representación del habla basados en la percepción auditiva humana. Estos surgen de la
necesidad, en el área del reconocimiento de audio automático, de extraer características
de las componentes de una señal de audio que sean adecuadas para la identificación de
contenido relevante, así como obviar todas aquellas que posean información poco valiosa
como el ruido de fondo, emociones, volumen, tono, etc. y que no aportan nada al proceso
de reconocimiento, al contrario lo empobrecen.

J) Chroma Vector
Un chroma Vector es calculado de la frecuencia espectral y representa como el fuerte
poder de cada tono tiene

K) Chorma Deviation
La desviación estándar de los 12 coeficientes de crominancia.
La desviación estándar es la raíz cuadrada de la media de las desviaciones al cuadrado
de la media, es decir, std = sqrt (media (abs (x - x.mean ()) ** 2)).

8. DESCRIPCIÓN DEL PROTOTIPO DEL SISTEMA

El sistema de reconocimiento de voz ejecutara la instrucción de imprimir en pantalla la


palabra reconocida.
El sistema captura el sonido cuando este sobrepasa el umbral del silencio que se ha
definido, esta información es almacenada y a continuación se les extraen sus
características, y es en base a esto que el motor de inferencia del modelo tomara una
decisión.

9. DESCRIPCIÓN DETALLADA DEL SISTEMA


Dentro de la técnica empleada para la elaboración del modelo se utilizó La técnica del
Árbol que representa un conjunto de decisiones. Estas decisiones generan reglas para la
clasificación de un conjunto de datos.

DESARROLLO DEL MODELO DE CLASIFICACION

El proceso para la obtención del modelo de clasificación se ha realizado siguiendo la secuencia del
flujo de procesos que se muestra a continuación.

Fig. : Esquema de los sub procesos del modelo de clasificación

Después de haber identificado los atributos más significativos para este proyecto, se ha
seleccionado todos los datos con estos atributos mediante el operador Select Attrib, a
partir de esta muestra trabajar en nuestro modelo.

Fig. : Esquema de sub procesos de muestreo

Luego de haber seleccionado nuestra muestra, el conjunto de voz “Préndete” se ha


balanceado y se obtuvo como resultado 200 casos positivos, 200 casos negativos y 253
casos de otros.

 “Target = 1” tiene un tamaño de 200


 “Target = 2” tiene un tamaño de 200
 “Target = 0” tiene un tamaño de 253
Fig. : Esquema del proceso de balance

Las 653 muestras son divididas en dos conjuntos de muestras a las que llamaremos
DataTrain que contendrá el 70% de las muestras, las cuales son utilizadas para construir
el modelo de clasificación estos permitirán ajustar el algoritmo de Decisión Tree y DataSet
la cual tendrá el 30% de las muestras el cual nos proporcionara el rendimiento real del
modelo.

PROCESO DE ENTRENAMIENTO

A partir del conjunto de datos de entrenamiento se obtiene el ajuste para el modelo de


clasificación.
Para determinar el mejor modelo de árbol empezamos a generar modelos con diferentes
tamaños de profundidad, como se observa a continuación:

Fig.: Sub proceso de Desarrollo del Modelo con profundidad 2, 3, 4, 5.


Fig. : Sub proceso de Desarrollo del Modelo con profundidad 6, 7, 8, 9.

Fig. : Sub proceso de Desarrollo del Modelo con profundidad 10, 11, 12, 13.

Fig. : Sub proceso de Desarrollo del Modelo con profundidad 14, 15, 16, 17.
Fig. : Sub proceso de Desarrollo del Modelo con profundidad 18, 19, 20, 21.

Fig. : Sub proceso de Desarrollo del Modelo con profundidad 30, 60, 100.

De la ejecución de los modelos, obtenemos la matriz de confusión, y recogemos los


valores VP y VPP de todos los modelos que se han evaluado, a continuación lo
mostramos en la siguiente tabla:

tamaño del árbol VP VPP


2 232 78.64%
3 241 86.11%
4 253 90.68%
5 255 92.73%
6 255 94.44%
7 255 95.86%
8 255 96.59%
9 255 97.33%
10 254 97.69%
11 253 98.06%
12 252 98.44%
13 252 98.44%
14 252 98.44%
15 252 98.44%
16 252 98.44%
tamaño del árbol VP VPP
17 252 98.44%
18 252 98.44%
19 252 98.44%
20 252 98.44%
21 252 98.44%
30 252 98.44%
60 252 98.44%
100 252 98.44%

Tabla : VP y VPP de los modelos de árbol según su profundidad.

PROCESO DE PRUEBA

Una vez que se haya obtenido el modelo a partir del conjunto de entrenamiento, se
prueba realizando predicciones con el conjunto de pruebas. Dado que los datos del
conjunto de prueba ya contienen valores conocidos para el atributo que desea predecir, es
fácil determinar si las estimaciones del modelo son correctas.

La matriz de confusión del modelo permite evaluar los resultados de predicción, hace que
resulte fácil de entender y explicar los efectos de predicciones erróneas.
Al ver la cantidad y los porcentajes en cada celda de la matriz, podrá saber en cuantas
ocasiones ha sido exacta la predicción del modelo.
El modelo predijo 46 casos como PRENDETE cuando se quiere encender el dispositivo
electrónico, 56 casos como APAGATE y 81 casos como OTROS.

Fig. : Cuadro de confusión.

FUNCIONAMIENTO FINAL

Para este proceso de predicción se empieza por generar el modelo de árbol de decisión
con el operador Decision Tree el cual es aplicada al Data Train que ha sido preparado con
los proceso vistos anteriormente con el fin de aplicar el modelo generado al Data Test y
poder concluir con la predicción.
Fig. : Sub proceso Aplicar Modelo.

10. RESULTADOS DEL SISTEMA IA

Los resultados obtenidos, en base a la confianza del performance del modelo de árbol de
profundidad 12:

Fig.: Sub proceso Aplicar Modelo.


11. TRABAJOS FUTUROS

Los resultados y las conclusiones a lo largo de este documento se ha demostrado que es


una herramienta capaz y que ofrece un buen aporte a los usuarios.

MEJORAS AL PROCESO ACTUAL.

Una vez finalizado el desarrollo de la herramienta, han sido planteados sugerencias y


comentarios que podrán mejorar al proceso actual.

a. Incrementar alcance de predicción.

El modelo desarrollado en este trabajo ejecuta las instrucciones de imprimir en pantalla


dichas instrucciones según el reconocimiento de estas: préndete, apagado, otros.
Para futuros trabajos se sugiere incrementar el vocabulario, y permitir el reconocimiento
de diversos sonidos de diferentes palabras.

b. Implementar el modelo en Dispositivo Electrónico.

Implementar en funcionamiento en dispositivos electrónicos, logrando el fin último de este


trabajo.

12. REFERENCIAS

Artìculo:
 PyAudioAnalysis: An Open-Source Python Library for Audio Signal Analysis
Gianni Pavan, University of Pavia, ITALY
Published: December 11, 2015
 Detect & Record Audio in Python
Stackoverflow
13. ANEXOS

ANEXO: ARBOL DE DECISIÓN

ANEXO ALGORITMO: ARBOL DE DECISIÓN


DEF RESPUESTA(MFCCS_3, MFCCS_11, SPECTRAL_CENTROID, MFCCS_7,
CHROMA_VECTOR_1, MFCCS_12, CHROMA_VECTOR_7

, CHROMA_VECTOR_8, SPECTRAL_SPREAD, MFCCS_4, MFCCS_6, ENERGY,


CHROMA_VECTOR_9, MFCCS_13, MFCCS_5, CHROMA_VECTOR_5):
IF MFCCS_3 > 0.202:
IF MFCCS_11 > -0.297:
IF SPECTRAL_CENTROID > 0.127:
PRINT 'OTROS'
IF SPECTRAL_CENTROID == 0.127:
IF MFCCS_7 > 0.122:
PRINT 'OTROS'
IF MFCCS_7 == 0.122:
IF MFCCS_12 > 0.129:
PRINT 'OTROS'
IF MFCCS_12 == 0.129:
IF CHROMA_VECTOR_1 > 0.006:
IF CHROMA_VECTOR_7 > 0.071:
PRINT 'OTROS'
IF CHROMA_VECTOR_7 == 0.071:
IF CHROMA_VECTOR_8 > 0.007:
PRINT 'OTROS'
IF CHROMA_VECTOR_8 == 0.007:
IF CHROMA_VECTOR_7 > 0.027:
IF SPECTRAL_SPREAD > 0.141:
IF MFCCS_4 > 0.093:
PRINT 'OTROS'
IF MFCCS_4 == 0.093:
PRINT 'PRENDETE'
IF SPECTRAL_SPREAD == 0.141:
PRINT 'OTROS'
IF CHROMA_VECTOR_7 == 0.027:
PRINT 'PRENDETE'
IF CHROMA_VECTOR_1 == 0.006:
PRINT 'OTROS'
IF MFCCS_11 == -0.297:
PRINT 'APAGATE'
IF MFCCS_3 == 0.202:
IF CHROMA_VECTOR_7 > 0.008:
IF MFCCS_6 > 0.511:
PRINT 'PRENDETE'
IF MFCCS_6 == 0.511:
IF SPECTRAL_CENTROID > 0.121:
PRINT 'OTROS'
IF SPECTRAL_CENTROID == 0.121:
IF ENERGY > 0.028:
PRINT 'OTROS'
IF ENERGY == 0.028:
IF CHROMA_VECTOR_9 > 0.003:
IF MFCCS_13 > 0.103:
PRINT 'PRENDETE'
IF MFCCS_13 == 0.103:
IF MFCCS_5 > -0.476:
IF CHROMA_VECTOR_5 > 0.031:
PRINT 'OTROS'
IF CHROMA_VECTOR_5 == 0.031:
IF MFCCS_7 > 0.276:
PRINT 'OTROS'
IF MFCCS_7 == 0.276:
IF MFCCS_4 > -0.202:
PRINT 'APAGATE'
IF MFCCS_4 == -0.202:
PRINT 'OTROS'
IF MFCCS_5 == -0.476:
PRINT 'OTROS'
IF CHROMA_VECTOR_9 == 0.003:
PRINT 'PRENDETE'
IF CHROMA_VECTOR_7 == 0.008:
PRINT 'PRENDETE'
RETURN

ANEXO PYTHON: PYAUDIO


from array import array
from struct import pack
from sys import byteorder
import copy
import pyaudio
import wave

THRESHOLD = 3000 # audio levels not normalised.


CHUNK_SIZE = 1024
SILENT_CHUNKS = (16000 / 1024) * 0.25 # about 1sec
FORMAT = pyaudio.paInt16
FRAME_MAX_VALUE = 2 ** 15 - 1
NORMALIZE_MINUS_ONE_dB = 10 ** (-1.0 / 20)
RATE = 16000
CHANNELS = 1
TRIM_APPEND = RATE / 4

def is_silent(data_chunk):
"""Returns 'True' if below the 'silent' threshold"""
return max(data_chunk) < THRESHOLD

def normalize(data_all):
"""Amplify the volume out to max -1dB"""
# MAXIMUM = 16384
normalize_factor = (float(NORMALIZE_MINUS_ONE_dB * FRAME_MAX_VALUE)
/ max(abs(i) for i in data_all))

r = array('h')
for i in data_all:
r.append(int(i * normalize_factor))
return r

def trim(data_all):
_from = 0
_to = len(data_all) - 1
for i, b in enumerate(data_all):
if abs(b) > THRESHOLD:
_from = max(0, i - TRIM_APPEND)
break

for i, b in enumerate(reversed(data_all)):
if abs(b) > THRESHOLD:
_to = min(len(data_all) - 1, len(data_all) - 1 - i + TRIM_APPEND)
break

return copy.deepcopy(data_all[_from:(_to + 1)])

def record():
"""Record a word or words from the microphone and
return the data as an array of signed shorts."""
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True,
output=True, frames_per_buffer=CHUNK_SIZE)

silent_chunks = 0
audio_started = False
data_all = array('h')

while True:
# little endian, signed short
print("data_chunk")
data_chunk = array('h', stream.read(CHUNK_SIZE))
if byteorder == 'big':
data_chunk.byteswap()
data_all.extend(data_chunk)
#print(data_all)

silent = is_silent(data_chunk)
print("ESTADO DEL SILENCIO")
print(silent)

if audio_started:
if silent:
silent_chunks += 1
print(silent_chunks)
if silent_chunks > SILENT_CHUNKS:
print("Encontro el silencio final")
break
else:
silent_chunks = 0
print(silent_chunks)
elif not silent:
print("Encontro el ruido")
audio_started = True

sample_width = p.get_sample_size(FORMAT)
stream.stop_stream()
stream.close()
p.terminate()

data_all = trim(data_all) # we trim before normalize as threshhold applies to un-normalized


wave (as well as is_silent() function)
data_all = normalize(data_all)
print("data all:")
print(data_all)
print("sample_width")
print(sample_width)
return sample_width, data_all

def record_to_file(path):
print("Records from the microphone and outputs the resulting data to path")
sample_width, data = record()
print("pack")
data = pack('<' + ('h' * len(data)), *data)

wave_file = wave.open(path, 'wb')


print("open")
wave_file.setnchannels(CHANNELS)
print("channels")
wave_file.setsampwidth(sample_width)
print("samp width")
wave_file.setframerate(RATE)
print("rate")
wave_file.writeframes(data)
print("cerrando")
wave_file.close()

if __name__ == '__main__':
#empezar a grabar
print("Wait in silence to begin recording; wait in silence to terminate")
record_to_file('../sonido/demo2.wav')
print("done - result written to demo.wav")
#llamar a la funcion de procesamiento -- obtener las caracteristcias (vector caracteristica)
#llamar a la funcion para aplicar el modelo -- rapdi minner en base al vector del punto
anterior
#obtener el resultado predecido -- si es la palabra o no (target predecido)
# si el correcto => funcionar el dispositov (prender luz)
#Ir a "empezar a grabar"
ANEXO PYTHON: PYAUDIOANALISIS

import sys
import time
import os
import glob
import numpy
import cPickle
import aifc
import math
from numpy import NaN, Inf, arange, isscalar, array
from scipy.fftpack import rfft
from scipy.fftpack import fft
from scipy.fftpack.realtransforms import dct
from matplotlib.mlab import find
import matplotlib.pyplot as plt
from scipy import linalg as la
import audioTrainTest as aT
import audioBasicIO
import utilities
from scipy.signal.signaltools import lfilter
from scipy.signal.windows import hamming
from scikits.talkbox import lpc
eps = 0.00000001

""" Time-domain audio features """

def stZCR(frame):
"""Computes zero crossing rate of frame"""
count = len(frame)
countZ = numpy.sum(numpy.abs(numpy.diff(numpy.sign(frame)))) / 2
return (numpy.float64(countZ) / numpy.float64(count-1.0))

def stEnergy(frame):
"""Computes signal energy of frame"""
return numpy.sum(frame ** 2) / numpy.float64(len(frame))

def stEnergyEntropy(frame, numOfShortBlocks=10):


"""Computes entropy of energy"""
Eol = numpy.sum(frame ** 2) # total frame energy
L = len(frame)
subWinLength = int(numpy.floor(L / numOfShortBlocks))
if L != subWinLength * numOfShortBlocks:
frame = frame[0:subWinLength * numOfShortBlocks]
# subWindows is of size [numOfShortBlocks x L]
subWindows = frame.reshape(subWinLength, numOfShortBlocks, order='F').copy()

# Compute normalized sub-frame energies:


s = numpy.sum(subWindows ** 2, axis=0) / (Eol + eps)
# Compute entropy of the normalized sub-frame energies:
Entropy = -numpy.sum(s * numpy.log2(s + eps))
return Entropy

14. ARCHIVOS FUENTES

Fecha de Fecha de
Nombre de archivo Extensión Autor
creación modificación
py 26/10/2016 Librería
audioFeatureExtraction 26/11/2016
Python
ExtraerCaracteristicas py 26/10/2016 26/11/2016 Fuente Propia
py 26/10/2016 Librería
grabarAudio 26/11/2016
Python
modelo Py 26/10/2016 26/11/2016 Fuente Propia
nuevo Py 26/10/2016 26/11/2016 Fuente Propia
caracteristicas csv 26/10/2016 26/11/2016 Fuente Propia
dataTrain mod 26/10/2016 26/11/2016 Fuente Propia
dataTest mod 26/10/2016 26/11/2016 Fuente Propia

You might also like