Professional Documents
Culture Documents
OFICINA DE TIC
RECONOCIMIENTO DE VOZ
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
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.
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.
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.
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.
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
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
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
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.
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
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
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:
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
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:
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
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)).
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.
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.
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
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.
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.
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.
Los resultados obtenidos, en base a la confianza del performance del modelo de árbol de
profundidad 12:
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
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
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()
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)
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
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))
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