domotica con matlab

42
Domotica con matlab Esta entrada tiene como fin presentar un programa realizado en la materia de programación numérica el cual constaba del control de las luces de una casa. Hay que recalcar que no solamente pueden ser las luces pueden ser infinidad de cosas y los programas que subiré pueden ser modificados para que al igual que mandar señal y prender luces puedan revivir información de sensores mediante el puerto paralelo y tomar decisiones como el encendido de sistemas de riego, refrigeración, abanicos, o cualquier cosa que nuestra imaginación pueda crear o el cliente necesite. La interfaz que se usará para el proyecto de domótica es la interfaz de puerto paralelo la cual pueden construir fácilmente aquí les muestro un esquema. Interfaces bsicos de E/S con el puerto paralelo Ahora hablemos de lo que es la domótica, la domótica es el control del hogar (casa) mediante cualquier sistema, este sistema puede ser inteligente o no, esto quiere decir que el sistema puede controlarse automáticamente o que nosotros podemos controlar el sistema manualmente y también puede haber una combinación de ambas. Pero ¿La domótica es necesaria?.... Quizá para muchas personas no lo sea analizandolo rápidamente tal vez dirán quien necesitara un sistema automático en casa cuando la mayor parte del tiempo estamos en ella, o quien ocupará un sistema manual controlado mediante un panel o una computadora cuando podemos hacerlo manualmente con un switch al foco, a sistemas de riego o lo que queramos controlar, la respuesta es que quien lo necesita es la comodidad de hacer menos de realizar el mínimo esfuerzo o invertir el mínimo tiempo en hacer cosas que no nos son agradables y tener mas tiempo y energías para realizar actividades que si nos gustan, un buen ejemplo de ello es el control remoto nadie se imagina levantándose a cambiar de canal el televisor cada ves que quiere sintonizar una cosa diferente, es por eso que digo que la comodidad se vende y se vende bien, una vez que una persona pruebe lo cómodo que resulta tener domotica en su casa les asegura que tendrá una sensación como de tener un control remoto para su televisor. Aparte de la comodidad esta el uso para personas discapacitadas o personas que pueden solo estar acostadas en una cama o que pueden mover solo partes de su cuerpo, la domotica los auxiliaría en múltiples tareas y los aria mas independientes de otras personas. La verdadera aplicacion de la domotica es libre se puede usar para lo que

Upload: roger-alvarado

Post on 02-Jul-2015

552 views

Category:

Documents


17 download

TRANSCRIPT

Page 1: Domotica Con Matlab

Domotica con matlabEsta entrada tiene como fin presentar un programa realizado en la materia de programación numérica el cual constaba del control de las luces de una casa. 

Hay que recalcar que no solamente pueden ser las luces pueden ser infinidad de cosas y los programas que subiré pueden ser modificados para que al igual que mandar señal y prender luces puedan revivir información de sensores mediante el puerto paralelo y tomar decisiones como el encendido de sistemas de riego, refrigeración, abanicos, o cualquier cosa que nuestra imaginación pueda crear o el cliente necesite. 

La interfaz que se usará para el proyecto de domótica es la interfaz de puerto paralelo la cual pueden construir fácilmente aquí les muestro un esquema. 

Interfaces bsicos de E/S con el puerto paralelo

Ahora hablemos de lo que es la domótica, la domótica es el control del hogar (casa) mediante cualquier sistema, este sistema puede ser inteligente o no, esto quiere decir que el sistema puede controlarse automáticamente o que nosotros podemos controlar el sistema manualmente y también puede haber una combinación de ambas. 

Pero ¿La domótica es necesaria?.... Quizá para muchas personas no lo sea analizandolo rápidamente tal vez dirán quien necesitara un sistema automático en casa cuando la mayor parte del tiempo estamos en ella, o quien ocupará un sistema manual controlado mediante un panel o una computadora cuando podemos hacerlo manualmente con un switch al foco, a sistemas de riego o lo que queramos controlar, la respuesta es que quien lo necesita es la comodidad de hacer menos de realizar el mínimo esfuerzo o invertir el mínimo tiempo en hacer cosas que no nos son agradables y tener mas tiempo y energías para realizar actividades que si nos gustan, un buen ejemplo de ello es el control remoto nadie se imagina levantándose a cambiar de canal el televisor cada ves que quiere sintonizar una cosa diferente, es por eso que digo que la comodidad se vende y se vende bien, una vez que una persona pruebe lo cómodo que resulta tener domotica en su casa les asegura que tendrá una sensación como de tener un control remoto para su televisor. 

Aparte de la comodidad esta el uso para personas discapacitadas o personas que pueden solo estar acostadas en una cama o que pueden mover solo partes de su cuerpo, la domotica los auxiliaría en múltiples tareas y los aria mas independientes de otras personas. 

La verdadera aplicacion de la domotica es libre se puede usar para lo que tu te imagines, se pueden cubrir mil necesidades con ella. 

a continuación los programas: 

Domotica .fig: http://dl.dropbox.com/u/424705/pruebsn.fig Domotica .m http://dl.dropbox.com/u/424705/pruebsn.m 

Este programa funciona como simples interruptores para prender los diferentes sitios de la casa que vienen escritas en el programa, también cuenta con un temporizador para prender tres lugares estratégicos de la casa se le especifica el tiempo y después se le da en encender en, y para apagarlos se le da en apagar en, también cuenta con un encender todo y apagar todo para hacer encendido y apagado completo de la casa.

Page 2: Domotica Con Matlab

Espero les sea de su agrado... 

NOTA: recuerden que tanto el archivo .fig y .m tienen que estar en la misma dirección para que pueda funcionar el programa.

INSTITUTO TECNOLÓGICO DE HERMOSILLO (ITH) POR: IVAN ORLANDO SALAZAR MONTAÑO 

ESTUDIANTE DE: ING. MECATRÓNICA www.ith.mx

Esta entrada tiene como fin presentar un programa realizado en la materia de programación numérica el cual constaba del control de las luces de una casa. 

Hay que recalcar que no solamente pueden ser las luces pueden ser infinidad de cosas y los programas que subiré pueden ser modificados para que al igual que mandar señal y prender luces puedan revivir información de sensores mediante el puerto paralelo y tomar decisiones como el encendido de sistemas de riego, refrigeración, abanicos, o cualquier cosa que nuestra imaginación pueda crear o el cliente necesite. 

