Professional Documents
Culture Documents
1. Introducción. 3
2. Preliminares. 4
3. Detección de caras. 5
3.1. Enfoques basados en los rasgos faciales. 5
3.1.1. Análisis a bajo nivel 5
3.1.2. Análisis de rasgos. 6
3.1.3. Modelos de silueta activa. 7
3.2. Enfoques basados en la imagen. 7
3.2.1. Subespacios lineales. 7
3.2.2. Redes neuronales. 8
3.2.3. Análisis estadístico. 8
4. Análisis de expresiones faciales. 9
4.1. Extracción de rasgos. 9
4.2. Cálculo de las unidades de acción. 10
4.2.1. Modelo frontal 10
4.2.2. Modelo lateral 12
4.2.3. Combinación de los modelos. 12
4.3. Clasificación emocional 13
5. Conclusiones. 14
6. Bibliografía. 15
1. Introducción
Dentro de las aplicaciones de procesado de imágenes digitales, un campo muy interesante y ahora
en auge es el que trata acerca de la detección de rostros humanos en una fotografía o en un vídeo.
La detección de caras lleva ya algún tiempo desarrollándose; fue en la década de los setenta
cuando surgieron los primeros algoritmos, basados en técnicas heurísticas y antropométricas. Dichos
algoritmos fallaban bastante, y eran muy sensibles a los cambios. En principio sólo detectaban una cara en
una fotografía con fondo blanco (la típica foto carné). Si queríamos además reconocer a un sujeto con
gafas, había que cambiar todo el algoritmo.
Estas investigaciones se abandonaron debido a que por entonces la detección facial no tenía
utilidad, a causa de la falta de desarrollo de la tecnología. Fue en la década de los noventa cuando el
desarrollo de algoritmos que detectaban rostros inició su auge, dado que la tecnología empezaba a
permitir la reproducción de vídeos, videoconferencias, los procesadores eran cada vez más rápidos, etc.
De todos modos, incluso hoy detectar caras en una imagen puede llevar desde pocas milésimas hasta
varios segundos, según el tamaño de la imagen, la fiabilidad del algoritmo, etc.
Detectar una cara supone el primer paso hacia el reconocimiento de la misma. Es decir, antes de
saber quién es la persona que aparece en una imagen, debemos idear algoritmos que permitan detectar
automáticamente que en la fotografía aparece una cara. Los objetivos de este ámbito de desarrollo
(detección y posterior reconocimiento) son:
· Videoconferencias. Se podrían idear algoritmos para detectar una cara en una secuencia de
vídeo y hacerle un seguimiento, de forma que la cámara ajuste su campo de visión
adecuadamente si el individuo se mueve, o cuelgue de forma automática si se va.
· Vigilancia de multitudes. Estos algoritmos son perfectos en caso de que alguien buscado por
la justicia se intente camuflar en medio de una multitud, por ejemplo, una manifestación o un
estadio de fútbol. No hay más que hacer barridos entre la gente y dejar que el ordenador haga
el resto.
· Seguridad doméstica. Existen sistemas que vigilan un hogar mediante cámaras de seguridad,
y que avisan a la policía en caso de que alguien entre en la casa. Con estos algoritmos se podría
averiguar además si el que entra es conocido (por lo que no hay que dar parte) o desconocido.
En este documento trataremos de explicar los distintos métodos que se pueden utilizar para
detectar una cara, y veremos como ninguno de ellos es efectivo al cien por cien, dado que cada uno tiene
sus deficiencias. Igualmente, expondremos un posible método para la detección de expresiones faciales.
3. Detección de caras
Hay dos tipos de enfoque básicos a la hora de abordar el problema de detectar una cara en una
imagen:
· Enfoques basados en los rasgos faciales. Estos métodos se basan en buscar determinados
elementos que los que componen una cara, como pueden ser los ojos, líneas de contorno, etc.
· Enfoques basados en la imagen. En este caso los métodos trabajan con la imagen completa o
zonas concretas de la misma, efectuando cálculos que determinan si hay una cara o no, sin
buscar rasgos concretos.
Son técnicas que trabajan a nivel de píxel. Hay diversas técnicas dentro de este apartado, las más
características son:
Detección de bordes. Fue una de las primeras técnicas utilizadas. La idea se basa en analizar las
líneas que componen los bordes de una cara y utilizarlas para detectar los rasgos faciales. Para llevar a
cabo su propósito, el algoritmo sigue los siguientes pasos:
· Detectar los bordes de la imagen, utilizando para ello alguno de los operadores existentes,
como el de Marr-Hildreth.
· Una vez obtenidos los bordes, se procede a efectuar un adelgazamiento a fin de obtener para
cada borde una línea de un píxel de ancho que lo represente.
· Filtrado de componentes. El algoritmo se queda ahora sólo con las componentes que sean
más susceptibles de formar parte de una cara. Por ejemplo, buscando líneas que en conjunto se
asemejen a una elipse de determinadas proporciones de ancho y alto.
· Etiquetado. Una vez obtenidas dichas componentes, se etiquetan como lado derecho de la
cara, lado izquierdo, línea del pelo, etc.
Las componentes etiquetadas se combinan para formar posibles candidatos para ser una cara,
decisión que toma una función de coste, que utiliza la proporción áurea para sus cálculos.
Esta técnica detecta correctamente aproximadamente tres de cada cuatro caras, con un dos por
ciento de falsos positivos. Este algoritmo puede trabajar (aunque con más dificultad) incluso si el fondo de
la imagen no es uniforme. Si la cara no está de frente, es totalmente ineficiente.
Información de grises. Trabaja sobre la idea de que rasgos faciales tales como las cejas, las
pupilas y los labios aparecen como zonas más oscuras de la imagen que las zonas que corresponden a las
regiones faciales que los rodean. Este algoritmo se compone de las siguientes partes:
Este algoritmo produce diferentes resultados en función del color de la piel del sujeto que aparece
en la imagen. Para corregir este problema, existe una técnica similar aunque más potente que usa la
información del color, dado que dos siluetas con la misma información de gris pueden ser completamente
diferentes si se tiene en cuenta la información del color.
El análisis a bajo nivel puede dar información ambigua, por ejemplo, si aparecen en la imagen
objetos que tengan un color similar al del modelo de color de piel utilizado. Los métodos que vienen a
continuación se basan en la geometría de la cara para caracterizar y posteriormente verificar rasgos a fin
de evitar dicha ambigüedad.
Búsqueda de rasgos. Hay varias formas de llevar a cabo este algoritmo, siendo una de ellas la
siguiente:
· Búsqueda de la parte superior de la cabeza. Se efectúa una hipótesis sobre lo que puede ser
una posible línea del pelo en lo alto de la frente. Puede ser difícil si la persona tiene pelo
cubriendo zonas de la frente.
· Búsqueda de los ojos. A partir de dicha línea efectúa un barrido hacia abajo tratando de
buscar zonas donde la densidad de gris aumente y disminuya bruscamente en el plano
horizontal. Dichas zonas corresponden con las pupilas. Falla si el individuo usa gafas, si uno de
los ojos no aparece por cualquier motivo, o evidentemente si la imagen está rotada.
· Uso de plantillas flexibles. La distancia entre la línea del pelo y el plano de los ojos se usa
como medida de referencia para inicializar una plantilla flexible que cubre el resto de rasgos,
como la nariz y la boca. La plantilla trata entonces de ajustarse a dichos rasgos usando una
función de costes basada en bordes.
Este método es capaz de detectar de forma correcta aproximadamente cuatro de cada cinco
caras.
Análisis de constelaciones. Los métodos vistos hasta ahora son muy rígidos, y sólo funcionan bajo
condiciones muy específicas. Para subsanar este problema se ideó el método del análisis de
constelaciones, que se basa en el uso de un modelo probabilístico que estudia la posición espacial de los
rasgos faciales, intentando buscar patrones que se asemejen a una cara. Este método tiene un gran
contenido matemático, y por eso no nos vamos a centrar en él, aunque debemos decir que falla si se
produce una rotación significativa de la cara del sujeto. Existen variantes de este algoritmo que llegan
hasta el noventa por ciento de aciertos.
Los modelos de silueta activa trabajan usando la información de los bordes y el brillo de la
imagen, interactuando con los rasgos locales de la imagen de forma que poco a poco se van deformando y
tomando la forma del rasgo.
Snakes. Se usan comúnmente para localizar el contorno de la cabeza. Se inicializa una snake en
las proximidades de una cara, y posteriormente se va fijando a los contornos que encuentra hasta asumir
la forma de la cara. La evolución de la snake se lleva a cabo minimizando una función de energía, que
depende de la energía interna (que depende de las propiedades intrínsecas de la snake y define su
evolución natural, expandirse o contraerse) y de la energía externa (que contrarresta la interna y hace que
la snake se desvíe de su evolución natural para ajustarse a los contornos). Cuando la snake llegue al
equilibrio se habrá ajustado a la forma de la cara.
Plantillas deformables. Es el siguiente paso, usando las snakes para encontrar más rasgos faciales
además del contorno de la cara. Por ejemplo, se pueden encontrar los ojos usando para las snakes un
mecanismo de deformación que incluye el cálculo de gradientes de una función de energía.
El modelo de los subespacios lineales tiene un gran contenido matemático, por lo que puede no
ser demasiado interesante desde el punto de vista de esta asignatura. La base del método es la siguiente:
Es el método más utilizado en la detección de caras en una imagen, dado el alto porcentaje de
aciertos que produce, siendo en algunos casos superior al 95%. Las redes neuronales se usan
generalmente para la clasificación de imágenes según patrones establecidos, por ejemplo, conseguir
averiguar qué representa una imagen borrosa o incompleta. En nuestro caso, la red neuronal se entrena
usando un conjunto de imágenes que representan caras (por ejemplo, de 16x16 píxeles) de todo tipo (de
varias razas, tonos de piel, con y sin gafas, pendientes, posiciones de los labios y ojos, ligeras rotaciones,
e incluso caras humanoides) y otro conjunto de imágenes que no representan caras, de forma que la red
neuronal pueda establecer el criterio adecuado acerca de lo que es una cara y lo que no lo es. La
respuesta de la red neuronal ante una imagen de entrada es la de decidir si dicha imagen corresponde o
no a una cara, es decir, una respuesta binaria.
Cuando se trata de una imagen grande, compleja, en la que pueden aparecer varios rostros, se
procede de la siguiente forma:
Bastante similar al método anterior, también supone un entrenamiento del algoritmo. En este
caso, se usa un método estadístico en vez de una red neuronal: lo que más se parezca estadísticamente a
lo que yo sé que es una cara, tendrá más probabilidades de ser una cara.
El método concreto consiste en calcular la varianza entre dos funciones probabilísticas de densidad
(creadas durante el entrenamiento), correspondientes a la probabilidad de que la imagen sea una cara, y a
la probabilidad de que no lo sea.
4. Análisis de expresiones faciales
En realidad, una persona en raras ocasiones pone un gesto facial clasificable al cien por cien
dentro de una de estas emociones base. La expresividad humana es tan amplia y diversa como personas
hay en el mundo, de forma que a la hora de clasificar una emoción lo mucho que podemos hacer hasta el
momento es representarla como porcentajes de emociones puras (ejemplo: para un ordenador una cara
puede denotar un ochenta por ciento de sorpresa y un veinte por ciento de alegría, aunque para un ser
humano esa misma cara puede denotar “ese ha visto a una persona muy querida a la cual hacía mucho
tiempo que no veía”).
Para llegar a clasificar una expresión, son necesarios diversos pasos, que van desde la detección
de la cara en la imagen (visto en el apartado anterior) hasta la recopilación de lo que se llaman “unidades
de acción”, concepto que veremos más adelante y a partir de cual se produce el resultado final.
Una emoción viene representada ni más ni menos (como bien saben los dibujantes de cómics) que
por una combinación de posiciones de las distintas partes de la cara: ojos, cejas y boca, sobre todo. Por
tanto, y habiendo realizado como paso previo la detección de la cara, hay que proceder a identificar cada
una de las partes de la cara por separado.
Un primer paso podría ser detectar el eje de simetría de la cara. A partir de dicho eje podemos
detectar puntos concretos como la punta de la nariz y la barbilla mediante la distribución del brillo de la
imagen a lo largo del eje. Si representamos en una gráfica dicha distribución (el brillo según su
intensidad), veremos una serie de picos y valles que se corresponden con los máximos y mínimos locales
de brillo. Determinados puntos de esa gráfica son los puntos que buscamos, como el primer máximo local
tras el primer valle comenzando por la parte inferior de la cara, correspondiente a la barbilla.
Dado que la finalidad del algoritmo no es buscar una cara sino analizar la expresión de la misma,
supondremos que la imagen muestra una cara en condiciones adecuadas de luminosidad.
Una vez calculado el eje de simetría y conociendo los extremos de la cara, podemos dividir la
imagen en cuadrantes, ya que más o menos podemos averiguar dónde se hallan el resto de rasgos que
buscamos. Por ejemplo, para las cejas podemos usar código de cadenas, una vez calculado el color de la
piel y de las propias cejas, sabiendo que éstas se encuentran en los cuadrantes superiores izquierdo y
derecho. Para los ojos también se puede utilizar código de cadenas.
Para detectar los labios, y dado que tal vez sea la boca la parte de la cara que mayor diversidad
de posiciones tiene, se requiere un método algo más sofisticado. En el apartado anterior estudiamos la
posibilidad de usar “snakes” para detectar el contorno de la cara. Aquí las podemos utilizas para detectar
las curvas de tanto el exterior como del interior de la boca. Se puede imaginar una snake como una
gomilla que primero la estiras, la colocas alrededor del objeto que quieres encerrar y luego la sueltas
hasta que la gomilla adopta la forma de dicho objeto (situación de equilibrio de energía entre la tensión de
la gomilla y la resistencia del objeto). Para detectar la curva exterior se usa una snake que tienda a
encoger, inicializada alrededor de la boca; para la curva interior se usa una snake que tienda a
ensancharse (concepto de la gomilla pero al revés), inicializada en el centro de la boca.
4.2. Cálculo de las unidades de acción
Una vez detectados todos los componentes faciales hay que determinar en qué posición se
encuentran. Para ello se llevan a cabo una serie de mediciones entre determinados puntos. El sistema que
se presenta, que corresponde con el presentado por M. Pantic y L.J.M. Rothkrantz en su artículo “Sistema
experto para el análisis automático de expresiones faciales”, hace uso de dos imágenes: la de frente y la
de perfil del individuo a estudiar. Existen otras posibilidades, como la de usar simplemente la imagen
frontal; algunas llegan incluso a crear un modelo 3D de la cabeza de la persona cuya expresión se quiere
identificar.
A partir de estas mediciones se calculan las “unidades de acción”, que se corresponden con la
contracción de uno o más músculos de la cara. Las combinaciones de dichas unidades de acción serán las
que nos digan la emoción que se ha detectado en el individuo.
Rasgo Descripción
f1 Ángulo BAD
f2 Ángulo B1A1D1
f3 Distancia AE
f4 Distancia A1E1
f7 Distancia 3G
f8 Distancia 4G1
f9 Distancia FG
f12 Distancia IB
f14 Distancia CI
f15 Distancia CJ
f16 Distancia IJ
f17 Distancia KL
f18 Distancia CM
Una vez realizadas estas mediciones se procede a determinar las unidades de acción presentes en
la expresión. Cuando en la siguiente tabla (que presenta tan sólo algunas de las posibles unidades de
acción) se dice que determinado rasgo está incrementado o decrementado, se refiere a la diferencia entre
la medición en la imagen y la medición sobre una supuesta expresión neutral en una cara del mismo
tamaño.
En el modelo lateral se sigue una pauta similar al modelo frontal, sólo que ahora los puntos se
toman a partir de la línea del perfil de la cara, tomando los sucesivos máximos y mínimos locales de la
misma:
Punto Descripción
En este caso no tenemos que efectuar el paso intermedio de las mediciones, sino que podemos definir las
unidades de acción, que son las mismas que en el apartado anterior (por lo que nos ahorramos la
descripción). Mostramos algunas de ellas:
También se pueden dar variaciones de algunas UAs, como la 28, que cuenta con las variaciones
28s y 28i, correspondientes a los rasgos “labio superior metido hacia dentro” y “labio inferior metido hacia
dentro” respectivamente. También aparecen otras nuevas, muy difíciles o casi imposibles de medir en el
modelo frontal, como la UA 19 correspondiente al rasgo “lengua visible”, marcada por la aparición de dos
mínimos y un máximo locales entre P6 y P8; y las UAs 36s y 36i correspondientes respectivamente a los
rasgos “bulto sobre el labio superior producido por la lengua” (incremento de curvatura entre P5 y P6) y
“bulto bajo el labio inferior producido por la lengua” (P9 está ausente).
Una vez definidas las unidades de acción para cada modelo, se puede ver como algunas se
pueden determinar más fácilmente en el modelo frontal (por ejemplo, la UA 1, que el modelo de perfil da
problemas, puesto que al levantar las cejas se arruga la frente y aparecen una serie de máximos y
mínimos locales de más), y otras se determinan mejor con el modelo lateral (como hemos visto en la
sección anterior). Es menester por tanto elaborar una lista determinando qué unidades de acción medimos
en el modelo frontal, y cuáles medimos en el modelo lateral, lo cual se puede dejar al criterio de cada uno.
Se dice que una determinada unidad de acción está activada si la medición que hemos tomado
difiere sustancialmente del modelo neutral.
El último paso del algoritmo consiste en clasificar la expresión facial dentro de una determinada
emoción, para lo cual usamos las unidades de acción que hemos calculado.
da lugar a la emoción “sorpresa”. El resto de emociones se clasifican del mismo modo, según diferentes
combinaciones de unidades de acción presentes y no presentes, teniendo en cuenta (como dijimos al
principio) que es difícil que una persona tenga una expresión totalmente pura.
Por otro lado, existen diferentes clasificaciones de las unidades de acción. La propuesta
anteriormente sería una posibilidad, otra podría ser descomponiendo cada emoción en menos unidades de
acción y cada vez que aparezca una de las siguientes combinaciones incrementar la posibilidad de que la
emoción final sea la establecida:
· 1 + 2 = sorpresa
· 1 + 4 + 5 = miedo
· 1 + 4 + 5 + 7 = miedo
· 1 + 4 + 7 = tristeza
· 4 = furia
· 15 = tristeza
· 10 = disgusto
· 12 = alegría
· etc.
5. Conclusiones
Acerca de la detección de caras en imágenes, el método que nos ha parecido más adecuado es el
de las redes neuronales, que además es el más utilizado en las webs y programas de demostración que
hemos hallado en Internet. Las redes neuronales no sólo se usan para la detección de caras, tienen otras
muchas aplicaciones, y por eso es un campo de investigación que está bastante desarrollado. No es como
el resto de algoritmos estudiados, que se han creado única y exclusivamente para la detección de caras.
Por tanto, lo único que hay que hacer es entrenar una red neuronal con un conjunto de caras. Y ni
siquiera tenemos que preocuparnos por crear nuestra propia colección. Existen en Internet colecciones ya
hechas, como la BioID Face Database. De su página web se puede descargar un conjunto de 1521
imágenes de 384x286 píxeles, que ocupan un total de 124 MB aproximadamente. La utilidad de esta
colección no es sólo la de entrenar una red neuronal (sobre todo porque para entrenar una red neuronal
antes habría que recortar y escalar las imágenes a un tamaño inferior), sino también la de comprobar la
eficacia de nuestro algoritmo detector de caras usándolas como método de evaluación estándar.
Nuevas líneas de investigación en este campo incluyen el buscar caras de frente pero rotadas, y
caras de perfil a distintos grados. Las redes neuronales son capaces de encontrar caras ligeramente
rotadas, el grado máximo de rotación dependerá del conjunto de entrenamiento. Hay varias posibilidades:
Entrenar la red neuronal con caras rotadas y de perfil, aunque eso podría incrementar la tasa de
falsos positivos.
Entrenar la red neuronal con caras en distintos grados de perfil, y hallar las caras rotadas mediante
un bucle más en el algoritmo, tal que para cada posición de la ventana de la imagen, dicha ventana
sea rotada en cada paso un determinado número de grados, hasta completar una vuelta entera o
hasta encontrar una cara. Se podría combinar este método con otros que determinen la
probabilidad de que haya una cara en la ventana (según el color de la piel, por ejemplo) y aplicar el
nuevo bucle que gira la ventana sólo en ese caso.
Desde esta última web se puede acceder a multitud de sitios con información acerca de la
detección de caras, demostraciones on-line, descargas de ficheros con código fuente, aplicaciones de
ejemplo, etc. Destacamos las siguientes webs: http://aias.csd.uch.gr:8999/cff/, que contiene un ejemplo
de detección de caras y http://markov.ucsd.edu/cgi-bin/face_tracker/index.pl, que contiene un ejemplo de
detección de expresiones faciales.