Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
NOTA: recuerden que tanto el archivo .fig y .m tienen que estar en la misma dirección
para que pueda funcionar el programa.
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 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.
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.
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
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.
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.
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
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.
Display de 7 segmentos
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.
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
Los circuitos se pueden montar sobre una placa tipo "protoboard" y utilizar cable
rígido para realizar las conexiones necesarias entre los componentes.
DIP switch (izquierda) y regletas (derecha).
Conector DB25 macho con líneas de salida, entrada y
Ejemplo de circuito terminado, conectado al PC.
tierra finalizadas en regletas.
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
END
tIni! = TIMER
DO WHILE TIMER - tIni! < segundos: LOOP
END SUB
INP(CONTROL)
? ? ? ? X X X X
&HF
0 0 0 0 1 1 1 1
AND
0 0 0 0 X X X X
INP(ESTADO)
Y Y Y Y ? ? ? ?
&HF0
1 1 1 1 0 0 0 0
AND
Y Y Y Y 0 0 0 0
Y Y Y Y 0 0 0 0
0 0 0 0 X X X X
OR
Y Y Y Y X X X X
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.C
CONTROL DE ACTUADORES Y SENSORES MEDIANTE PUERTO PARALELO
#include <stdio.h>
#include <dos.h>
main ()
{
unsigned byte;
unsigned i, j;
else
RED NEURONAL DE ARQUITECTURA PARAMÉTRICA
EN RECONOCIMIENTO DE ROSTROS
luis.larraguibel@udp.cl
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
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.
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.
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.
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:
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.
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;
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');
[p(:,k*(n-1)+i),pix]=fread(foto,10304,'int8=>double');
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
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);
for i=1:m*k
a(:,i)=sim(net,pn(:,i));
end
% ahora vamos a probar otro set de 'm' fotos de los mismos individuos...
for n=m+1:m+m;
for i=1:k;
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);
for i=1:m*k
b(:,i)=sim(net,pn(:,i));
end
b-a
4 Los resultados.
4.1 Entrenamiento.
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.
5 Conclusiones.
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.
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
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).
http://www.buenastareas.com/temas/matlab-reconocimiento-de-imagenes/0