La interfaz que se usará para el proyecto de domótica es la misma que use para el control de motores paso a paso de la entrada pasada se encuentra en la siguiente dirección: 

http://notipory.blogspot.com/2010/11/control-motores-pasos-matlab.html 

Ahora hablemos de lo que es la domótica, la domótica es el control del hogar (casa) mediante cualquier sistema, este sistema puede ser inteligente o no, esto quiere decir que el sistema puede controlarse automáticamente o que nosotros podemos controlar el sistema manualmente y también puede haber una combinación de ambas. 

Pero ¿La domótica es necesaria?.... Quizá para muchas personas no lo sea analizandolo rápidamente tal vez dirán quien necesitara un sistema automático en casa cuando la mayor parte del tiempo estamos en ella, o quien ocupará un sistema manual controlado mediante un panel o una computadora cuando podemos hacerlo manualmente con un switch al foco, a sistemas de riego o lo que queramos controlar, la respuesta es que quien lo necesita es la comodidad de hacer menos de realizar el mínimo esfuerzo o invertir el mínimo tiempo en hacer cosas que no nos son agradables y tener mas tiempo y energías para realizar actividades que si nos gustan, un buen ejemplo de ello es el control remoto nadie se imagina levantándose a cambiar de canal el televisor cada ves que quiere sintonizar una cosa diferente, es por eso que digo que la comodidad se vende y se vende bien, una vez que una persona pruebe lo cómodo que resulta tener domotica en su casa les asegura que tendrá una sensación como de tener un control remoto para su televisor. 

Aparte de la comodidad esta el uso para personas discapacitadas o personas que

Page 3: Domotica Con Matlab

pueden solo estar acostadas en una cama o que pueden mover solo partes de su cuerpo, la domotica los auxiliaría en múltiples tareas y los aria mas independientes de otras personas. 

La verdadera aplicacion de la domotica es libre se puede usar para lo que tu te imagines, se pueden cubrir mil necesidades con ella. 

a continuación los programas: 

Domotica .fig: http://dl.dropbox.com/u/424705/pruebsn.fig Domotica .m http://dl.dropbox.com/u/424705/pruebsn.m 

Este programa funciona como simples interruptores para prender los diferentes sitios de la casa que vienen escritas en el programa, también cuenta con un temporizador para prender tres lugares estratégicos de la casa se le especifica el tiempo y después se le da en encender en, y para apagarlos se le da en apagar en, también cuenta con un encender todo y apagar todo para hacer encendido y apagado completo de la casa. 

Espero les sea de su agrado... 

Actividad 2:Interfaces básicos de E/S con el p.

paralelo:salidas-entradas digitales

Circuito sin alimentación externa Circuito con alimentación externa Circuito con alimentación externa y etapa separadora Circuito bidireccional con alimentación externa Display de 7 segmentos Actividades

  

 

Circuito sin alimentación externa

Se trata de un circuito muy sencillo que usa un mínimo de componentes y proporciona un test funcional de 8 bits. Cada bit de la entrada puede ser

Page 4: Domotica Con Matlab

individualmente controlado y visualizado en los LED de salida. Los diodos LED que actúan de display se alimentan únicamente con la corriente proporcionada por las propias salidas del puerto. Sería preferible alimentar los LED y utilizar la corriente absorbida para iluminarlos, pero el conector no proporciona una señal de alimentación (Vcc), de modo que se necesitaría una fuente externa. Eléctricamente, el puerto paralelo entrega señales TTL y como tal, teóricamente, se le puede conectar cualquier dispositivo que cumpla con los niveles de voltaje específicos de la lógica TTL, sin embargo el hardware del puerto paralelo está muy limitado en cuanto a su capacidad de manejo de corriente, por ésta razón se debe ser muy cuidadoso con el manejo de las señales del puerto: un cortocircuito puede dañar permanentemente la tarjeta madre del PC. Sin embargo, experimentalmente se comprueba que en la mayoría de los PC el puerto proporciona corriente suficiente para una clara indicación visual de los LED.    

Las líneas de datos (D0-D7, pines 2-9) se utilizan como líneas de salida, e iluminan los LED cuando en ellas se fija por software un 1 lógico (+5 V). Cuando se fija un 0 lógico, los LED se apagan. Como entradas se utilizan, como nibble (semibyte) bajo, las cuatro líneas asociados al registro de control (C0,C1,C2 y C3, pines 1, 14, 16 y 17) y, como nibble alto, cuatro de las líneas asociadas al registro de estado (S4,S5,S6 y S7, pines 13, 12, 10 y 11).

Obsérvese que las líneas de control se utilizan normalmente como salidas. Sin embargo, aquí deben ser configuradas como entradas. Obsérvese, asimismo, que cuatro de las líneas de entrada se corresponden con bits que utilizan lógica negativa (C0,C1,C3 y S7). Esto habrá de tenerse en cuenta cuando se realice el programa de control de esta interfaz.

Page 5: Domotica Con Matlab

Los detalles sobre el montaje de éste y los posteriores circuitos se pueden consultar en Actividades.

 

Circuito con alimentación externa

Fijémonos ahora solamente en una de las líneas de entrada y en una de las líneas de salida. Un circuito como el siguiente utiliza una fuente externa de +5 V para alimentar los diodos LED y las señales de entrada.

Un 1 lógico en D7 (bit 7 del puerto de DATOS) produce que el LED se apague. Un 0 lógico produce la iluminación del LED. El interruptor normalmente abierto S produce que aparezca un 1 lógico (+5 V) en la entrada Busy (registro de ESTADO, S7). Cuando se cierra S un 0 lógico (GND) se aplica a la entrada Busy.

Un circuito como el precedente para las 8 líneas de entrada y salida es un alternativa al propuesto en la sección anterior.

 

Page 6: Domotica Con Matlab

Circuito con alimentación externa y etapa separadora

Para disminuir lo más posible el riesgo de daños al puerto se puede utilizar un circuito integrado 74LS244 como etapa separadora en las líneas de salida. Al mismo tiempo se mejora la capacidad de manejo de corriente, de forma que se pueden conectar sin riesgo la serie de diodos LED que indican la actividad en las líneas de datos del puerto paralelo. El circuito se detalla en el siguiente diagrama:

