You are on page 1of 10

PUCMM

Pontificia Universidad Catlica Madre y Maestra Facultad de Ciencias de las Ingeniera Departamento de Ingeniera en Sistema Y Telemtica Santiago

April 12

Comunicaciones Digitales
Identificador del Hablante

2011
Nstor Daz

Vctor Santos 2004-6233

Introduccio n
El reconocimiento de voz es el proceso de reconocer automticamente quien est hablando sobre la base de la informacin que figura en las ondas de voz. Esta tcnica hace posible el uso de la voz del hablante para verificar su identidad y control de acceso a servicios tales como la marcacin por voz, banca por telfono, ir de compras telefnicas, servicios de base de datos de acceso, servicios de informacin, correo de voz, control de seguridad para las reas de informacin confidencial, y la distancia acceso a las computadoras. El objetivo del proyecto es conocer cmo detectar patrones especficos de la voz y realizar una comparacin para determinar cul persona est hablando, tambin ponemos en prctica lo aprendido en el laboratorio como fue la transformada rpida de Fourier FFT, la toma de una seal de voz con su respectiva frecuencia, el manejo de la interface grfica de matlab entre otras cosas. Este tipo de sistema en un futuro puede tener buenas repercusiones en el mundo, debido a que las personas cada vez prefieren ms comodidad y seguridad, por lo que la voz es el mtodo de comunicacin ms verstil y cmodo que existe ya que gastamos menos energa al utilizarla.

Desarrollo
El sistema puede almacenar ilimitados usuarios pero a medida que los usuarios son aumentados ms aumenta el porcentaje de error. Este consta de una base de datos mySQL el cual son simplemente registrado por un usuario donde por medio de este capturamos una imagen, una muestra de voz y por ltimo los datos de la informacin.

Cmo trabajar con base de datos MySQL en MATLAB 1ro. Una vez que se ha instalado el manejador de base de datos MySQL se procede a la descarga de una librera para Matlab llamada mysql-connector-java-3.0.17 Se puede descargar de esta direccin: http://www.cristiantala.cl/attachments/062_DataBase.m 1. Copiar el conector a la carpeta java/jarext/ que se encuentra en el directorio de Matlab. 2. Incluir en el archivo classpath.txt que se encuentra en toolbox/local el conector
o o

$matlabroot/java/jarext/mysql-connector-java-3.0.17-ga-bin.jar En el caso de que tu conector sea el mysql-connector-java-3.0.17-ga-bin.jar

3. Ahora es el momento de comprobar que esto funciona. 3

Fuente: http://www.cristiantala.cl/index.php?option=com_content&view=article&id=62:matlabmysql&catid=14:matlab&Itemid=5 Una vez conectados a la BD procedemos con la creacin de las tablas en este caso se crearon las siguientes:

El sistema captura el nombre, apellido, carrera, identificador el cual se refiere al nmero en el que la voz fue grabada, estatus, edad.

La funcin para ingresar los usuarios a la BD es insert.m


function insert(nombre, apellido, carrera, edad, estatus, id) host = 'localhost'; user = 'root'; password = ''; dbase = 'matlab'; %Conexion DB jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbase); jdbcDriver = 'com.mysql.jdbc.Driver';

dbConn = database(dbase, user , password, jdbcDriver, jdbcString); if isconnection(dbConn) exdata = {nombre, apellido, carrera, edad, estatus, id}; colnames = {'Nombre', 'Apellido', 'carrera', 'edad', 'estatus', 'identificador'}; fastinsert(dbConn, 'usuarios', colnames, exdata); else disp(sprintf('Error en la coneccin a la BdD: %s', dbConn.Message)); end close(dbConn);

Campo NO EDITABLE para el usuario El identificador se obtiene haciendo un Query a la base de datos el cual busca el ltimo usuario que hay registrado en la BD y suma 1, esto hace que si existen 2 usuarios registrados en el identificador el sistema coloca un nmero 3, cuando el usuario graba su voz se guarda con este nmero, esto es para que el sistema pueda analizar todas las muestras registradas en el sistema. Funcin para obtener el valor del prximo identificador es next_id()

function proximo_id=next_id() host = 'localhost'; user = 'root'; password = ''; dbase = 'matlab'; % Datos de la coneccin jdbcString = sprintf('jdbc:mysql://%s/%s', host, dbase); jdbcDriver = 'com.mysql.jdbc.Driver'; dbConn = database(dbase, user , password, jdbcDriver, jdbcString); if isconnection(dbConn) curs = exec(dbConn, 'select count(nombre) from usuarios'); setdbprefs('DataReturnFormat', 'cellarray') curs = fetch(curs); res = curs.Data(:,1); proximo_id = 1+[res{:}]; proximo_id;

