domingo, 22 de abril de 2012

Reconocimiento de voz, comparando alternativas

Ya hablamos en el post anterior de lo que son los SDCs y de que podrían suponer una mejora en nuestro sistema. Sin embargo, a pesar de lo que se explica en algunos artículos, parece no ser así.

Las pruebas han demostrado que los scores no son muy altos ni para MFCCs + Δ ni para SDCs. Pero son algo mejores con MFCCs, ya que si el locutor se corresponde con el DNI dado, el score es más alto.

Estos scores, obtenidos mediante ALIZE, son un número que oscila alrededor de 0. El score representa el parecido, siendo positivo si hay parecido y negativo si no.

Para comparar ambas técnicas, se han generado dos UBMs, uno con MFCCs y otro con SDCs. Entrenamiento de modelos adaptados y login se hacen por duplicado para poder mostrar al final los dos scores y así comparar la eficacia de cada método.

Los últimos UBMs que estamos usando cuentan con 240 grabaciones de 5 minutos cada una. Realmente las grabaciones duran media hora, pero tenemos un compromiso con el tiempo de procesado, por lo que hemos tomado una parte lo suficientemente larga como para que el locutor pueda hablar bastante.

Aquí hay algunos datos sobre los UBMs que hemos entrenado en los últimos días, empezando por aquel que no pudo acabarse porque llevó más de medio día.




sábado, 21 de abril de 2012

Demos hito 2

Estas son las demos que grabamos para el hito 2.

Como YouTube no presenta problemas para reproducir .ogv las ponemos aquí, y para la próxima vez prepararemos los archivos en un formato más habitual.

El de voz:


El de facial:




viernes, 20 de abril de 2012

Qué son los SDCs, comparación con MFCCs


Ya hablamos en el post que describe las fases en la verificación de locutor de lo que son los MFCCs ( Mel-frequency cepstral coefficients ). Los MFCCs son coeficientes de información de tramas de audio que usamos para generar los modelos y hacer las comparaciones.

Los vectores de información de cada trama están compuestos por 12 MFCCs y el valor medio de la energía en la trama. A continuación se concatenan las derivadas Δ de cada dimensión teniendo en cuenta dos tramas por delante y dos tramas por detrás de la actual. Haciendo el mismo proceso sobre los coeficientes, se obtienen las segundas derivadas o ΔΔ.


Para cada trama de 20 ms habrá por tanto 12 coeficientes de información instantánea y sobre su primera y segunda derivadas. La energía sólo sirve para detectar tramos de silencio, pero no se tiene en cuenta al generar modelos. Por tanto, hay 36 dimensiones de información sobre el locutor.


Para conseguir mejores modelos y mejores tasas de acierto vamos a probar otra técnica, desarrollada posteriormente y que implicó un avance en el reconocimiento de voz. Consiste en generar unos coeficientes diferentes llamados SDCs ( Shifted Delta Coefficients ).

Los vectores de información son más sofisticados pero su elaboración más compleja. En vez de obtener 12 MFCCs se calculan 7. Después, para cada dimensión se calcula la primera derivada de una forma diferente a antes. Se recoge información de un mayor número de tramas por delante y por detrás de la actual, y se guarda el un vector de 7 dimensiones. Como esto se hace para cada coeficiente cepstral, se obtienen 49 dimensiones de derivada. Por tanto, consevando los originales, se tienen 56 dimensiones.



Para esta tarea se usa ShiftedDeltaFeat, una herramienta del paquete LIA_RAL. El resto de fases de la verificación de locutor son las mismas que antes y los modelos se entrenan con estas 56 dimensiones.

En definitiva, como se extrae información más útil de las tramas de audio, los modelos son más completos y el sistema es más robusto.

Como no hemos tenido realmente tiempo de probarlo, tan sólo de implementarlo y de construir un modelo sencillo, esperamos evaluar esta alternativa tras las presentaciones del hito 2.

Para la presentación no contamos con un UBM complejo, por lo que los resultados no serán asombrosos. Confiamos en que con la elaboración de un UBM a partir de más datos, consigamos unos scores congruentes.





jueves, 19 de abril de 2012

Primera demo del reconocimiento de voz

El primer paso fue aprender las bases de cómo funciona ALIZE gracias a las detalladas explicaciones de nuestro profesor y un par de artículos. Lo siguiente fue ponerse manos a la obra para diseñar una interfaz que permita la ejecución de estas herramientas de forma conjunta.

Esta interfaz es una página web de test lo más simple posible. Las funciones imprescindibles son las de Login y Entrenamiento. La primera permite a un usuario escribir su DNI y usar su voz como contraseña, independientemente de las palabras que diga. Para que esto sea viable, el usuario debe haber realizado previamente la fase de entrenamiento.


Una tercera funcionalidad que implementé una vez estuvieron las dos anteriores terminadas fue la de registrar un nuevo usuario y entrenarlo en un sólo paso. Sin duda, esta se ha convertido en la manera más rápida de incorporar usuarios al sistema, haciendo que las pruebas lleven menos tiempo. Un beneficio colateral es que podremos mostrar la demo a compañeros de práctica innovadora y en cuestión de un minuto serán capaces de hacer login usando su voz.

Página para hacer login.