Por cada línea de entrada que tomamos directamente del puerto paralelo existe una etapa amplificadora-separadora dentro del circuito integrado 74LS244 que nos permite trabajar con una tasa de entrega de corriente suficiente para desplegar en los diodos emisores de luz la información escrita en las líneas de datos del puerto. Además es posible habilitar ó deshabilitar el despliegue del nibble de orden inferior ó superior del byte escrito en el puerto. Colocando en un nivel lógico alto el pin 1 del CI 74LS244 inhabilitamos el despliegue

Page 7: Domotica Con Matlab

del nibble de orden bajo y un nivel lógico alto en la patita 19 evita el despliegue delnibble de orden alto. Por comodidad, se conectan las patitas 1 y 19 permanentemente a tierra de tal manera que sea posible visualizar la actividad en los diodos LED.

Este circuito, al igual que el anterior y el siguiente, necesita de alimentación externa. Se puede alimentar directamente mediante una fuente de +5 V, o construir ésta usando una pila de 9 V o un adaptador universal, y un regulador de voltaje 7805. El 7805 puede regular cualquier voltaje  de entre 7 y 25 V c.c. hasta los 5 V que precisa el circuito

 

Circuito bidireccional con alimentación externa

El siguiente circuito aprovecha la capacidad bidireccional del puerto paralelo de la práctica totalidad de los PCs actuales. Así, las 8 líneas de datos del puerto (D0-D8) se pueden utilizar a modo de un bus de datos que, en ocasiones contiene los valores que serán leídos por la computadora y, otras veces, transporta los datos que ésta envía a la salida digital. No es preciso ahora utilizar las líneas de estado y de control del puerto a modo de entradas, como se hacía en el circuito sin alimentación externa. El esquema se observa en la siguiente figura:

Page 8: Domotica Con Matlab

 

Este circuito utiliza los siguientes CI:

74LS573 : un registro octal latch D transparente usado como puerto de salida para iluminar los diodos LED, o cualquier dispositivo al que se le quieran enviar señales digitales.

74LS245 : un transceptor octal bidireccional que proporciona un puerto de entrada de 8 líneas; toma datos de entrada de 8 interruptores o de cualquier dispositivo desde el cual se quiera leer información digital.

Ambos integrados se controlan mediante el bit C0 del registro de control. Cuando el pin 1 se halla en alto, los datos escritos por el puerto se transfieren a los LED mediante el 74573, mientras que el 74245 está aislado del bus de datos. Cuando el pin 1 está bajando, los datos a su entrada se conservan en la salida. Cuando el

Page 9: Domotica Con Matlab

pin 1 está bajo el 74245 se habilita y los datos presentes en su entrada se transfieren a su salida y pueden ser leídos por el programa.

El bit C5 se utiliza como control de las operaciones de lectura/escritura del puerto bidireccional. El programa debe fijar tanto C0 como C5 a 0 para realizar una escritura (es decir, debe escribir un valor decimal 0 el el registro de control). Para llevar a cabo una lectura ambos bits deben ser establecidos a 1 (es decir, debe escribir un valor hexadecimal 0x21, o decimal 33, en el registro de control).

 

Display de 7 segmentos

Una posibilidad es sustituir en los montajes anteriores el sistema de visualización mediante 8 diodos LED por un display numérico de 7 segmentos más un punto decimal. El circuito resulta así más compacto.

Si se trata de un display de ánodo común hay que alimentar con Vcc= +5 V las dos líneas señaladas como comunes en la figura, y es preciso poner a tierra la línea correspondiente al segmento que se quiere iluminar. Si se trata de un display de cátodo común, hay que alimentar con +5 V el segmento que se desea iluminar y poner a tierra las dos líneas comunes.

Page 10: Domotica Con Matlab

Así, en un display de cátodo común, las líneas 1-8 se pueden conectar directamente a las líneas de datos del puerto (pines 2-9 del conector DB25), y las dos líneas comunes se pueden conectar a cualquiera de las patillas de tierra del conector, por ejemplo, la 25.

 

Actividades

Montaje de los circuitos anteriores

Los circuitos se pueden montar sobre una placa tipo "protoboard" y utilizar cable rígido para realizar las conexiones necesarias entre los componentes.

Placa "protoboard" simple

Las entradas/salidas del circuito hacia el PC se pueden reunir en un conector DB25 macho unido a la placa por líneas de cable rígido o de cable plano. A su vez, el conector macho se puede unir directamente al conector hembra del PC mediante un cable de extensión paralelo, lo que normalmente resulta más cómodo para acceder a la parte trasera del PC donde se sitúa el conector hembra.

Page 11: Domotica Con Matlab

Conector DB25 macho con líneas de cable rígido.Otra posibilidad, utilizar cable plano.

Cable de extensión paralelo.

Para simplificar los circuitos que utilizan interruptores a modo de entradas digitales, éstos se pueden reunir en un único DIP switch de ocho posiciones. También, por una cuestión de orden, las líneas que proviene del conector macho pueden introducirse en la placa mediante regletas apilables como las mostradas en la figura.

 

DIP switch (izquierda) y regletas (derecha).

Page 12: Domotica Con Matlab

Conector DB25 macho con líneas de salida, entrada y tierra finalizadas en regletas.

Ejemplo de circuito terminado, conectado al PC.

Naturalmente, una vez finalizado el circuito, lo más recomendable es probar el correcto funcionamiento del mismo antes de conectarlo al puerto paralelo del PC. Una vez ensamblado, se puede alimentar con una fuente regulada de +5 V y conectar temporalmente los pines del conector DB25 macho a tierra o a + 5 V, según se necesite (un adaptador universal estabilizado, que da normalmente tensiones entre 1.5 V y 12 V, es una solución válida y barata, y sirve también para los circuitos que requieren alimentación externa, los que utilizan motores de distintas clases, etc). Una vez que se ha verificado el correcto funcionamiento del circuito, está listo para conectarlo al puerto paralelo del PC.

Para conectar el circuito al puerto apáguese en primer lugar la computadora. Conéctese el cable al puerto paralelo asegurándose que el conector esté firme en su lugar. Aliméntese el circuito (si procede) y por último enciéndase la computadora. Por regla general, el circuito de restablecimiento de la computadora coloca inicialmente en las líneas de datos del puerto paralelo un valor igual a 0x0h. Por tanto, todos los diodos deben estar apagados una vez que la computadora ha terminado su proceso de arranque. Sin embargo, si algún diodo permanece encendido esto no indica necesariamente un fallo, y es responsabilidad del software de control que se escriba inicializarlo con un valor adecuado antes de realizar cualquier otra operación.