else disp(sprintf('Error en la coneccin a la BdD: %s', dbConn.Message)); end close(dbConn);

Captura de imagen
Una vez el usuario escribe su nombre en el formulario la imagen se almacena con el nombre de este, con el fin de obtener una organizacin al almacenar la informacin. La funcin para tomar la imagen al usuario se llama foto.m
function foto(nombre) vid = videoinput('winvideo', 1, 'YUY2_640x480'); src = getselectedsource(vid); vid.FramesPerTrigger = 1; vid.ReturnedColorspace = 'rgb'; preview(vid); myWait(3); a=wavread('sistem_audio\beep.wav'); wavplay(a,11000); data = getsnapshot(vid); stoppreview(vid); name = sprintf('fotos/%s.jpg',nombre); imwrite(data,name);

Al principio presente problemas con la imagen ya que esta capturaba solo blanco y negro y este problema fue resuelto con el cambio de los cdec de video. En esta funcin hay una funcin dentro llamada myWait este es un delay para dar tiempo al usuario que se coloque en posicin antes de hacer la captura.

Interface de voz del sistema


El sistema posee una interface de voz el cual le indica al usuario cuando debe de hablar, cuando est procesando la informacin entre otras cosas. Estas voces fueron grabadas con un modulador de voz llamado MorphVOX Pro el cual puedo transformar mi voz en la de una mujer.

Estas voces son ejecutadas con el siguiente comando


myWait(2); a=wavread('sistem_audio\nombre.wav'); wavplay(a,46000);

Dibujar las seales de voz en el sistema de interface grfica


Para poder desplegar la seal de voz que introduce el usuario y la seal del patrn que fue encontrado utilizo el siguiente script.
[X, Fs, NBITS] = wavread('audio_temp/s1.wav'); M = 0:(2/(88200-1)):2 ; %Creo la matriz a=wavread('sistem_audio\procesando.wav'); wavplay(a,46000); axes(handles.muestras); % se elige el axes 2 m = plot(M,X,'b','linewidth',1); get( m ) ; grid on;

De esta misma forma despliego la imagen de la persona que es reconocida y la imagen del logo.

Interface gra fica del sistema

Al presionar el botn de acceso el sistema inicia y le pide que diga su nombre el sistema graba la voz temporal como s1.wav, una vez esta es guardada se llama la funcin next_id y se le resta un dgito para obtener la cantidad exactas de muestras que tengo almacenadas, esta son pasadas a la funcin train() el cual analiza todas las muestras y luego se le pasan estos valores muestreados a la funcin test() el cual se encarga de analizar y realizar las comparaciones, en esta funcin son llamadas otras como son mfcc() el cual calcula la FFT.
cant_patron= next_id-1; code1=train('train/', cant_patron); m=test('audio_temp/',1,code1);

Uno de los parmetros modificados para aumentar la rapidez de anlisis del sistema fue el incremento de m en la funcin mfcc() el cual hace que los marcos o frames que inician despus del anterior sean ms grandes.

function r = mfcc(s, fs) m = 500; n = 256; l = length(s); nbFrame = floor((l - n) / m) + 1; for i = 1:n for j = 1:nbFrame M(i, j) = s(((j - 1) * m) + i); end end h = hamming(n); M2 = diag(h) * M; for i = 1:nbFrame frame(:,i) = fft(M2(:, i)); end t = n / 2; tmax = l / fs; m = melfb(20, n, fs); n2 = 1 + floor(n / 2); z = m * abs(frame(1:n2, :)).^2; r = dct(log(z));

Conclusiones
El sistema presenta dificultades de reconocimiento dependiendo en qu lugar se tomaron las muestras y esto es debido a la cantidad de ruido que se captur en el momento. Ejemplo si una persona tom su patrn de muestra en un rea muy silenciosa, al momento de realizar las comparaciones si se toma en un lugar con ms ruido, el sistema falla. Una de las desventajas de este tipo de sistemas es que la voz humana cambia constantemente, cambia de una forma tal vez imperceptible para el humano pero si perceptible para una mquina. Este problema en teora puede corregirse realizando varios patrones de voz de una persona grabndolas en determinados tiempos especficos. Tambin el problema del ruido puede mejorarse, si hacemos un buen filtro de la voz del patrn y la voz tomada para el anlisis. Este proyecto lo considero como una muy buena experiencia ya que desconoca los mtodos y software utilizados para la realizacin de este.

10

You might also like