Para evitar decepciones, tengo que ser realista y aclarar que el sistema ahora mismo no es muy eficaz. Ahora mismo hay un modelo global con muy pocos datos y las configuraciones de las herramientas de LIA_RAL no se han optimizado. Mi compañero (Álvaro) y yo (Guillermo) hemos comprobado de primera mano que a veces no funciona, ya sea por el ruido o por la calidad de la grabación. En cualquier caso, esperamos que usar modelos más complejos elevará la tasa de acierto hasta un nivel presentable.

En cualquier caso, la interfaz de test ya ha sido terminada y el próximo paso es trasladar toda la lógica y llamadas a programas a la plantilla de la página web de laboratorios del departamento de ingeniería electrónica. Por otro lado y no menos importante, queremos un sistema eficaz. Una vez logrados ambos objetivos en esta parte de reconocimiento de voz podremos empezar una nueva etapa que podría considerarse mejora y que revelaremos durante la presentación del segundo hito.


Página para realizar las grabaciones de entrenamiento.


martes, 17 de abril de 2012

Cambio en el plugin de video

Dados los muchos problemas que nos estaba dando el plugin de video que usábamos (jQuery Webcam plugin) hemos decidido cambiarlo por otro que hemos encontrado en la web, y que podéis encontrar en la sección de enlaces interesantes, llamado jpegwebcam

Este plugin es mucho más sencillo que el anterior (de hecho, hemos tardado 20 minutos en tenerlo completamente operativo, mientras que con el otro invertimos varios días). Este plugin soluciona los principales fallos que teníamos con el otro, como la lentitud a la hora de realizar una fotografía y que sólo se pudiese hacer una foto sin que la página se atrancase.

Una vez solucionado el tema de la captura de video dedicaremos los próximos días a buscar cómo podemos realizar el reconocimiento facial con las fotos capturadas.


domingo, 15 de abril de 2012

Reconocimiento facial con Matlab

Finalmente decidimos repartirnos el trabajo, encargándose Guillermo de la parte de identificación por voz y yo (Álvaro) de la parte de reconocimiento facial.

Como ya comentamos en la presentación, el programa elegido para realizar esta función es Matlab. Una de las razones por las que finalmente nos decantamos por Matlab en lugar de otros sistemas como OpenCV fue la inmensa cantidad de programas ya hechos sobre el tema, que utilizaremos para realizar nuestro reconocimiento. En concreto, usaremos en un principio este:

http://www.mathworks.com/matlabcentral/fileexchange/17032-pca-based-face-recognition-system/all_files

Este programa es lo suficientemente intuitivo como para realizar una primera aproximación al reconocimiento facial. Si bien hay muchos otros programas mucho mejores y con menores tasas de error, éste no requiere la instalación de ningún toolkit (de pago) y funciona bastante rápido con bases de datos de tamaño razonable, aparte de consistir únicamente en tres métodos que se ejecutan uno después del otro, siendo como decimos muy fácil de utilizar incluso para los que, como nosotros, no estamos muy versados en el uso de Matlab.

¿Cómo funciona el reconocimiento facial?

El sistema está basado en dos procedimientos:

- Análisis de componentes principales (PCA: Principal Components Analysis): Es un método estadístico que consiste en reducir la dimensionalidad de un conjunto de datos viendo los factores (componentes) que más influyen en la variabilidad del conjunto, dándole más importancia que a los menos influyentes. Dado que buscamos reconocer a la persona que se hace la foto este paso es de suma importancia, ya que nos dice qué elementos diferencian una cara de otra.


 - "Autocaras" (Eigenfaces): Estas caras características representan el conjunto de características (componentes) de cada rostro. Cada autocara representa una característica de los modelos de caras usados para entrenar, por lo que una cara será la suma de todas las autocaras multiplicadas por unos pesos, lo que nos dice cuánto se parece la cara a cada una de las características. Esta basado en el Algebra Lineal, ya que estas caras pueden considerarse autovectores del espacio de todas las características.



El paso final consiste en hallar la distancia euclídea entre cada una de las posibilidades y la cara a comprobar, y elegir la distancia menor.




sábado, 7 de abril de 2012

Fases en la verificación de locutor

Ya tenemos la voz capturada con WAMI, pero no hay que olvidar que nuestro objetivo real es la autentificación, es decir, dar o no permiso a una persona que intenta entrar a nuestra página web.

En otras palabras, el usuario que trata de hacer login con su DNI o username graba una frase para que el sistema determine si esa voz se corresponde con ese usuario. Debemos llegar a un valor numérico que represente el parecido de esa voz grabada con las voces que tenemos guardadas en nuestra base de datos. Si el parecido es alto, se permite el acceso al usuario, y en caso contrario no.

Pero, ¿cómo llegamos desde una grabación de voz hasta un número? El reconocimiento por voz es un campo que está en pleno desarrollo, produciéndose avances con técnicas y algoritmos más fiables cada poco tiempo. Nosotros no vamos a usar las mejores herramientas que existen hoy en día, ya que su complicación supera el nivel de la práctica.

Nuestra prioridad es obtener resultados, sin importar por ahora tener excelente fiabilidad. Las técnicas empleadas pueden modificarse y refinarse en el futuro, que será lo que haremos si tenemos tiempo para perfeccionar la práctica.

En este post vamos a describir cada una de las fases principales que toman parte en el entrenamiento y autentificación en nuestro sistema. El diagrama es el siguiente, y previsiblemente se irá completando con más información a medida que entremos en detalle.

https://bubbl.us/