Page 13: Domotica Con Matlab

Ejemplo de montaje del circuito sin alimentación externa, al que también se le ha añadido el display de 7 segmentos.

 

Programas de control del interfaz básico de E/S

Una vez montada la parte de salidas del circuito sin alimentación externa, realícese un programa en QBasic que complete las siguientes operaciones:

Iluminar secuencialmente los LED, desde el LSB hasta el MSB, con una temporización de 1 s.

Realícese el mismo programa en TurboC.

 

Una vez montado completamente el circuito sin alimentación externa o con alimentación y etapa separadora, realícese un programa en QBasic que complete las siguientes operaciones:

control de sólo salidas: mostrar en los LED la codificación binaria de un byte (entero entre 0-255) introducido desde teclado.

control de sólo entradas: detectar continuamente el estado de las entradas digitales y mostrar en pantalla el valor entero del byte correspondiente.

Page 14: Domotica Con Matlab

interacción de entradas-salidas: detectar continuamente el estado de las entradas y actuar sobre las salidas de la siguiente manera:- si el valor de la entrada es menor que 16, mostrar en las salidas el valor de la entrada.- si la entrada está entre 16 y 32 realizar un destello en las salidas impares.- si la entrada está entre 32 y 64 realizar un destello en las salidas pares.- si la entrada está entre 64 y 128 producir una intermitencia en todas las salidas durante 5 s.- si la entrada es < 256 realizar un destello que se desplace alternativamente de derecha a izquierda.

        Soluciones:

QBasic

' ENT_SAL.BAS'' CONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO'' Programaci¢n de la interface b sica de 8 LED y 8 microinterruptores' Actuadores - LED en las 8 l¡neas de DATOS:' 7 6 5 4 3 2 1 0' D7 D6 D5 D4 D3 D2 D1 D0'' Sensores - DIP switch de 8 pos. en 4 l¡neas de CONTROL y 4 de ESTADO:' 7 6 5 4 3 2 1 0' S7# S6 S5 S4 C3# C2 C1# C0#'' 2002 Víctor R. González

DECLARE SUB Espera (segundos AS SINGLE)

' Direcciones del puerto paraleloCONST LPTBASE = &H378CONST DATOS = LPTBASECONST ESTADO = LPTBASE + 1CONST CONTROL = LPTBASE + 2

DIM byte AS INTEGERDIM i AS INTEGER, j AS INTEGER

' Control de actuadores digitales (8 diodos LED en el puerto

Page 15: Domotica Con Matlab

de DATOS)PRINT "Control de salidas digitales (valor > 255 para fin):"byte = 0 ' La primera vez apaga los diodos (envía 0)DO WHILE byte < 256

OUT DATOS, byte

INPUT " Introduce el byte que se enviará al puerto: ", byte

LOOP

' Control de sensores digitales (8 microinterruptores -DIP switch-

' 4 en líneas de CONTROL y 4 en líneas de ESTADO)PRINT "Control de entradas digitales (f<intro> para fin):"OUT CONTROL, &H4 ' Pone CONTROL en modo entrada (si

posible)DO

byte = ((INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0)) XOR &H8B

PRINT " Byte leído del puerto: "; byte

LOOP UNTIL INKEY$ = "f"

' Interacción de actuadores y sensoresPRINT "Realimentaci¢n de las salidas con las entradas

digitales (f<intro> para fin):"PRINT " entrada < 16 = dirige la entrada a la salida"PRINT " entrada < 32 = destello impares"PRINT " entrada < 64 = destello pares"PRINT " entrada < 128 = intermitencia 5 s"PRINT " entrada < 256 = destello progresivo"DO

' Toma nibble bajo de CONTROl y alto de ESTADO' e invierte bits 0, 1, 3 y 7byte = ((INP(CONTROL) AND &HF) OR (INP(ESTADO) AND

&HF0)) XOR &H8BPRINT " Byte le¡do: "; byte

SELECT CASE byteCASE IS < 16 ' Envía el valor de la entrada

a la salidaOUT DATOS, byte

CASE IS < 32 ' Realiza un destello en las salidas impares

OUT DATOS, 85 ' EnciendeEspera .5OUT DATOS, 0 ' Apaga

CASE IS < 64 ' Realiza un destello en las salidas pares

OUT DATOS, 170 ' EnciendeEspera .5OUT DATOS, 0 ' Apaga

Page 16: Domotica Con Matlab

CASE IS < 128 ' Intermitencia durante 5 segundos

FOR i = 1 TO 10OUT DATOS, 0: Espera .25

' ApagaOUT DATOS, 255: Espera .25

' Enciende todosNEXT i

CASE ELSE ' Destello progresivoFOR i = 1 TO 10

j = 7DO

OUT DATOS, jEspera .05j = j * 2

LOOP WHILE j <= 224j = 224DO

OUT DATOS, jEspera .05j = j / 2

LOOP WHILE j >= 7NEXT i

END SELECT

LOOP UNTIL INKEY$ = "f"

END

' Rutina de esperaSUB Espera (segundos AS SINGLE)

tIni! = TIMERDO WHILE TIMER - tIni! < segundos: LOOP

END SUB

En la parte de control de sólo las entradas digitales existen dos sentencias, indicadas con negrita en el cuadro siguiente:

OUT CONTROL, &H4 ' Pone CONTROL en modo entrada (si posible) DO

byte = ( (INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0) ) XOR &H8B

PRINT " Byte leído del puerto: "; byte

LOOP UNTIL INKEY$ = "f"

y que merecen una explicación detallada.

La primera de ellas: OUT CONTROL, &H4 permite utilizar las cuatro líneas de control como líneas de entrada. Recuérdese que, estrictamente, son de salida. Sin

Page 17: Domotica Con Matlab

embargo, al poner las líneas en alto escribiendo0100, es decir, 0x04, en LPT_BASE+2, la dirección del registro de control (bits C3-C2-C1-C0), se hace que las salidas "floten" y que un dispositivo externo pueda forzar a bajo alguna de las salidas. Esto podría no ser posible en todos los puertos. Sin embargo, en algún puerto que en principio aparentemente no es posible, se consigue si lo configuramos en modo SPP o en la emulación SPP del modo ECP. 

La segunda: byte = ( (INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0) ) XOR &H8B , lee un byte de las entradas del interface de la siguiente manera: extrae los cuatro bits bajos del registro de control (bits C3-C2-C1-C0), los cuatro bits altos del registro de estado (bits S7-S6-S5-S4), los concatena e invierte todos los bits que sea necesario (dado que los bits C3,C1,C0 y S7 se utilizan en lógica negativa). Para ello, se utilizan los operadores de manipulación de bits AND, OR y XOR que proporciona Qbasic. La operación se explica paso a paso y gráficamente en lo que sigue. En las tablas que figuran a continuación una X o una Y indican bits que se necesitan finalmente mientras que ? indica bits prescindibles. Asimismo, el color azul indica bits en lógica positiva mientras que el color rojo y el suprarrayado indican bits en lógica negativa (estos últimos necesitarán ser invertidos).

Extracción del semi-byte bajo del registro de control:

INP(CONTROL) AND &HF

INP(CONTROL)

? ? ? ? X X X X

&HF

0 0 0 0 1 1 1 1

AND

0 0 0 0 X X X X

Page 18: Domotica Con Matlab

Extracción del semi-byte alto del registro de estado:

INP(ESTADO) AND &HF0

INP(ESTADO)

Y Y Y Y ? ? ? ?

&HF0

1 1 1 1 0 0 0 0

AND 

Y Y Y Y 0 0 0 0

Combinación del semi-byte bajo con el semi-byte alto:

(INP(CONTROL) AND &HF) OR (INP(ESTADO) & &HF0)

INP(CONTROL) AND &HF

Y Y Y Y 0 0 0 0

INP(ESTADO) AND &HF0

0 0 0 0 X X X X

OR

Y Y Y Y X X X X

Page 19: Domotica Con Matlab

Inversión de los bits 0, 1, 3, y 7:

byte = ( (INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0) ) XOR &H8B

(INP(CONTROL) AND &HF) OR (INP(ESTADO) AND &HF0)

Y Y Y Y X X X X

&H8B

1 0 0 0 1 0 1 1

XOR

Y Y Y Y X X X X

TurboC

/* ENT_SAL.CCONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO

Programación de la interface básica de 8 LED y 8 microinterruptores

Actuadores - LED en las 8 líneas de DATOS: 7 6 5 4 3 2

1 0D7 D6 D5 D4 D3 D2

D1 D0

Sensores - DIP switch de 8 pos. en 4 líneas de CONTROL y 4 de ESTADO:

7 6 5 4 3 2 1 0

S7# S6 S5 S4 C3# C2 C1# C0#

2002 Víctor R. González*/

Page 20: Domotica Con Matlab

#include <stdio.h>#include <dos.h>

/* Direcciones del puerto paralelo */#define LPT_BASE 0x378#define DATOS LPT_BASE#define ESTADO LPT_BASE+1#define CONTROL LPT_BASE+2

main (){

unsigned byte;unsigned i, j;

/* Control de actuadores digitales (8 diodos LED en el puerto de DATOS) */

printf ("Control de salidas digitales (valor > 255 para fin):\n");

byte = 0; /* La primera vez apaga los diodos (envía 0) */

while (byte < 256) {outportb (DATOS, byte);

printf (" Introduce el byte que se enviará al puerto: ");

scanf ("%u", &byte); getchar(); }

/* Control de sensores digitales (8 microinterruptores -DIP switch-

4 en líneas de CONTROL y 4 en líneas de ESTADO) */printf ("\nControl de entradas digitales (f<intro> para fin):\

n");outportb (CONTROL, 0x04); /* Pone CONTROL en modo entrada

(si posible) */do {

byte = ((inportb(CONTROL) & 0x0F) | (inportb(ESTADO) & 0xF0)) ^ 0x8B;

printf (" Byte leído del puerto: %u ", byte);

} while (getchar() == '\n');getchar();

/* Interacción de actuadores y sensores */printf ("\nRealimentación de las salidas con las entradas

digitales (f<intro> para fin):");printf ("\n\t entrada < 16 = dirige la entrada a la salida");printf ("\n\t entrada < 32 = destello impares");printf ("\n\t entrada < 64 = destello pares");printf ("\n\t entrada < 128 = intermitencia 5 s");printf ("\n\t entrada < 256 = destello progresivo\n");do {

/* Toma nibble bajo de CONTROl y alto de ESTADO

Page 21: Domotica Con Matlab

e invierte bits 0, 1, 3 y 7 */byte = (inportb(CONTROL) & 0x0F | inportb(ESTADO) &

0xF0) ^ 0x8B;printf (" Byte leído: %u ", byte);

if (byte < 16) /* Envía el valor de la entrada a la salida */

outportb (DATOS, byte);

else if (byte < 32) { /* Realiza un destello en las salidas impares */

outportb (DATOS, 85); /* Enciende */delay (500);outportb (DATOS, 0); /* Apaga */

}else if (byte < 64) { /* Realiza un destello en las

salidas pares */outportb (DATOS, 170); /* Enciende */delay (500);outportb (DATOS, 0); /* Apaga */

}else if (byte < 128) /* Intermitencia durante 5

segundos */for (i=1; i<=10; i++ ) {

outportb (DATOS, 0); delay (250);/* Apaga */

outportb (DATOS, 255); delay (250);/* Enciende todos */

}

else

RED NEURONAL DE ARQUITECTURA PARAMÉTRICAEN RECONOCIMIENTO DE ROSTROS

Renato Salinas, PhD,Departamento de Ingeniería Eléctrica, Universidad de Santiago de Chile

[email protected] Larraguibel, MSc,

Facultad de Ciencias de la Ingeniería, Universidad Diego Portales

[email protected]

 Síntesis

El presente trabajo aborda el tema de reconocimiento de rostros haciendo uso directo de redes neuronales de retropropagación, esto es sin preproceso de extracción de características. Este enfoque es poco usual, hay razones teóricas acerca de la desproporción entre información muestral y número de ejemplares que indican que en un espacio de tan poca densidad es imposible obtener resultados satisfactorios. Sin embargo, un razonamiento esencialmente intuitivo lleva a plantear un

Page 22: Domotica Con Matlab

diseño novedoso de arquitectura de red que logra excelentes resultados. En efecto, la red implementada en Matlab en un PC Pentium III, es entrenada con 5 tomas distintas pertenecientes a 40 individuos en aproximadamente 6 minutos. La prueba, con otro set de 5 fotos de los mismos 40 individuos, entrega una precisión de 100% para la identificación.

1 Introducción.

El tema de reconocimiento de rostros por medios informáticos ha cobrado renovado interés [1] en vista de su importancia en el contexto actual de medidas de seguridad. Consecuentemente, hay en la actualidad una cantidad de líneas de investigación en estas materias que sigue dos vertientes: métodos estadísticos y métodos coneccionistas, sin perjuicio de que esistan áreas en común (una propuesta de taxonomía aparece en Valentin et al (1994) [1]). Sistemas de reconocimiento de rostros tan diferentes como el de Pentland et al (1994) basado en Análisis de Componentes Principales (PCA) y el de Malsburg et al (1995) basado en pareo gráfico de wavelets de Gabor operan sin embargo, dentro de un paradigma común que plantea una metodología orientada en propiedades de imágenes en lugar de representaciones abstractas de rostros [3]. Existe evidencia empírica que concede fundamentación a dicho enfoque, tal como el hecho de que el reconocimiento efectuado por humanos es empeorado considerablemente por transformaciones de imagen que dejan intacta las representaciones abstractas como es el caso de negativos fotográficos o cambio en la dirección de iluminación. Esto parece indicar que la codificación de rostros de la visión humana considera relevante información relativa de áreas claras y obscuras que permiten reconstruir forma. Reconocer rostros se ha asociado tradicionalmente a un aspecto particular de una actividad más general: reconocimiento de imágenes [2], es el enfoque puramente perceptual que deja de lado los aspectos cognitivos [2]. En este trabajo se adopta la hipótesis que esta clasificación es errónea; reconocer rostros es una actividad perceptual particular, bajo retroalimentación cognitiva, que difiere en aspectos fundamentales con el reconocimiento de objetos. En efecto, la especie humana muestra a la sociabilidad[3] como característica distintiva relevante en su éxito evolutivo. En este contexto, el identificar rostros (y expresiones) es fundamental en la integración del grupo social. Los niños aprenden a distinguir rostros mucho antes que objetos. Adicionalmente, el ‘talento’ de distinguir rostros no es verbalizable y se desarrolla en forma no supervisada; nuestra especie lo desarrolló mucho antes de desarrollar el lenguaje. Estas consideraciones llevan a plantear una metodología de diseño para la arquitectura de red bajo un enfoque que relega a segundo plano los aspectos tradicionalmente asociados con este ‘punto obscuro’ del trabajo con redes neuronales. En efecto, para las etapas iniciales de diseño, cuando corresponde decidir cuántas capas y cuántas neuronas, la literatura entrega sólo recomendaciones generales que es necesario validar (y a menudo revisar) durante el proceso a partir de características observadas durante el entrenamiento. En este contexto, la arquitectura de red utilizada en este estudio se aleja considerablemente de lo considerado ‘buenas prácticas’. Lawrence et al (1996) [4] discuten dicha praxis establecida en el ámbito de aproximación de funciones, trasladando directamente la experiencia en el trabajo con polinomios sin considerar el contexto del problema a resolver, y entregan evidencia empírica para cuestionarla.

Page 23: Domotica Con Matlab

La estructura de este trabajo continua con la Sección 2 en donde se presenta el entorno para el desarrollo empírico de la investigación. La Sección 3 cubre el diseño de red y su correspondiente imagen de software. La Sección 4 muestra los resultados y su análisis. La Sección 5 entrega las conclusiones.

2 El problema.

Se plantea implementar una red neuronal de retropropagación para reconocer rostros. En retrospectiva, se pretendió desarrollar un trabajo empírico para exponer las debilidades de este tipo de red neuronal y mejorar progresivamente su desempeño mediante técnicas especializadas de preproceso y compactación.

Figura 1. Las diez fotos del individuo #19

Page 24: Domotica Con Matlab

Los datos[4] están dados por un set de 400 fotos, 10 fotos de cada uno de 40 individuos, que aparecen con archivos individuales 1.pgm, 2.pgm, ,,,10.pgm situados en 40 directorios de nombre s1, s2, ,,,s40. Cada archivo .pgm (portable grey format) está formado por un encabezado de 14 bytes y la imagen en 256 niveles de gris como una matriz de 92x112 bytes. Como se verá más adelante, se utilizó la nomenclatura sistemática que presentan los archivos para codificar en forma sencilla las instrucciones para leerlos.

La base de datos (ORL Face Database) fue elaborada en Olivetti Research Lab, Cambridge entre 1992 y 1994 con imágenes tomadas sobre un fondo homogéneo obscuro (ver Fig 1). La rotación máxima es de 20º y la variación máxima de escala es de 10%. La diversidad también involucra tomas con y sin anteojos y cambios en el peinado.

Como datos de entrenamiento se utilizaron las primeras 5 fotos de cada uno de los individuos, la mitad de las imágenes. La prueba consistió en presentar a la red para identificación la otra mitad, las 5 fotos restantes de cada uno de los individuos.

Esta tarea, eventualmente ejecutada con nuestra maquinaria biológica, no es trivial. En efecto, corresponde aproximadamente a observar la audiencia de un curso numeroso durante un tiempo equivalente al necesario para tener 5 ‘tomas’ y luego reconocer a cada uno de los integrantes, incorporando algunas variaciones.

Desde el punto de vista del espacio de datos, cada muestra (o grupo de 5 fotos de un individuo) corresponde a un código con un número desproporcionadamente grande de posibilidades (5x92x112x256=13189120). En consecuencia, las expectativas para plantear una red de retropropagación para asociar unívocamente a la muestra con un individuo no son promisorias; es difícil que la red sobreviva a la etapa de entrenamiento [1]. Alternativamente, se puede dotar a la red de un número suficientemente grande de pesos de modo que ‘memorice’ el espacio muestral y logre así completar el entrenamiento. En este caso se llega a una situación conocida como sobre-entrenamiento; la red entrenada carece de capacidad de generalización, al procesar el espacio de prueba proporciona respuestas erróneas.

3 El modelo.

Page 25: Domotica Con Matlab

El ‘conocer’ un rostro, actividad imprescindible para re-conocer, equivale a asignar una identidad única a un número relativamente pequeño de imágenes prototípicas de una persona. La identidad misma es probablemente un agregado complejo de vivencias y evocaciones; en este trabajo se le asignará sólo la característica de ser única. A su vez, el set de prototipos se almacena de forma tal que sea claramente separable. Parece ser que los recursos utilizados para almacenamiento son considerables; la capacidad de reconocer rostros es limitada en cuanto a número. En consecuencia, reconocer un rostro puede asimilarse a un proceso de búsqueda en el espacio de almacenamiento que, de ser exitoso, rescata con mayor o menor seguridad la identidad (y atributos vivenciales) asociada durante el conocer.

Para modelar el proceso hipotético antes enunciado, se postula una característica cuantitativa que tiene dos parámetros:

k correspondiente al número de individuos, y,

m correspondiente al número de fotos de cada uno de ellos.

Llevando estas consideraciones al ámbito de redes neuronales y al contexto del trabajo a efectuar, se plantea una arquitectura con dos capas ocultas. La capa de input tiene 10304 nodos, la primera capa oculta tiene 2*(k+2) neuronas, la segunda k+m neuronas y la de output kneuronas. El razonamiento de soporte para esta elección (salvo la condición de que la capa de output debe ser de dimensión k) es esencialmente intuitivo y se expone a continuación.

Para reconocer una imagen que representa un rostro será necesario mapearla en el ‘espacio de rostros’, llevar a cada uno de sus elementos a un espacio instrumental para el reconocimiento de rostros. En efecto, el contexto perceptual de esta actividad se ‘siente’ distinto al que se utiliza para reconocer objetos en general, una hipótesis derivada de la relevancia evolutiva del reconocimiento de rostros en la estructura gregaria de nuestra especie. Ahora bien, en este espacio debe haber lugar para más de una versión del rostro para poder reconocer expresiones y variaciones; esto explica k+2 que entrega un mínimo de tres prototipos. Adicionalmente, el número de ejemplares almacenable debe ser superior a k; en realidad una función monótamente

creciente con k, la más sencilla , en concordancia con la navaja de Occam. La segunda capa oculta debe ser capaz de ‘transmitir’ una síntesis del ‘espacio de rostros’ con una fidelidad suficiente para una actividad de asociación binaria (en realidad, bastante ‘fuzzy’) de identificación ejecutada por la capa de output. En consecuencia, se necesita al menos una neurona por individuo y una por variante; un total de k+m.

Page 26: Domotica Con Matlab

Las funciones de activación de las capas ocultas es tanh, concordante con la naturaleza positiva o negativa de la señal sináptica (reforzamiento o inhibición); la de la capa de output debe llevar a un conjunto de alternativas sí/no representables en forma compacta por una sigmoide en el intervalo [0,1]. En efecto, la instrospección de nuestra actividad de ‘identificar rostros’ la hace aparecer como difusa, existe un continuo de la fidelidad de la identificación que se manifiesta en expresiones en este contexto tales como ‘se parece...’, ‘no estoy seguro, pero ...’, ‘lo he visto en alguna parte ...’, ‘ podría jurar que es ...’, etc.

En consecuencia con los principios expuestos, se especificó una red con dos capas ocultas para trabajar con datos que se presentan como un set de k vectores de 10304 componentes que deben asociarse con una ficha binaria de identidad de k bits construida de modo que el AND sea nulo para dos individuos diferentes. Esta forma de asociación permite un interesante análisis de resultados. En efecto, proporciona una medida del nivel de ‘confusión’ entre los ejemplares, circunstancia análoga a la que se presenta en el proceso de reconocimiento de rostros para los seres humanos, dado que todos los rostros presentan características comunes tales como una boca, dos ojos, dos orejas, etc. 

Para la aplicación misma se procesan   ejemplares, tanto para el input como para probar la red entrenada. Los datos fueron normalizados, esto es, fueron llevados a una media nula y varianza unitaria, transformación esencialmente reversible que entrega un mapa biyectivo más compacto aprovechando la circunstancia de que cada componente de input puede tener sólo 256 valores distintos. En efecto, se construye una representación analógica en un intervalo continuo [-4,+4] para estos valores, acercándose así al rango de la función tanh utilizada para transmitir la señal de input. A continuación se transcribe el script de Matlab con el cual se hizo el trabajo.

k=40;

m=5;

% k individuos, m fotos de cada uno de ellos

for n=1:m;

for i =1:k;

the_file=['D:\face\face_files\s' int2str(i) '\' int2str(n) '.pgm'];

foto=fopen(the_file,'r');

[B,header]=fread(foto,14,'char=>char');

% el encabezado no interesa, hay que saltarlo

[p(:,k*(n-1)+i),pix]=fread(foto,10304,'int8=>double');

Page 27: Domotica Con Matlab

% la imagen se guarda como vector columna de la matriz de datos p

j=fclose(foto);

end

end

% listo los datos, m*k fotos como vectores columna de la matriz de datos p

% los normalizamos

[pn,meanp,stdp]=prestd(p);

% ahora el output

t=eye(k);

for n=1:m-1;

t=[t,eye(k)];

end

% el output 't' se compone de 'm' matrices eye(k)

% lista la ficha binaria de identidad, el AND es nulo

net=newff(minmax(pn),[2*(k+2),k+m,k],{'tansig','tansig','logsig'},'trainrp');

net.trainParam.show=10;

net.trainParam.goal=0.001;

% ahora a entrenar...

[net,tr]=train(net,pn,t);

% ahora se ve como quedamos, probamos el input

for i=1:m*k

a(:,i)=sim(net,pn(:,i));

end

% si esta matriz se parece a [eye(k),eye(k)...] estamos bien

% ahora vamos a probar otro set de 'm' fotos de los mismos individuos...

for n=m+1:m+m;

for i=1:k;

Page 28: Domotica Con Matlab

the_file=['D:\face\face_files\s' int2str(i) '\' int2str(n) '.pgm'];

foto=fopen(the_file,'r');

[B,header]=fread(foto,14,'char=>char');

[p(:,k*(n-1)+i),pix]=fread(foto,10304,'int8=>double');

j=fclose(foto);

end

end

[pn,meanp,stdp]=prestd(p);

% listos los datos de prueba

for i=1:m*k

b(:,i)=sim(net,pn(:,i));

end

b-a

% los vectores columna no nulos de esta matriz 'miden' la fidelidad de la identificacion

4 Los resultados.

4.1 Entrenamiento.

Puede observarse que el entrenamiento tomó 70 épocas, lográndose la meta prefijada de error. El entrenamiento utilizó la variante ‘resilient backpropagation’ [2] en modo batch. Esta variante observa los cambios de signo en el gradiente, intensificando el descenso en forma monotónica en la misma dirección si es que el signo no cambió. Si hay cambio, se vuelve a una tasa de aprendizaje pequeña. El método tiene muy buena convergencia; BP tradicional, BP con momentum, BP con tasa de aprendizaje variable y BP con tasa y momentum variables no lograron la meta en 100 épocas, en realidad con evolución plana del error a partir de la época 40.

Log del proceso de entrenamiento

TRAINRP, Epoch 0/100, MSE 0.371922/0.001, Gradient 0.389574/1e-006

Page 29: Domotica Con Matlab

TRAINRP, Epoch 10/100, MSE 0.0183699/0.001, Gradient 0.0120647/1e-006

TRAINRP, Epoch 20/100, MSE 0.00686645/0.001, Gradient 0.00241339/1e-006

TRAINRP, Epoch 30/100, MSE 0.00319294/0.001, Gradient 0.00116063/1e-006

TRAINRP, Epoch 40/100, MSE 0.00210703/0.001, Gradient 0.00165312/1e-006

TRAINRP, Epoch 50/100, MSE 0.00152078/0.001, Gradient 6.16599e-005/1e-006

TRAINRP, Epoch 60/100, MSE 0.0012267/0.001, Gradient 0.000784313/1e-006

TRAINRP, Epoch 70/100, MSE 0.000993673/0.001, Gradient 0.000253889/1e-006

TRAINRP, Performance goal met.

Se observa que aún queda gradiente; se podía haber llegado a un error más bajo.

El proceso, hasta la etapa de fin de entrenamiento, tomó algo más de seis minutos. Incluido en este tiempo, adicionalmente al entrenamiento mismo, está el abrir, leer y cerrar 200 archivos y el preproceso de normalización.

4.2- Prueba.

Se simuló la red con los datos de entrenamiento, el resultado se almacenó en la matriz a. A continuación se leyó y normalizó la información correspondiente a las fotos 5 a 10 de cada uno de los 40 individuos, procediéndose a entregarla a la red para identificación. El resultado se almacenó en la matriz b. Finalmente se calculó b-a, matriz que mide el grado de confusión en la identificación. Esta fase del proceso tomó cerca de dos minutos.

4.3- Análisis de los resultados.

En la Figura 2 puede verse el despliegue gráfico de la matriz b-a. Se observa que la identificación es casi perfecta. Los escasos ‘spikes’ que aparecen, con un valor máximo de 0.5, indican algún grado de confusión. Sin embargo, para todas las fotos el valor de respuesta para el bit asociado a su ficha de identificación es cercano a 1.

Page 30: Domotica Con Matlab

Figura 2.- Resultados de la prueba, despliegue de la matriz b-a.

Page 31: Domotica Con Matlab

5 Conclusiones.

Los principios de diseño utilizados para especificar la red de retropropagación dieron excelentes resultados en reconocimiento de rostros, tanto en tiempo de proceso como en fidelidad de identificación. En efecto, los datos presentados están contenidos en más de 4 MB y la tarea que se entrega a los más de 800,000 pesos de la red es aprender como están organizados. El sobre-aprendizaje, asimilable a privilegiar la memorización de los valores de los datos, no se produjo; la evidencia está dada por el procedimiento de prueba que involucró imágenes distintas a las del entrenamiento. En efecto, los resultados muestran que no sólo se capturó la configuración particular de cada rostro sino que con la presentación de otro ejemplar se asimiló características generales que permitieron asociar la identidad correcta durante la prueba.

La normalización de los datos probó ser un método muy eficiente de compactación sin el cual la identificación no funciona. En efecto, sin este procedimiento la convergencia no se alcanza en menos de 100 épocas como puede notarse en la gráfica de entrenamiento en la Figura 3.

Figura 3.- Entrenamiento con datos no normalizados.

Page 32: Domotica Con Matlab

Este resultado muestra que es imprescindible preprocesar los datos a la vez que el tipo de preproceso no necesita ser muy complicado. En efecto, la extracción de características relevantes es efectuada por la red de retropropagación en forma satisfactoria sin necesidad de tener que incorporar hipótesis acerca de la jerarquización de las mismas. Se reencuentra así una hipótesis de trabajo referente a un mecanismo plausible de percepción conducente al reconocimiento de rostros en una escala de tiempo que sugiere un proceso muy eficiente de compresión de datos. En efecto, considerando el ancho de banda del ‘hardware’ biológico involucrado, el flujo neto de señales debe ser bastante reducido. Adicionalmente, el algoritmo de compresión nos es transparente; debe ser relativamente simple, probablemente subordinado al proceso de identificación de modo de modular la captura y compresión de acuerdo al avance de la identificación, en forma similar a la retropropagación del error. Se concluye que el canal de comunicación entre la parte cognoscitiva y la parte perceptual debe ser bidireccional; la percepción no puede ser pasiva.

Agradecimientos

Page 33: Domotica Con Matlab

El primer autor (RS) agradece el apoyo del proyecto Dicyt-USACH 069913SS.

El segundo autor (LL) agradece el apoyo prestado por la Facultad de Ciencias de la Ingeniería, Universidad Diego Portales.

Referencias bibliográficas

1) Valentin, D., Abdi, H., O'Toole, A.J., and Cottrell, G.W. (1994). Connectionist Models of Face Processing: A Survey. Pattern Recognition, 27(9):1209-1230.

2) Hancock, P.J.B., Bruce, V., and Burton, A.M. (1999). A comparison of two computer-based face recognition systems with human perceptions of faces. Vision Research

3) Burton, A.M., Bruce, V., and Hancock, P.J.B. (January 1999). From pixels to people: A model of familiar face recognition. Cognitive Science, 23(1).

4) Lawrence, Giles, Tsoi, Back 1996 citeseer.nj.nec.com/lawrence96what.html What Size Neural Network Gives Optimal Generalization? Convergence Properties of Backpropagation (UMIACS-TR-96-22)

5) Lawrence, Giles, Tsoi, Back (1997) Face Recognition: A Convolutional Neural Network Approach - http://citeseer.nj.nec.com/update/25947 citeseer.

http://www.buenastareas.com/temas/matlab-reconocimiento-de-imagenes/0