Post on 30-Apr-2020
SISTEMA DE CONTEO AUTOMÁTICO DE FLUJO DE PERSONAS POR MEDIO
DE VISIÒN ARTIFICIAL
ANDRÉS MAURICIO GARCIA PIRAGUA
WILLIAM ALEXANDER MORENO GOMEZ
TRABAJO DE GRADO PARA OPTAR AL TITULO DE INGENIERO EN CONTROL.
DIRGIDO POR: ING. MIGUEL RICARDO PEREZ PEREIRA
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
FACULTAD TECNOLOGICA INGENIERIA EN CONTROL
Bogotá D.C. Colombia
2016
HOJA DE ACEPTACION
Sistema de conteo automático de personas por medio de visión artificial
OBSERVACIONES
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
____________________________________________________________________
_____________________________
Director del Proyecto
Ing. Miguel Pérez Pereira
Fecha de presentación Mayo de 2016
Dedicatoria
Andres: Dedico este trabajo a mis Padres, hermanos, amigos y todas las personas
que me apoyaron día a día en este camino, gracias por su voto de confianza.
William: Dedico este trabajo a mis Padres quienes con su apoyo me han brindado la
motivación para lograr mi desarrollo profesional, a mi familia quienes han sido parte
importante y ejemplo a seguir y todas las personas que han hecho parte de este
gran logro..
AGRADECIMIENTOS
Andrés: Gracias a Dios por mi familia, mis profesores, amigos y compañeros que
estuvieron compartiendo con nosotros durante estos años, nunca los olvidare porque
siempre nos apoyaron con sus consejos y enseñanzas. Gracias a mis padres por su
apoyo, su paciencia y su fe en mí. Y gracias a esa mujer que me ha llenado de
muchas sonrisas para superar los momentos más difíciles.
William: Doy gracias principalmente a Dios por brindarme las herramientas para
haber alcanzado esta meta y por haberme brindado el apoyo de familiares,
profesores, amigos e incluso personas que me enseñaron a comprender el
transcurso por la universidad. Gracias profundas a mis padres ya que son el motivo
de este gran esfuerzo, a mi compañero de grado quien me brindo un gran apoyo
durante la carrera y a todas las personas que me brindaron un apoyo moral durante
estos años.
RESUMEN
Un problema típico en una ciudad tan poblada como lo es Bogotá es la densidad de
personas que concurren a sitios de carácter público, muchos sitios carecen de
sistemas de control de aforo de personas, debido al costo de implementación y
mantenimiento, por ello se pensó en una solución a partir de dispositivos no
mecánicos. Desde el área del Procesamiento digital de señales y Visión artificial se
propuso implementar un contador de personas versátil, capaz de trabajar en tiempo
real, y sobre cualquier tipo de fuente de video, basado en soluciones de código
abierto de tal forma que no haya restricción de ningún tipo a la hora de usar,
modificar, o comercializar la solución. Se implementaron dos algoritmos diferentes
para identificación de peatones, los algoritmos fueron programados sobre Python y
librerías OpenCV donde mediante pruebas de desempeño se identificó el algoritmo
más óptimo en cuanto a uso de recursos de hardware y precisión para realizar un
conteo de personas sobre un entorno real controlado. Al final se tiene como resultado
dos algoritmos de identificación que se pueden llevar a otras aplicaciones como
seguridad y vigilancia sobre múltiples plataformas gracias al lenguaje de
programación el cual puede ser portado fácilmente sin restricciones de ningún tipo.
Palabras clave: Extracción de características, Análisis de imágenes, Detección de
objetos, Técnicas de sustracción, Reconocimiento en imágenes, Histograma de
Gradientes
Abstract
A typical problem in such populated as it is Bogotá city is the density of people
attending sites public, many sites lack control systems capacity of people because
the cost of implementation and maintenance, so think of a solution from non-
mechanical devices. Since the area of digital signal processing and artificial vision we
set to implement a versatile counter, able to work in real time, and any type of video
source, based on open source solutions so that there is no restriction to use, modify,
or implement in market the solution. Two different algorithms for identifying
pedestrians were implemented, the algorithms are programmed in Python and
libraries OpenCV where by performance tests the most optimal algorithm identified
regarding use of hardware resources and precision for a count of people on a real
environment checked. Eventually results in two identification algorithms that can lead
to other applications such as security and surveillance on multiple platforms thanks to
the programming language that can be easily ported without any restrictions
Keywords: Feature extraction, Image analysis, Object detection, Subtraction
techniques, Image recognition, Histogram of Oriented Gradients.
Tabla de Contenido
LISTA DE FIGURAS ................................................................................................... 9
LISTA DE TABLAS .................................................................................................... 11
Capítulo 1 .................................................................................................................. 12
1. Introducción ........................................................................................................ 12
1.1 Descripción .................................................................................................. 12
1.2 Objetivo General .......................................................................................... 13
1.2.1 Objetivos Específicos ............................................................................ 13
1.3 Motivación .................................................................................................... 13
Capítulo 2 .................................................................................................................. 15
2. Estado del arte ................................................................................................... 15
Capítulo 3 .................................................................................................................. 17
3. Marco Teórico .................................................................................................... 17
3.1 Definiciones .................................................................................................. 17
3.2 Algoritmos de Detección de Personas ......................................................... 24
3.3 Detección Mediante Descriptores de Gradientes Orientados ....................... 25
3.3.1. Entrenamiento de la maquina HOG descriptor ...................................... 25
3.3.2. Aplicación del algoritmo HOG descriptor ............................................... 26
3.3.3. Pirámides de imágenes HOG para OpenCV ......................................... 29
3.4 Detección mediante técnicas de sustracción de Fondo y extracción de blobs
30
3.4.1 Background Subtractor MOG2 (segmentación de mezclas Gaussianas) .. 32
3.4.2. Extracción de Blobs .................................................................................. 38
3.5 Fuente de Video para el análisis. ................................................................. 39
Capítulo 4 .................................................................................................................. 41
4. Metodología ....................................................................................................... 41
4.1 Introducción: ................................................................................................. 41
4.2 Arquitectura de Hardware y Software ........................................................... 42
4.3 Arquitectura Funcional .................................................................................. 43
4.4 Implementación de Descriptores HOG en OpenCV ..................................... 44
4.5 Implementación de sustractor de fondo y extracción de blobs ..................... 54
4.6 Evaluación de los algoritmos de identificación. ............................................ 61
4.7 Puesta a prueba del mejor algoritmo de identificación. ................................ 66
4.8 Caracterización del ambiente real controlado. ............................................. 68
Capítulo 5 .................................................................................................................. 71
5. Análisis de resultados y conclusiones ................................................................ 71
5.1 Análisis de resultados: .................................................................................. 71
5.2 Conclusiones: ............................................................................................... 75
5.3 Trabajo Futuro .............................................................................................. 76
Bibliografía ................................................................................................................. 77
6. Anexos ............................................................................................................... 80
6.1 Licencia de uso OPEN CV: (http://opencv.org/license.html) ......................... 80
LISTA DE FIGURAS
FIG. 1. ESPACIO DE COLOR RGB [5] ......................................................................................................... 18
FIG. 2 ESPACIO DE COLOR HSV [6] ........................................................................................................... 19
FIG. 3. HISTOGRAMA DE UNA IMAGEN EN ESCALA DE GRISES Y POR COLORES RGB ...................................... 20
FIG. 4 DIAGRAMA DE BLOQUES HOG DESCRIPTOR [8] ................................................................................ 26
FIG. 5. FUNCIÓN DEL DETECTOR HOG. [8] ................................................................................................ 28
FIG. 6. REPRESENTACIÓN PIRAMIDAL DE UNA IMAGEN A 5 NIVELES [10] ....................................................... 30
FIG. 7. IMÁGENES Y SU DIAGRAMA DE DISPERSIÓN ...................................................................................... 33
FIG. 8 CREACIÓN DE BLOB A PARTIR DE UN UMBRAL DEFINIDO SOBRE LA IMAGEN [15]. ................................. 39
FIG. 9 CAMERA CANON POWER SHOT A2500 [16] ..................................................................................... 40
FIG. 10. CÁMARA WEB LOGITECH QUICK CAM [17] .................................................................................... 40
FIG. 11 DIAGRAMA DE FLUJO APLICACIÓN PRINCIPAL ................................................................................... 44
FIG. 12. DIAGRAMA DE FLUJO DETECCIÓN POR HOG .................................................................................. 45
FIG. 13. IMAGEN DE PRUEBA PARA CALIBRAR EL DETECTOR HOG ............................................................... 47
FIG. 14. RESULTADO DE DETECCIONES A PARTIR DE LA VARIACIÓN DEL WINSTRIDE. ..................................... 47
FIG. 15. ANÁLISIS DE DESEMPEÑO POR VARIACIÓN DE WINSTRIDE.. ............................................................. 48
FIG. 16 RESULTADO DE DETECCIONES POR VARIACIÓN DEL PADDING. ......................................................... 49
FIG. 17 VELOCIDAD DE DETECCIÓN POR VARIACIÓN DEL PADING ................................................................. 49
FIG. 18. RESULTADO DE DETECCIONES POR VARIACIÓN DE ESCALADO. ....................................................... 50
FIG. 19. VELOCIDAD DE DETECCIÓN POR VARIACIÓN DE ESCALADO.. ........................................................... 51
FIG. 20. MÚLTIPLE DETECCIÓN Y FALSOS POSITIVOS ................................................................................... 52
FIG. 21. IMÁGENES DE ENTRENAMIENTO PARA LA MAQUINA SVM. ............................................................... 53
FIG. 22. DIAGRAMA DE FLUJO PARA ALGORITMO DE DETECCION POR SUSTRACCION DE FONDO ..................... 55
FIG. 23 OBTENCIÓN FOTOGRAMA POR FOTOGRAMA DEL VIDEO .................................................................. 56
FIG. 24. SEPARACIÓN DEL FOREGROUND MEDIANTE SUSTRACTOR DE FONDO. ............................................. 57
FIG. 25 APLICACIÓN DE FILTRO MORFOLÓGICO DE EROSIÓN. ...................................................................... 58
FIG. 26. APLICACIÓN DE FILTRO MORFOLÓGICO DE DILATACIÓN .................................................................. 58
FIG. 27. DETECCIÓN DE BLOBS MEDIANTE LA MASCARA .............................................................................. 59
FIG. 28. DETECCIÓN DE PERSONAS ............................................................................................................ 60
FIG. 29. GENERACIÓN DE VIDEO RESULTANTE ............................................................................................ 60
FIG. 30 GRAFICA DE PROCESAMIENTO EN FPS DEL ALGORITMO HOG ......................................................... 61
FIG. 31 GRAFICA DE PROCESAMIENTO EN FPS DE IMÁGENES A 400X300 PIXELES ....................................... 62
FIG. 32 PROCESAMIENTO EN FPS BACKGROUND SUBTRACTION .................................................................. 63
FIG. 33 DESEMPEÑO HOG DESCRIPTOR ARRIBA USO DE CPU, ABAJO USO DE RAM .................................... 64
FIG. 34 DESEMPEÑO DEL BACKGROUND SUBTRACTION ............................................................................... 65
FIG. 35 IMPLEMENTACIÓN DEL ALGORITMO HOG ....................................................................................... 67
FIG. 36 DETECCIÓN DE DOS PERSONAS MEDIANTE SUSTRACTOR DE FONDO Y BLOBS ................................... 72
FIG. 37 DETECCIÓN DE DOS PERSONAS POR HOG DESCRIPTOR.................................................................. 72
FIG. 38 CONFUSIÓN DEL DETECTOR POR UN CAMBIO DE LUZ REPENTINO. ..................................................... 73
FIG. 39 COMPARACIÓN DE DETECCIÓN POR BLOBS Y HOG DESCRIPTOR . ................................................... 73
LISTA DE TABLAS
TABLA 1. SPECIFICATIONS CANON POWER SHOT A2500 [16] ..................................................................... 40
TABLA 2. ESPECIFICACIONES LOGITECH QUICK CAM [17]. .......................................................................... 41
TABLA 3 . COMPARACION DE DETECCION DE PERSONAS .............................................................................. 66
Capítulo 1
1. Introducción
1.1 Descripción
El campo de la visión artificial es una disciplina que hace parte del Control electrónico
donde se busca mediante el análisis de imágenes que una maquina logre percibir su
entorno. Por muchos años abordar el campo de la investigación en visión artificial ha
sido una tarea difícil en parte, porque se busca solucionar un problema de forma
inversa, es decir buscar soluciones y respuestas a partir de información incompleta, y
por otra parte debido a las limitaciones tecnológicas que no lograban hace 30 años
concebir sistemas complejos trabajando en tiempo real. Gracias a los avances en
tecnología de los últimos 15 años, la implementación de algoritmos matemáticos
complejos sobre visión por computadora se ha facilitado bastante y por ello desde la
Ingeniería en Control se quiere aplicar ésta ciencia a un problema típico como lo es
la detección de personas mediante una cámara de video con el fin de generar un
conteo que permita calcular el aforo de asistentes en un lugar. Su aplicación puede
ser implementada en campos como la seguridad, administración, y el marketing,
entre otros, por la importancia que genera poder disponer de la información en
cuanto a número de visitantes, cantidad estimada de personas en un recinto,
estadística de asistencia, etc. Para lograr hacer la detección de personas mediante
Visión Artificial se desarrollaron dos tipos de algoritmos con el fin de indicar como se
lleva a cabo su implementación y optimización para trabajar en tiempo real,
posteriormente se explica una metodología de medición cuantitativa para demostrar
cuáles son las ventajas de un método respecto al otro tomando en cuenta la
precisión y el entorno de funcionamiento.
Además, el proyecto trabaja sobre la plataforma de código abierto Python y OpenCV
buscando amplia compatibilidad de códigos y vincular a la academia y al ingeniero a
desarrollar aplicaciones robustas sobre intérpretes de código abierto que permiten un
libre desarrollo y mejoramiento de las herramientas existentes con el mínimo de
restricciones referente a su copia, distribución o modificación.
1.2 Objetivo General
Diseñar un sistema de conteo de personas basado en algoritmos de identificación de
imágenes continuas digitales.
1.2.1 Objetivos Específicos
1.1.1 Evaluar dos algoritmos de procesamiento continuo de
imágenes para conteo de personas.
1.1.2 Implementar el algoritmo de conteo de personas de mejor
desempeño entre los evaluados.
1.1.3 Realizar las pruebas del sistema para comprobar el
funcionamiento del algoritmo en un ambiente real
controlado.
1.3 Motivación
Dentro de la experiencia a través de la carrera un punto sobresaliente es que
muchos trabajos de tesis de ingeniería en control y telecomunicaciones han sido
basados en software privativo como Matlab, antes de empezar el proyecto para junio
de 2015 el proyecto estaba centrado sobre la herramienta Computer Vision System
Toolbox, pero en ese entonces hubo un inconveniente de adquisición de licencias
para los estudiantes, esto implicaba que toda tesis quedaba bloqueada por un
problema de licenciamiento ajeno a los estudiantes, por lo tanto la propuesta fue
desarrollar el proyecto sobre herramientas de código abierto.
Para ello se tomó OpenCV como base, liberado al público en el año 2000 y sobre la
que muchos institutos y universidades a nivel mundial han contribuido al desarrollo
de sus librerías con algoritmos y técnicas muy bien fundamentadas, es por esto que
el impulso que se le quiere dar al uso de esta plataforma desde el área del
procesamiento digital de señales en la carrera de ingeniería en control, busca lograr
en futuro dominar otras técnicas y algoritmos como el de redes neuronales, o
modelado 3-Dimensional. Se deja una puerta abierta a un mundo de posibilidades.
Capítulo 2
2. Estado del arte
En este capítulo se realiza una revisión de varios sistemas de detección
desarrollados con múltiples técnicas que brindaron una guía para buscar los dos
algoritmos a implementar y la metodología de detección que fuese más útil para
cumplir con los objetivos.
2.1 Sistema de conteo de personas basado en detección de rostros
En el trabajo de detección de rostros se tiene una visión positiva del proyecto; el
desempeño que han logrado hoy en día las herramientas computacionales permiten
avanzar en la implementación de soluciones basadas en sistemas más flexibles,
precisos y seguros basándose en sistemas informáticos que proveen una solución
económica de bajo mantenimiento como lo son las cámaras. Este trabajo se enfoca
en un análisis de imágenes de alta calidad para el monitoreo y control del área del
rostro, su principal componente se basa en el detector de rostros y el tracking que se
le hace hasta determinada región para saber si el sujeto avanzo y se debe contar [1].
2.2 Contador de alta densidad de personas usando herramientas morfológicas
En este trabajo se destaca el diagrama de flujo que proponen para el análisis de
imágenes. Aunque su trabajo está limitado a la cantidad de personas que están
presentes en determinado momento, representa un aporte bastante positivo para el
proyecto. Plantean problemas que se debe intentar solucionar como, el hecho que
las personas lleguen abrazadas y haga un conteo erróneo; este trabajo ubica la
cámara apuntando paralelamente al piso y utilizan una técnica de marcado de
pixeles para marcar sobre unos vectores entre imágenes que determinan hacia
donde se dirigen ciertos objetos. Existen problemas cuando las personas llevan
objetos como maletas de mano u otros que marcan también trayectorias sobre los
análisis y pueden convertirse en falsos positivos, pero hace parte de problemas que
estarán incluidos dentro del proyecto. El diagrama de flujo que propone estima la
extracción de los objetos que en la imagen están moviéndose, y estima la posible
existencia de una persona basándose en el área del objeto en movimiento, calcula el
color de los pixeles en movimiento y le hace un seguimiento a través de un par le
líneas imaginarias que representan la entrada y salida del lugar para finalmente
hacer el conteo. Se considera que si el seguimiento a los pixeles no supera las líneas
imaginarias no se debe contar. Es de destacar que la aplicación se realiza con una
resolución de imagen de 320x240 a 30FPS, datos que para el proyecto plantea la
duda si es posible elevar la resolución de la imagen a costa de elevar el proceso
computacional pero mejorar la precisión del trabajo, propone si también se puede
considerar la posibilidad de elevar los fotogramas por segundo que se están tomando
en el video. El resultado final de este trabajo fue un contador de personas con buena
precisión [2].
2.3 Sistemas de reconocimiento basados en la imagen facial
En este trabajo el autor basa su trabajo en la detección facial y resume las
principales investigaciones en el campo del reconocimiento facial. El aporte más
importante de este artículo es la revisión matemática que se realiza para la
extracción de características en las imágenes. Además muestra que si bien los
algoritmos de identificación muestran una alta eficiencia ninguno es 100% confiable y
esto es porque la técnica de identificación por imágenes al no ser invasiva, deja un
margen de error que para algunas aplicaciones puede ser despreciable. Los trabajos
se basan en diferentes técnicas de detección de rostros como Eigenfaces, o
discriminantes lineales FLD de Fisher o Fisherfaces, estos trabajos se especializan
en detección de rostros sobre personas específicas y exponen identificadores claves
para el reconocimiento del área del rostro para eliminar el problema de los falsos
positivos cuando se ponga a prueba el prototipo [3].
2.4 Sistema adaptativo Multi-cámara para detección de objetos en tiempo real
Finalmente un trabajo enfocado a detección de objetos mediante el uso de las
técnicas de modelado de fondo y extracción (background modeling techniques), se
exponen 6 técnicas diferentes para construcción de Background entre las mejores
están: el promedio gaussiano, la estimación por densidad y la concurrencia por
variaciones de imágenes. La comparación de los métodos se hace entorno a la
velocidad, los requerimientos de memoria y la precisión de los métodos. Este Trabajo
extrae el objeto de interés y mediante un seguimiento de coordenadas se estima su
posición en el espacio muy útil si no es posible una detección morfológica [4].
Capítulo 3
3. Marco Teórico
Este capítulo estará dividido en 3 etapas, en primera instancia se hará una revisión
de los términos claves para la comprensión del proyecto, posteriormente se
consignan los elementos de software claves a tener en cuenta para que el proyecto
tenga el éxito esperado de portabilidad de código entre plataformas y finalmente se
presenta la revisión de la teoría de los métodos de detección que utilizados para el
proyecto.
3.1 Definiciones
En un trabajo enfocado en imágenes digitales se debe manejar los términos claves.
A continuación están los términos básicos relacionados con la visión artificial:
3.1.1 Visión por computadora: Se refiere a la adquisición,
procesamiento, identificación y clasificación de patrones
que se pueden encontrar en las imágenes digitales.
3.1.2 Pixel: Elemento fundamental sobre el que se construyen las
imágenes digitales, a saber cada pixel aporta información
de la imagen sobre color intensidad u otro según el formato
usado.
3.1.3 Imagen: Se denomina al arreglo bidimensional de pixeles en
forma de matriz o mapa de bits, que dependiendo del tipo
de representación obtendrá los distintos formatos como
RGB, HSV, Gray Scale, binarizada. Matemáticamente
centrados en la imagen representada por una matriz como
lo muestra la ecuación (1) tal que cada 𝒙𝒏𝒚𝒏 contiene los
valores que representan el color de cada uno de los pixeles
𝑖𝑚𝑔 = 𝑓(𝑥, 𝑦) = [
𝑥1𝑦1 ⋯ 𝑥𝑛𝑦1
⋮ ⋱ ⋮𝑥1𝑦𝑛 ⋯ 𝑥𝑛𝑦𝑛
] (1)
El valor que 𝑥𝑛𝑦𝑛 toman valores en base a una codificación de 8 bits de 0-255
para formatos RGB, HSV, y Gray Scale, y de Unos y Ceros para una imagen
Binarizada.
Formato de color de un Pixel: La generación de colores en imágenes digitales se
hace mediante múltiples técnicas analizando las 3 principales
3.1.4 RGB: es un modelo de imagen aditivo en base a los colores
primarios rojo, verde y azul (Red, Green, Blue). El modelo
indica que por cada color existen diferentes tonalidades
que van desde 0 el más oscuro hasta 255 el más claro, tal
que la combinación de los 3 canales representados por 3
matrices combinadas dan la luminosidad y ancho de banda
del color, para dar el espectro final. Este método es uno de
los más trabajados en visión artificial pues es de los más
simples de comprender tal cual se muestra en la Figura 1.
Fig. 1. Espacio de Color RGB [5]
3.1.5 HSV: representa un modelo cilíndrico del color, fue
desarrollado para aplicaciones de computación gráfica.
HSV representa el matiz (Hue), saturación (Saturation), y el
brillo (Value, o Bightness). Su representación también se
construye de 0-255, tal que en el matiz da la tonalidad del
color deseado, a partir del modelo cilíndrico como se
representa en la Figura 2, donde se hace una equivalencia
de los 365 grados de la circunferencia a los 256 valores de
color que se pueden obtener. Mientras que en la saturación
dada de 0-255 representa el radio del cilindro y el brillo
representado por la altura en 256 valores dan al matiz
deseado el ancho de banda del color su atributo de
percepción de brillo. Este sistema es útil cuando queremos
identificar colores en específico sobre una imagen, pues se
concentra sobre un solo valor o eje facilitando la diferencia
computacional y no sobre los 3 si estuviera en RGB.
Fig. 2 Espacio de Color HSV [6]
A partir de los pixeles y sus colores se tienen otras representaciones que permiten
comprender el espacio sobre el que se construyen las imágenes para que a partir de
valores una maquina pueda distinguir su claridad y tonalidad, en general los cálculos
más importantes son:
3.1.6 Histograma: es una representación gráfica que da una idea
del promedio de distribución de la intensidad en una
imagen, donde en el eje X representa el rango de los pixeles
de 0-255 generalmente para un espacio de profundidad de
color de 8 bits, y en Y la cantidad de pixeles que tienen
asignado ese valor [7]. Un histograma en pocas palabras da
un valor intuitivo a la maquina sobre el contraste, la
intensidad y el brillo. En la Figura 3 se muestra un
histograma de una imagen JPG tomada con una resolución
de 8 megapíxeles en la que se calculó su histograma en
escala de grises y su histograma por colores.
Fig. 3. Histograma de una imagen en escala de grises y por colores RGB
3.1.7 Resolución: La resolución de una imagen especifica las
dimensiones a las cuales fue grabada es decir la cantidad
de pixeles por pulgada cuadrada que existen en la imagen,
entre más resolución tenga una imagen más detalles se
pueden apreciar pues la matriz será más grande, pero
tendrá un mayor peso y su procesamiento será más
demorado, por el contrario una imagen de baja resolución
será más fácil de procesar pero puede que su nivel de
detalle no sea el suficiente para el análisis.
Ruido en imágenes
El ruido en las imágenes es una característica inherente en las mismas y se debe a
la naturaleza de la cámara o el medio de transmisión de la señal, generalmente son
pixeles aislados con valores marcadamente diferentes a los pixeles vecinos. Existe
una clasificación básica de ruido que de acuerdo al tipo es:
3.1.8 Gaussiano: Cuando se aprecian pequeñas variaciones en
las imágenes, se debe principalmente a diferentes
ganancias en la cámara o ruido en los opto sensores.
Se considera que el valor ideal del pixel es el mismo más
una ganancia variable aleatoria gaussiana.
3.1.9 Impulsional: en otras literaturas lo llaman “sal-pimienta”, en
la imagen se aprecia como puntos que son pixeles que
toman valores muy altos o bajos con respecto a sus
vecinos, sus causas son saturaciones en los sensores o
una pérdida de señal en el punto, aunque también en
sistemas de cámaras infrarrojas se da por saturación del
pixel.
3.1.10 Multiplicativo: Si la imagen en general muestra una
deficiencia progresiva, se dice que ocurre cuando hay
presente la convolución de 2 señales [7].
Python
Es un lenguaje de programación de alto nivel, para propósitos generales, cuya
filosofía de centra en la fácil interpretación tal que su sintaxis permite a los
programadores plasmar conceptos en pocas líneas de código para diferentes escalas
de complejidad. Python puede ser comprimido en programas ejecutables sobre casi
cualquier tipo de plataforma, y sin la instalación de intérpretes adicionales. Además
de una escritura dinámica y una combinación de conteos de referencia junto con
detectores de basura que en base a los ciclos de ejecución permite una óptima
administración de memoria, con lo cual facilita la resolución dinámica de nombres
ligando métodos y variables durante la ejecución del programa lo cual para los
programadores nos evita la dispendiosa tarea de describir tipos de variables y
conversión entre ellas para cálculos de múltiples funciones.
Herramientas para Python
Actualmente se han desarrollado múltiples herramientas sobre código abierto que
han sido muy usadas para potenciar Python entre ellas se destacan tres
principalmente las cuales son:
3.1.11 NumPy: Ofrece un soporte de arreglos de N-dimensiones
para Python. La librería es reconocida por ofrecer
manipuladores multidimensionales para lenguaje C. Gran
cantidad de algoritmos a bajo nivel son basados en NumPy.
3.1.12 SciPy: Contiene librerías y herramientas científicas y
matemáticas para Python sobre NumPy. La herramienta
incluye rutinas como integración optimización y funciones
para procesamiento de imágenes como Matplotlib y Python.
3.1.13 OpenCV: Originalmente nació como una iniciativa de Intel.
Se creó como una plataforma de código abierto para visión
por computadora, muy usada por su desempeño en tiempo
real. La librería se desarrolló sobre código C, y asegura una
portabilidad rápida del código para múltiples plataformas de
tipo embebido.
Librerías OpenCV 3.1 (Open Source Computer Vision)
OpenCV es una librería de funciones especializada en el procesamiento de
imágenes enfocada especialmente en la visión artificial en tiempo real, fue
desarrollada originalmente por la empresa Intel en su centro de investigación en
Nizhiny Novgorod (Rusia), con el fin de ser lanzada bajo licencia open-source BSD,
para compilarse sobre múltiples plataformas. OpenCV está escrito en lenguaje C++ y
su interface primaria está en C++, pero debido a la extensibilidad de dicho lenguaje
se han desarrollado bindings en Python, Java y MATLAB/OCTAVE.
Las áreas de aplicación incluyen:
3.1.14 Herramientas para caracterización 2D y 3D
3.1.15 Reconocimiento Facial.
3.1.16 Reconocimiento de Gestos
3.1.17 Robótica Móvil
3.1.18 Segmentación y reconocimiento
3.1.19 Visión Estéreo
3.1.20 Seguimiento de movimientos
3.1.21 Realidad Aumentada
Finalmente una ventaja adicional es que OpenCV trabaja con aceleración por
hardware tal que al ejecutar programas sobre sistemas Intel está pre-programado
para optimizar sus rutinas con las tarjetas integradas en los equipos.
Actualmente OpenCV va en la versión 3.0 compatible con Python 2.7 y es la
recomendada para el trabajo ya que su última versión posee versiones optimizadas
de algoritmos de procesamiento de imágenes así como nuevas funciones por ello
será la Versión 3.0 sobre la que se compilaran los códigos para que haya
compatibilidad en la ejecución matemática es importante que en la plataforma que se
instale la librería de NumPy la cual se encarga del manejo de arreglos numéricos y
matrices
Plataforma de trabajo: OpenCV 3.0, Python 2.7, Windows y Linux
Un tema muy importante antes de empezar el trabajo es considerar la portabilidad
del código a Windows pues es la plataforma en la cual cientos de estudiantes
trabajan, por la facilidad e instalación en comparación de otros S.O. como Linux.
Para lograr tal portabilidad se debía escoger un lenguaje de programación práctico,
portable y gratuito así pues la mejor opción es Python como interprete, ya que es un
lenguaje orientado a objetos que incorpora módulos, brindando una escritura rápida,
de alto nivel y muy poderoso con una sintaxis clara y fácil de interpretar, puede ser
extensible a lenguajes como C y C++, y está en la capacidad de correr sobre
cualquier variante de Unix, Windows y Linux. La característica más importante que
tiene este lenguaje es su compatibilidad con OpenCV y que a diferencia de
compiladores C++ que podría ser la otra opción como Visual Studio el uso de Python
así como de OpenCV es Libre y no requiere de comprar otros paquetes para poder
tener todo su potencial a la mano.
Al trabajar en Linux se dispone de un compilador nativo por lo tanto solo se debe
hacer una actualización a la versión 2.7 y descargar e instalar los repositorios de
OpenCV 3.1. Para el caso de Windows basta con ir a la página oficial de Python:
www.python.org y descargar la versión 2.7.X de forma gratuita, posteriormente se
debe buscar la librería OpenCV 3.1 descargarla descomprimirla y enlazar las librerías
al compilador.
3.2 Algoritmos de Detección de Personas
La detección de personas en el campo de la visión artificial se enfoca al estudio de
análisis de patrones correspondientes a objetos de interés dentro de una imagen.
Cuando se busca detectar personas los algoritmos se enfocan en la búsqueda de
características específicas que logren determinar si el objeto analizado corresponde
o no a un peatón.
A continuación se analizan dos algoritmos para detección de personas
implementados en este trabajo, de primera mano existe una técnica que se ha
abierto paso en los últimos años en el campo de la investigación denominada HOG
Descriptor (Histogram of Oriented Gradients) [8], este método hace un cálculo de
vectores en base a los valores de los pixeles mediante una ventana deslizante de
tamaño variable sobre la imagen buscando el gradiente que concuerda con un patrón
de peatón sobre casi cualquier tipo de imagen. La otra técnica se enfoca a la
detección de objetos mediante técnicas de modelado de fondo y extracción de
objetos de interés (background modeling techniques) [9], este método centra su
estudio en la construcción del background mediante técnicas como: promedio
gaussiano, la estimación por densidad y la concurrencia por variaciones de imágenes
posteriormente se complementa con la extracción de Blobs.
3.3 Detección Mediante Descriptores de
Gradientes Orientados
La técnica HOG descriptor fue modelada por Navneet Dalal y Bill Trigss [8] en el año
2005 esta técnica hoy en día ha cobrado bastante relevancia por los resultados que
ofrece. El trabajo está basado en hacer uso de los histogramas normalizados de los
gradientes de orientación, calculados a partir de los pixeles que conforman la imagen
y la selección de una maquina SVM (Support Vector Machine) para darle la precisión
a los clasificadores. Así pues a continuación se explica cómo es el entrenamiento de
la máquina, luego como aplicar HOG descriptor a la imagen de prueba y por último
la descripción de imágenes piramidales y su aplicación en HOG descriptor.
3.3.1. Entrenamiento de la maquina HOG descriptor
El entrenamiento de una maquina HOG descriptor se realiza de la siguiente forma:
Primero debe haber un listado con muestras de imágenes del objeto que a detectar,
esto se denomina datos positivos que para este caso deben ser personas, a cada
imagen se le debe extraer los descriptores HOG para después suministrarlos como
entrenamiento al clasificador.
Ser arma otro listado con muestras de imágenes de objetos no deseados a estos se
les denomina datos negativos, a cada uno de ellos se les debe calcular los
descriptores HOG tomando en cuenta que las muestras positivas deben ser muchas
más que las negativas (entre mayor cantidad de imágenes positivas y negativas
sobre 200 los resultados serán mejores).
Se debe entrenar la máquina de soporte de vectores lineales (SVM) con los datos
positivos y negativos.
Se aplica la técnica Hard-Negative Mining que consiste en hacer pasar al clasificador
una serie de imágenes de los datos negativos a diferentes escalas y mediante
ventana deslizante, tal que cuando el clasificador detecte falsos-positivos de objetos
no deseados se almacenen los datos de los vectores asociados a estos falsos-
positivos grabados junto con el índice de probabilidad de clasificación que hayan
tenido.
Con los datos de los falsos positivos que arroja el Hard-Negative Mining, se hace un
listado en base a un criterio de confiabilidad que puede ser por ejemplo la
probabilidad. Estos datos organizados se vuelven a pasar por el clasificador, de tal
manera que se hace un refuerzo del aprendizaje.
3.3.2. Aplicación del algoritmo HOG descriptor
A continuación están descritas las etapas del HOG descriptor, los detalles más
importantes a tomar en cuenta y su diagrama de bloques el cual puede ser apreciado
en la Figura 4.
Fig. 4 Diagrama de bloques HOG descriptor [8]
a. Se toma la Imagen para analizar: de una cámara de video (online) o
archivo de video (offline)
b. Normalización de gama: Toda imagen debe pasar por una normalización
de la gama y el color de la imagen en pocas palabras debe ir con el
menor ruido posible, la mejor opción es que la fuente de video original
sea de buena calidad pues la idea no es tampoco elevar el costo
computacional con una imagen demasiado grande ni aplicando filtros
muy complejos pues a largo plazo el método demuestra que al aplicar el
gradiente el hecho de hacer un filtrado no afecta el resultado final en
apenas del 1 al 2% [8].
c. Calculo del gradiente en la imagen: El gradiente de una imagen se refiere
al cambio en la intensidad o color de los pixeles, su cálculo permite
extraer información de los objetos analizados. El gradiente se define por
la ecuación (2)
∇𝑓 = [𝑔𝑥
𝑔𝑦] = [
𝜕𝑓
𝜕𝑥𝜕𝑓
𝑑𝑦
] (2)
Donde: 𝜕𝑓
𝜕𝑥 𝑒𝑠 𝑒𝑙 𝑔𝑟𝑎𝑑𝑖𝑒𝑛𝑡𝑒 𝑒𝑛 𝑙𝑎 𝑑𝑖𝑟𝑒𝑐𝑐𝑖ó𝑛 𝑑𝑒 𝑋 (2.1)
𝜕𝑓
𝜕𝑦 𝑒𝑠 𝑒𝑙 𝑔𝑟𝑎𝑑𝑖𝑒𝑛𝑡𝑒 𝑒𝑛 𝑙𝑎 𝑑𝑖𝑟𝑒𝑐𝑐𝑖ó𝑛 𝑑𝑒 𝑌 (2.2)
Para calcular 𝜕𝑓
𝜕𝑦 por ejemplo debemos aplicar un filtro unidimensional a la
imagen A por convolución y no por producto como lo explica la ecuación (3):
𝜕𝑓
𝜕𝑦= [
−10
+1] ∗ 𝑨 (3)
Para computar el ángulo de dirección de los pixeles se efectúa mediante el
cálculo del arco Tangente tal como se indica para un pixel en la posición x, y
en la ecuación (4) tal que:
𝜃𝑥𝑦 = tan−1 [𝑔𝑦
𝑔𝑥] (4)
Estas operaciones al ser unidimensionales implican que cuando se trabajan
imágenes en color se debe llevar la imagen a escala de grises para el análisis
o computar cada canal B, G, R por separado y tomar aquel valor que presente
los gradientes más altos. Este proceso se puede ver más claro en la Figura 5
donde se hace una conversión a escala de grises.
Fig. 5. Función del detector HOG. Se destaca la búsqueda de vectores sobre la
silueta. (a) Gradiente promedio de las imágenes de entrenamiento. (b) Cada pixel
muestra el valor máximo positivo SVM ponderado en bloques. (c) Cada pixel muestra
el valor máximo negativo SVM ponderado en bloques. (d) imagen de prueba. (e)
Computación del R-HOG descriptor. (f) Descriptor R-HOG ponderado por SVM
positivos. (g) Descriptor R-HOG ponderado por SVM negativos. [8]
d. Ponderación y orientación del Histograma: En esta etapa se calcula el
histograma con base a la orientación del gradiente para hacer una
detección de bordes, generalmente existen múltiples técnicas para
hacerlo pero en la práctica con simplemente tener en cuenta la magnitud
basta para obtener buenos resultados [8]
e. Normalización del contraste: Este paso es esencial pues al tener
variaciones de iluminación y contraste hace que los resultados de
detección empeoren; para ello se agrupan pixeles en bloques o celdas,
tal que mediante técnicas de normalización por bloques se llegue a
mostrar contornos que representan siluetas humanas en base a su
orientación.
f. Ventana de detección: Como se vio anteriormente, se debe hacer un
barrido sobre la imagen procesada en el trabajo de Triggs [8] se trabaja
con regiones de 64X128 mas un margen de 16 pixeles por cada lado
donde se esté detectando la persona, si la persona a detectar sube por
encima de esta resolución se deben aplicar técnicas de escalamiento,
poniendo atención a la perdida de desempeño.
g. Clasificación: Finalmente se aplica la maquina SVM (Support Vector
Machine) para tomar la decisión si el promedio vectorial de una imagen
si corresponde a un posible peatón, según el entrenamiento que haya
recibido con los datos positivos y negativos. En su forma más simple
una maquina SVM es un separador de dos clases al resolver el
entrenamiento buscamos los parámetros de la función de decisión de
forma estadística según la ecuación (5)
𝑓(𝑥) = ∑ 𝛼𝑖𝑦𝑖𝑋𝑖 ∙ 𝑋 − 𝑏𝑖 (5)
En este punto el término i recorre la sección de vectores de entrenamiento, los
vectores seleccionados xi son llamados los vectores de soporte que ayudan a
definir la decisión del clasificador [8].
h. Detección positiva: Si la detección ha sido positiva el algoritmo guarda
las coordenadas en donde se encontró la persona, y se continúa el
análisis hasta terminar la imagen.
3.3.3. Pirámides de imágenes HOG para OpenCV
Usualmente las imágenes se trabajan a una escala constante, pero en el caso de los
descriptores HOG para detección de personas es necesario hacer un escalado en la
imagen debido a la incertidumbre de no saber a qué escala se encuentra el objeto y
por ende que fracción de la imagen ocupa. Al compilado de copias de la misma
imagen se les denomina Pirámides de imágenes o Pyramid representation, al
considerar que en la base se encuentra la original y sucesivamente se construyen a
partir de ella unas más pequeñas hasta el tope.
Fig. 6. Representación Piramidal de una imagen a 5 niveles [10]
Generalmente existen 2 tipos de Pirámides de imágenes, la Gaussiana y la de
Laplace, tal que un nivel más alto en la pirámide se forma a partir de un cálculo
gaussiano de 5 pixeles a 1 reduciendo la resolución original a ¼. La pirámide de
Laplace es formada a partir de la Gaussiana solo que ella toma en cuenta solo los
bordes en una imagen y no el promedio de los 5. Al tener la Imagen Piramidal se
aplica el HOG descriptor tal cual se explicó tantas veces como imágenes piramidales
se calculen no inferiores a la dimensión del entrenamiento.
3.4 Detección mediante técnicas de sustracción de
Fondo y extracción de blobs
La técnica de detección por sustracción de fondo funciona cuando la detección se
hace a objetos en entornos con un fondo fijo o de poca variación (background).
Massion Piccardi elaboro un trabajo guía a modo de estado del arte donde destaca
las mejores técnicas de modelamiento de background [9], donde uno de los mejores
resultados corresponden a los algoritmos basados en mezclas Gaussianas, siendo
así las mejores técnicas para la modelamiento de background:
1. Algoritmo de segmentación de mezclas Gaussianas basadas en el fondo,
este método formulado por Kaew y Bowden en 2001 [11], hace que los
pixeles se modelen como una serie de distribuciones Gaussianas, con
ello se puede hacer un cálculo de probabilidad para determinar cuánto
tiempo está un pixel sin cambiar su valor en una escena y así construir el
fondo que se desea eliminar. Kaew y Bowden [11] encontraron que había
un problema pues para construir el fondo necesitaba el algoritmo una
base de 255 hasta 346 fotogramas para que un componente se
reconociera como parte del fondo, en un video estándar esto implica de
8,5 a 9 segundos de video, la modificación que plantearon en el
algoritmo de Kaew fue agregar un componente de actualización tal que
contribuyera a la eliminación de sombras y mejorara la velocidad. Este
mismo algoritmo fue modificado en 2004 por Z. Zivkovic [12] que
modifico el algoritmo para hacerlo adaptativo tal que logro implementar
sobre este la capacidad de actualizar parámetros dinamizando la
eliminación del fondo mediante la búsqueda de los parámetros óptimos
de distribución Gaussiana para cada pixel, mejorando la eficiencia y
adaptabilidad a la variación de la escena durante los cambios de
iluminación.
2. Algoritmo de segmentación por pixel de Bayes fue propuesto por
Andrew B, Akihiro Matsukawa y Ken Goldberg en 2012 [13], Este método
utiliza los primeros fotogramas de la fuente de video para construir el
modelo del fondo, empleando un algoritmo de segmentación
probabilística de primer plano identifica posibles objetos ajenos al
modelo del fondo mediante la inferencia Bayesiana. Las estimaciones
son de tipo adaptativo y se les agrega un valor o peso a los nuevos
objetos dependientes del tiempo en que estén fijos en una región, con el
cual permite ir eliminándolos pues no son objetos deseados. finalmente
se le agrega operaciones de filtrado de cerrado y apertura para eliminar
el ruido y crear la máscara que permite enfocar los objetos que se
mueven en el escenario analizado.
3. Algoritmo de segmentación basado en K-nearest neigbours que se
apoya en un valor de probabilidad en que los pixeles a posteriori
pertenezcan o no al fondo. Este algoritmo se construye a partir de las
primeras imágenes mediante un tipo de entrenamiento que almacena las
características del fondo en un modelo KNN, tal que a posteriori se
determina si determinado pixel pertenece o no al modelo de background,
Zoran Zivkovic en 2006 [14], complemento el modelo KNN con
ecuaciones que trabajan sobre los modelos de distribución gaussiana y
componentes para cada pixel.
A continuación se describe el algoritmo implementado para realizar la detección de
peatones basados en la técnica de modelamiento de fondo a partir de mezclas
gaussianas.
3.4.1 Background Subtractor MOG2 (segmentación de mezclas Gaussianas)
Este algoritmo modela el valor de un pixel y sus vecinos como una mezcla de
distribuciones gaussianas en función a su entorno [9], basándose en la persistencia y
la concordancia de cada una de las mezclas, se determina cuales pixeles
corresponden a colores que hacen parte del fondo (background) y por ende cuales
pixeles encajan como objetos (Foreground), cuando un objeto pasa demasiado
tiempo inmóvil en la escena se dice que su mezcla gaussiana por su invariancia en el
tiempo debe incluirse progresivamente como background según el criterio de
inclusión del método.
Para garantizar la efectividad del método de eliminación de background, tanto en
entornos controlados como no controlados se recomienda usar mezclas gaussianas
múltiples de tipo adaptativo tal que cada cierto tiempo sus parámetros sean
actualizados, para esto las mezclas gaussianas son evaluadas usando una heurística
donde mediante la hipótesis se pueda calcular la probabilidad de pertenencia de un
conjunto de pixeles al background tal que los componentes relacionados como
Foreground sean rastreados fotograma por fotograma usando un rastreador de
hipótesis múltiple. El proceso implica considerar 4 pasos que son:
Paso 1: Modelo Mixto on-line
Se debe modelar en primera instancia los pixeles junto con su variación en el tiempo
como un único valor a esto se le denomina “Proceso”. El proceso de un pıxel se
refiere al cambio que presenta en el tiempo, por ejemplo son números escalares para
imágenes en escala de grises o vectores para las imágenes en color.
Matemáticamente para cualquier momento, t lo que se sabe acerca de un pıxel en
particular (𝑥0, 𝑦0), depende de su historial como lo indica la ecuación (6).
{𝑋1 , . . . , 𝑋𝑡 } = {𝐼(𝑋0 , 𝑌0 , 𝑖) ∶ 1 < 𝑖 < 𝑡} (6)
Dónde 𝐼 corresponde a la secuencia de imágenes
Algunos procesos de pıxeles son mostrados por diagramas de dispersión en la
Figura 7, donde se ilustra la necesidad de un sistema adaptativo con una
umbralización automática.
Fig. 7. Imágenes y su diagrama de dispersión [15]
El valor de cada pıxel representa una medida de la claridad en la dirección del sensor
del primer objeto intersectado por los rayos ópticos del pıxel. Con un fondo e
iluminación estáticos, dicho valor es relativamente constante. Si suponemos la
independencia del ruido gaussiano que incurre en el proceso de toma de muestras,
su densidad puede ser descrita por una sola distribución de Gauss centrada en el
valor del pıxel. Por desgracia, las secuencias de vıdeo más interesantes involucran
cambios de luz, cambios de escenas, y objetos moviéndose.
Si se producen cambios de iluminación en una escena estática, serıa necesario que
la mezcla gaussiana tenga la capacidad de rastrear esos cambios. También puede
darse el caso en que un objeto estático aparezca en la escena y no sea incorporado
al background hasta que esté allí más tiempo tal que los pıxeles correspondientes
son considerados Foreground durante largos perıodos de tiempo. Esto implica que
se van acumulando errores en la estimación del Foreground, resultando pobres
comportamientos de rastreo. Estos factores implican que las observaciones más
recientes deberían ser más importantes a la hora de determinar las estimaciones de
parámetros gaussianos.
Un aspecto adicional de variación ocurre si en la escena están presentes objetos
moviéndose, ya que un objeto en movimiento coloreado relativamente de forma
constante se espera que produzca más variación que un objeto estático. Además, en
general, habrá más datos dando soporte a las distribuciones de background porque
estas son repetidas, mientras que los valores de pıxel para diferentes objetos no son
a menudo del mismo color.
Todos estos factores mencionados son los que sirven de guía a la hora de modelar y
actualizar el procedimiento. La historia reciente de cada pıxel,{𝑋1, . . . , 𝑋𝑡}, esta
modelada por una mezcla de 𝐾 distribuciones gaussianas. En la ecuación (8)
tenemos la probabilidad de observar el valor del pıxel.
𝑃(𝑋𝑡) = ∑ 𝑊𝑖,𝑡 ∗ 𝜂(𝑋𝑡,, 𝜇𝑖,𝑡, ∑ 𝑖, 𝑡)𝐾𝐼=1 (8)
Donde:
𝐾, es el número de distribuciones.
𝑊𝑖,𝑡 es una estimacion del peso de la 𝑖𝑡ℎ gaussiana en el momento 𝑡.
𝜇𝑖,𝑡 es el valor de la 𝑖𝑡ℎ gaussiana en el momento 𝑡.
∑ 𝑖 , 𝑡 es la matriz de covarianza de la 𝑖𝑡ℎ gaussiana en el momento 𝑡.
y donde 𝜂 es un valor gaussiano.
η entonces como lo muestra la ecuación (9) es un valor dado por la función de
densidad:
𝜂(𝑋𝑡 , 𝜇, Σ) =1
(2𝜋)𝑛2|Σ|
12
𝑒−1
2(𝑋𝑡−𝜇𝑡)𝑇 ∑(𝑋𝑡−𝜇𝑡)
(9)
𝐾 Es determinado por la memoria disponible y la capacidad de cómputo.
En la actualidad, se utilizan de 3 a 5. Por otra parte, por razones de cálculo, la matriz
de covarianza se supone debe tener la forma de la ecuación (10)
∑ 𝑘, 𝑡 = 𝜎𝑘2𝐼 (10)
Esto supone que los valores de los pıxeles de color rojo, verde y azul son
independientes y tienen las mismas variaciones. Esto no es exactamente cierto, pero
permite evitar una costosa inversión de la matriz a expensas de cierta exactitud.
Así pues, la distribución de los valores observados recientes de cada pıxel en la
escena está caracterizada por una mezcla de gaussianas. Un nuevo valor de pıxel
estará, en general, representado por uno de los componentes principales del modelo
mixto y será usado para actualizar el modelo.
Si el proceso de pıxel fuera considerado un proceso estacionario, un método
estándar para maximizar la probabilidad del dato observado se denomina EM
(expectation maximation). Desafortunadamente, como ya se dijo anteriormente, cada
proceso de pıxel varia durante el tiempo pues por lo general los entornos son
dinámicos, por lo que se usara un método aproximado que trata esencialmente cada
nueva observación como una colección de muestras de tamaño 1 y usa reglas de
aprendizaje estándar para integrar la nueva información.
Debido a que hay un modelo mixto para cada pıxel en la imagen, implementar un
algoritmo EM exacto serıa costoso. En su lugar, se implementa una aproximación
online de k medias. Cada nuevo valor del pıxel 𝑋𝑡, es cotejado con las distribuciones
𝐾 gaussianas existentes, hasta que se encuentra coincidencia. Una coincidencia es
definida como un valor de pıxel dentro de una desviación estándar de 2.5 de una
distribución. Este umbral puede ser perturbado con un pequeño efecto en la
ejecución. Esto es realmente un umbral por pıxel por distribución, y es
extremadamente útil cuando diferentes regiones tienen diferente iluminación, porque
los objetos que aparecen en regiones sombreadas no exhiben generalmente tanto
ruido como los objetos en las regiones iluminadas. Un umbral uniforme a menudo
resulta en objetos que desaparecen cuando estos entran en regiones oscuras.
Si ninguna de las 𝐾 distribuciones empareja con el valor del pıxel actual, la
distribución menos probable es reemplazada por una distribución con el valor actual
como su valor principal, una varianza alta inicialmente, y un peso de prioridad bajo.
Los pesos de prioridad de las 𝐾 distribuciones en el instante 𝑡 son ajustados como
indica la ecuación (11).
𝑊𝑘,𝑡 = (1 − 𝛼)𝑤𝑘,𝑡−1 + 𝛼(𝑀𝑘,𝑡) (11)
Dónde:
𝛼 Es la tasa de aprendizaje.
𝑀𝑘,𝑡 Es 1 para los casos que coinciden y 0 para el resto de modelos.
Después de esta aproximación, los pesos son re normalizados. (1 − 𝛼) Define la
constante de tiempo que determina la velocidad a la cual cambian los parámetros de
las distribuciones. 𝑊𝑘,𝑡 En la ecuación (11), es en realidad un filtro paso bajo de los
valores promedio de la probabilidad posterior de que los valores de pıxel hayan
encajado en el modelo 𝑘 en observaciones de 1 a 𝑡. Esto es equivalente a la
expectativa de este valor con una exponencial basada en los valores del pasado.
Los parámetros 𝜇 𝑦 𝜎 para distribuciones que no casan se quedan igual.
Los parámetros de la distribución que corresponden con la nueva observación son
actualizados mediante las ecuaciones (12), (13), (14).
𝜇𝑡 = (1 − 𝜌)𝜇𝑡−1 + 𝜇𝑋𝑡 (12)
𝜎𝑡2 = (1 − 𝜌)𝜎𝑡−1
2 + 𝜌(𝑋𝑡 − 𝜇𝑡)𝑇(𝑋𝑡 − 𝜇𝑡) (13)
𝜌 = 𝛼𝜂(𝑋𝑡|𝜇𝑘, 𝜎𝑘) (14)
Una de las ventajas importantes de este método es que si un nuevo objeto pasa a
formar parte del background, esto no destruye el modelo existente de background, ya
que el color de background original permanece en la mezcla hasta que llega a ser el
𝐾𝑡ℎ más probable y un nuevo color es observado. Por lo tanto, si un objeto queda
estático en la escena el suficiente tiempo como para formar parte del background y
entonces se mueve, la distribución describe el background previo hasta que exista un
mismo 𝜇 𝑦 𝜎2 , pero un filtro bajo W k, t hará que rápidamente el objeto se reincorpore
al background.
Paso 2: Estimación del modelo de Background
Como los parámetros del modelo mixto de cada pıxel cambian, se requiere
determinar cuál de las mezclas gaussianas son producidas por los procesos de
background. Así pues nos interesa la distribución gaussiana que tenga la evidencia
de mayor soporte y de menor variación.
Para comprender esta elección, se considera la acumulación de evidencias de
soporte y la variación relativamente baja para las distribuciones de background
cuando un objeto estático y persistente es visible. En contraste, cuando un objeto
nuevo obstruye el objeto de background, este, en general, no concuerda con ninguna
de las distribuciones existentes e implicara o bien la creación de una nueva
distribución o un incremento en la variación de una distribución existente. Además, la
variación de un objeto en movimiento se espera que permanezca más que un pıxel
de background hasta que el objeto en movimiento pare. Para modelar esto, se
necesita un método que decida que porción del modelo mixto es la que mejor
representa los procesos de background.
Primero, las gaussianas son ordenadas por el valor 𝑤𝜎⁄ . Este valor aumenta tanto
por la distribución de ganancias como por la disminución de la varianza. Después de
re-estimar los parámetros de la mezcla, tenemos lo suficiente para emparejar la
distribución con el fondo de distribución más probable.
Esta ordenación del modelo es efectivamente una lista ordenada y sin límite, donde
las distribuciones de background más probables permanecen en la cima y las
distribuciones de background pasajeras menos probables gravitan hacia el fondo y
son eventualmente sustituidas por nuevas distribuciones.
Así pues las primeras B distribuciones son elegidas como indica la ecuación (15).
𝐵 = 𝑎𝑟𝑔𝑚𝑖𝑛(∑ 𝑊𝑘 > 𝑇𝑏𝑘=1 ) (15)
Donde 𝑇 es una porción mínima de la información que se estimada por el
background. Esto toma la mejor distribución hasta una porción cierta 𝑇 de la reciente
información que ha sido estimada. Si se escoge un pequeño valor para 𝑇, el modelo
de background es normalmente unimodal.
Si 𝑇 es más alto, una distribución multimodal causada por un movimiento de
background repetitivo (por ejemplo, las hojas de un árbol, una bandera en el viento,
etc.) resultaría en que más de un color seria incluido en el modelo de background.
Estos resultados permiten al background aceptar dos o más colores separados.
Paso 3: Componentes conectados.
El método descrito anteriormente permite identificar pıxeles de Foreground en cada
nuevo fotograma mientras se actualiza la descripción de cada proceso de pıxel.
Estos pıxeles de Foreground etiquetados pueden entonces ser segmentados en
regiones por un algoritmo de componentes conectados en dos pasos.
Ya que este procedimiento es efectivo en determinados objetos en movimiento, las
regiones en movimiento pueden ser caracterizadas no solo por su posición, sino
también por su tamaño, momentos (instantes, importancias), y otra información de
forma. No solo pueden estas características ser útiles para el posterior proceso y
clasificación, sino que también pueden ayudar en el proceso de rastreo.
Paso 4: Rastreo de hipótesis múltiples.
Estableciendo correspondencia de los componentes conectados entre fotogramas se
logra usar un algoritmo de rastreo de múltiples hipótesis predictivo directamente que
incorpore tanto posición como tamaño. Debido a que este algoritmo no es esencial
en el entendimiento del método, es preferible no profundizar en el funcionamiento del
mismo debido a su complejidad.
3.4.2. Extracción de Blobs
Un blob (Binary Large Object) es un conjunto conectado y amorfo de pixeles de una
imagen cuya intensidad es superior a un umbral y que están unidos entre sí. A partir
de él es posible calcular una serie de características de gran utilidad a la hora del
procesamiento y posterior detección de los objetos de una imagen. Una muestra de
Blob se aprecia en la Figura 8
Fig. 8 Creación de Blob a partir de un umbral definido sobre la imagen [16].
Extracción:
OpenCV tiene varias librerías que permiten extraer los blobs de una imagen,
destacando la extracción de áreas, elipses correspondientes a la relación entre los
ejes del blob, cálculo de perímetro, cálculo de momentum, entre otros.
Filtrado:
Obteniendo los blobs de una imagen, se puede identificar casi cualquier objeto si se
filtra a través de sus características. Para la detección de personas, se utiliza filtros
como áreas (calculando el área promedio de un blob que corresponde a una
persona), centro de masa del objeto, relaciones como largo ancho o incluso
detección de características dentro del blob como por ejemplo la semejanza de un
círculo sobre la semejanza de un rectángulo etc. En este enfoque es la
caracterización del objeto a detectar.
3.5 Fuente de Video para el análisis.
Finalmente se considera uno de los elementos más importantes y de los que
depende en gran medida el funcionamiento de cualquier tipo de algoritmo a
implementar, esto es la fuente de captura de video, en este punto en base a toda la
documentación analizada se tiene que dicha fuente debe tener en lo posible la menor
variación cuando se incida luz sobre ella.
Para el análisis comparativo de ambos algoritmos se tomó un video en formato
H.264, los análisis de los fotogramas se hicieron de forma Off-Line, la fuente de video
para análisis Off-line fue tomado una Cámara Canon Power Shot A2500 con una
resolución de 640x480 pixeles a una tasa de 29 fotogramas por segundo con una
velocidad de datos de 10076 kbps.
Fig. 9 Camera Canon Power Shot A2500 [17]
Tabla 1. Specifications Canon Power Shot A2500 [17]
Image Capture Device 16.0 Megapixel 1/2.3-inch CCD
Focal Length 5.0(W)-25.0(T) (35mm film equivalent
Sensivity Auto, ISO 100- ISO 1600
LIgth Metering Method Evaluative, Center-weighted average
White Balance Control Auto, Daylight, Cloudy, Tungsten
JPEG Compresion Mode Movies: MOV(Image data: H.264)
Recording Pixels HD 1280 x 720: 25 fps
640 x 480: 30 fps (29.97)
Para hacer pruebas de conexión en tiempo real se usó una cámara WEB, marca
Logitech Quick Cam Deluxe.
Fig. 10. Cámara WEB Logitech Quick Cam [18]
Tabla 2. Especificaciones Logitech Quick Cam [18].
USB Type High Speed USB 2.0, UVC
Lens and Sensor Type Glass, CMOS
Focus Type Manual
Field of View 60º Diagonal
Optical Resolution True 640x480(VGA)
Video Capture (4:3) 320x240(QVGA), 640x360(VGA)(WMV True)
Frame Rate 30fps @640x480 (VGA) (Hardware Limit)
Capítulo 4
4. Metodología
4.1 Introducción:
En torno al desarrollo de los dos primeros objetivos, en cuanto a evaluación de
desempeño e implementación de dos algoritmos, fue claro que el mejor escenario de
comparación y evaluación de las dos propuestas era en primera instancia lograr la
implementación de los dos sistemas de detección en entornos de trabajo, para que
de manera cuantitativa puedan ser evaluados y de esta forma demostrar con datos
cual algoritmo es mejor y bajo qué circunstancias. Primero se hace una revisión
sobre la arquitectura de hardware y software usado así como la arquitectura
funcional, después se detalla la implementación de un detector de personas
mediante Histogramas de Gradientes Orientados (HOG descriptor) y las
consideraciones de funcionamiento óptimo; posteriormente se describe en detalle la
detección de personas mediante sustractores de fondo tipo MOG y extracción de
Blobs , y al final mediante pruebas de desempeño se elige cuál de los dos sistemas
tiene el mejor desempeño, para finalizar con el tercer objetivo que implica poner a
prueba el algoritmo y comprobar su desempeño en un ambiente real controlado.
4.2 Arquitectura de Hardware y Software
Con la finalidad de brindar al lector toda la información necesaria sobre las
herramientas utilizadas para el proyecto, se muestra a continuación el hardware y
software utilizado dentro del proyecto.
4.2.1 Sistema Operativo:
Gracias a la compatibilidad que tienen las herramientas de OpenCV y Python, el
sistema operativo no es un problema a la hora de desarrollar la aplicación. Para el
proyecto, el primer algoritmo HOG descriptor fue desarrollado sobre Windows 7
profesional versión de 64 bits. El segundo algoritmo se desarrolló sobre el sistema
operativo Ubuntu 14.04 LTS a 64 bits. Para efector de las pruebas de desempeño
ambos algoritmos se ejecutaron desde una maquina con Ubuntu 14.4 instalado de
forma nativa, se sugiere no usar máquinas virtuales si el desempeño es un factor
importante a la hora de la implementación.
4.2.2 Software de programación:
Como lenguaje de programación se utilizó Python por su gran versatilidad, fácil
aprendizaje y manejo. El código escrito se ejecuta de igual forma tanto en Windows
como Linux. Para la ejecución de los programas los requerimientos mínimos en
ambas plataformas son:
Requisitos:
Python 2.7 o superior
Numpy 1.10.4 o superior
PsUtil 4.1.0
Matplotlib 1.5.1
Como motor de Procesamiento de imágenes se utilizaron las librerías de OpenCV en
su versión 3.1.
4.3 Arquitectura Funcional
A continuación se realiza la descripción de los algoritmos utilizados, estudiando todos
los módulos que los componen y mostrando a través del siguiente diagrama de
bloques como se estructuraron las etapas de los algoritmos así como la relación
entre bloques:
Fig. 11 diagrama de flujo aplicación principal
La figura 11 describe el diagrama de flujo de la aplicación principal, con las etapas
comunes entre ambos algoritmos implementados, en el bloque opcional se
implementan los dos detectores de personas, uno a través de histogramas de
gradientes orientados HOG y el otro por técnicas de sustracción de fondo y
extracción de blobs. En las siguientes secciones se desglosara cada uno de los
algoritmos por separado mostrando su análisis y principales parámetros a utilizar.
4.4 Implementación de Descriptores HOG en
OpenCV
OpenCV ofrece un algoritmo HOG, para usarlo correctamente hay que entender
sus requerimientos y como se carga la maquina SVM junto con los parámetros
óptimos para trabajar en el entorno deseado.
Captura del Fotograma
Inicio
Inicio de dispositivo
de captura
Muestra del video por
fotogramas
Análisis de fotograma en busca de peatones.
Según algoritmo implementado
Análisis de coordenadas de detección
Conteo de personas
Muestra de fotogramas procesados
El diagrama de la Figura 12 del detector HOG muestra las etapas del algoritmo
donde se agregó una etapa de filtrado a la imagen por reducción de resolución, la
cual tiene por objetivo reducir el ruido en la imagen a través de la interpolación Inter
Área para que mediante una imagen más pequeña se lograra reducir el tiempo de
detección y procesamiento final para la imagen.
4.4.1 Inicio del descriptor HOG
Matriz final de coordenadas de detección por peatón encontrado
FIN
Filtro por reducción de resolución en la imagen Calculo de gradientes orientados HOG
Matriz inicial de coordenadas de detección por peatón
encontrado
Algoritmo Non Máxima Supresión para eliminación
de detecciones superpuestas
Seguimiento de coordenadas
objeto ¿excede límite?
¿Fin de archivo de
video?
Peatones = Peatones +1
No
Si
No
Si
Fig. 12. Diagrama de flujo detección por HOG
En primer lugar, sobre Python se debe programar un objeto que llevara la función,
para ello se ejecuta:
Hog_des =cv2.HOGDescriptor () # Se carga en el objeto Hog_des las características de la función
Una vez listo el objeto se cargar la maquina SVM, la ventaja de OpenCV es que
ofrece una maquina ya entrenada la cual se parametrizó a partir de la base de
imágenes positivas de peatones del MIT [19], y la base de imágenes positivas y
negativas del INRIA [20]. Para cargarla sobre el objeto creado se digita:
Hog_des.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector ())
Parámetros del descriptor HOG
Como se había revisado en el marco teórico el algoritmo HOG descriptor se basa
en una ventana de barrido sobre la imagen, en este apartado se describen y
analizan los parámetros del algoritmo y cómo influyen en la detección final.
hog.detectMultiScale(image, winStride, padding, scale, UseMeanshiftGrouping)
4.4.2 Image: La imagen a analizar no importa si es BGR o
GrayScale, pues cuando es B, G, R, se hace un cálculo por
cada una de las matrices y se toman los vectores de mayor
valor, para efectos de programación esta particularidad es
transparente, es decir que el algoritmo se encarga de la
conversión de forma automática.
4.4.3 WinStride: El parámetro Winstride indica cada cuantos
pixeles se mueve la ventana de análisis en X & Y, si el valor
es muy pequeño la detección es muy detallada y el tiempo
de procesamiento se extiende demasiado, es conveniente
hacer un pre-análisis para buscar el valor óptimo y definir la
zona de detección. Se elaboró una imagen de prueba con
un par de peatones que se deseaba detectar; esta se
aprecia en la Figura 13. Se hizo un programa que realiza una
variación exclusiva del parámetro Winstride. Los resultados
de detección se aprecian en la Figura 14, y el análisis de
tiempo en la Figura 15.
Fig. 13. Imagen de prueba para calibrar el Detector HOG
Fig. 14. Resultado de detecciones a partir de la variación del Winstride.
En la Figura 14 se aprecian los múltiples cuadros de detección conforme va
aumentando el valor del Winstride, se ve de color rojo oscuro para un valor
bajo, hasta un color rojo claro las detecciones con un Winstride alto, los
parámetros de evaluación del valor optimo se basan como se aprecia en la
Figura 15 en la velocidad de procesamiento y la precisión de detección donde
se buscaba el parámetro que coincida con dos detecciones, esto ocurre para
los valores 2, 4, 5 y 7. De este análisis es pertinente indicar que un mal
manejo del Winstride implica fallas en la detección.
Fig. 15. Análisis de desempeño por variación de Winstride. Arriba tiempo de detección del algoritmo, abajo: número de personas detectadas.
4.4.4 Padding: es el parámetro que indica la dimensión de un
borde alrededor de la ventana de detección para contribuir
a especificar el área de cálculo del gradiente de orientación
en la ROI (Región of Image) analizada; su valor se da en
pixeles en X & Y. Para el análisis del parámetro se varia el
Padding de 1-18 los resultados de detección se aprecian en
la Figura 16, y los respectivos tiempos de detección
aparecen en la Figura 17, se concluye que este parámetro
siempre que esté por debajo de 18 pixeles no afecta
considerablemente la detección. Un buen valor de Padding
está entre 2-5 pixeles.
Fig. 16 Resultado de detecciones por variación del Padding.
Fig. 17 Velocidad de detección por variación del Pading, arriba variación de Padding y abajo las detecciones por la variación.
4.4.5 Scale: indica el nivel de escalamiento piramidal para este
análisis de imágenes el algoritmo considera números tal
que el escalamiento sea un numero flotante desde 1 hasta 2
para apreciar cambios significativos, donde un número
cercano a uno implica pirámides sucesivas pequeñas tal
que aumenta el tiempo de procesamiento tanto como sub-
imágenes estén muestreadas, y un número superior a 2 son
escalados tan grandes que se pierden los objetos, este
parámetro se varia considerando el tamaño de los objetos
que para un escenario controlado se estima a partir de su
dimensión, la Figura 18 muestra las detecciones que
ocurren en la imagen cuando el parámetro es cercano a 1
tenemos imágenes que en la figura se representan con un
color verde oscuro llegando a detectar falsos positivos.
Sucesivamente conforme el parámetro aumenta la ventana
de detección toma un tono verde más claro y su tiempo de
detección va disminuyendo porque son menos las sub-
imágenes analizadas.
Fig. 18. Resultado de detecciones por variación de Escalado.
Gracias a la Figura 19 que representa el valor de escalado y la detección de
elementos fijados se establece los valores óptimos de escalado para esta
calibración están entre 1,2 y 1,3 para hacer barridos rápidos pero sin perder
detalles de los objetos analizados como pasa por encima de 1,4 donde
pueden ocurrir problemas de detección donde se omiten detecciones positivas
a cambio de que no se mejora mucho el tiempo de detección. Se da el caso
que al calcular escalamiento sobre la imagen genera en ocasiones una
múltiple detección del mismo peatón a las diferentes escalas.
Fig. 19. Velocidad de detección por Variación de Escalado. Arriba tiempo de procesamiento, abajo detecciones por variación de Scale en pasos de 0,1.
4.4.6 UseMeanshiftGrouping es un parámetro que va relacionado
con el escalamiento, manejar el escalamiento sobre la
imagen puede ocasionar que se detecte el mismo objeto a
diferentes dimensiones o que aparezcan falsos positivos
como se evidencia en la Figura 20. Siempre programando
para la detección de objetos en imágenes puede suceder
este fenómeno, pero no es tan preocupante porque indica
que el detector funciona bien simplemente debe ajustarse;
para ello la librería nos ofrece el MeanShift Grouping cuyo
propósito es eliminar las detecciones repetidas, la forma en
que funciona es mediante el cálculo de la distancia
euclidiana de los centroides de los marcos de detección, tal
que si la distancia es menor que determinado valor implica
que es el mismo objeto y se debe eliminar el marco de
detección más grande. Pero a la hora de calibrar este
parámetro se aprecia que funciona cuando el escalamiento
piramidal es alto. En la Figura 20 hay un proceso en el que
ambas imágenes se escalaron a razón de 1.01 a la izquierda
no se aplica Meanshift Grouping por lo tanto múltiples
cuadros de detección incluso falsos positivos.
Fig. 20. Múltiple detección y falsos positivos a la izquierda, a la derecha uso del Meanshift para eliminar objetos no deseados
En la Figura 20 a la derecha el descriptor HOG tiene configurado un Meanshift
Grouping desde 10 hasta 50 mostrando siempre el mismo resultado respecto a los
cuadros eliminados que corresponden a falsos positivos con un tiempo de detección
no menor a 2.4 segundos debido a un escalamiento del orden de 1.01. En este punto
evidentemente la falencia del uso del Meanshift Grouping está en la cantidad de
tiempo de ejecución que toma para analizar cada imagen el cual para la imagen sin
Meanshif Grouping es de 1,6 segundos y para la imagen con Meanshift Grouping es
de 2.1 segundos en este punto se evidencia claramente que tiempos de ejecución
tan altos hacen que un procesamiento de imágenes en tiempo real sea pésimo,
debido a la cantidad de escalamiento que se debe hacer. Por lo anterior se decidió
bajar la tasa de escalamiento a un nivel donde el Meanshift Grouping ya no funciona
pero donde se logra obtener los mismos resultados de detección con una rapidez de
hasta 10 veces. Por lo tanto se descarta el uso el Meanshift Grouping para detección
en imágenes con resolución menor a 640x480 se recomienda controlar
cuidadosamente el factor de escalamiento, para mejorar los tiempos de ejecución,
cuando exista la múltiple detección, para eliminarla se sugiere el uso de una técnica
denominada Non-Maxima Supresion.
Consideraciones para la detección de Peatones mediante HOG
descriptor.
Lo primero a tener en cuenta cuando se realiza la detección de peatones en
imágenes es el entrenamiento que se le hace a los clasificadores, en este caso
estamos usando la maquina SVM de OpenCV la cual ha sido entrenada con el
paquete de imágenes del MIT [19] para el detector en la versión 2.4 pero para la 3.1
se tomó como base de entrenamiento la Base de INRIA [20]. La Figura 21 muestra
algunas de las muestras que se usaron en los entrenamientos en donde se concluye
que la detección mediante HOG descriptor es fiable siempre que las personas estén
lo más de frente a la perspectiva de la cámara.
Fig. 21. Imágenes de entrenamiento para la maquina SVM. Arriba imágenes del MIT [19], y abajo imágenes del INRIA [20].
Conociendo la base de entrenamiento se ve algo en particular en ambas
metodologías y es que explorando en detalle las dos bases de datos se encuentra
que los peatones siempre están de frente o de espalda. Solo en la base INRIA se
aprecian peatones de perfil pero en una proporción de menos del 5% de los datos,
esto implica que La metodología HOG para detección de peatones exige que la
cámara este lo más perfilada de frente respecto al peatón de esta manera fue que se
tomó el video de análisis.
Es importante en resumen realizar a partir de una imagen de muestra la calibración
de los parámetros, de escalado, Padding y Winstride, tal que se garantice un número
mínimo de 15FPS para trabajar en tiempo real, además la captura de imágenes se
debe hacer lo mas de frente posible a la perspectiva de la cámara cuando se toman
gradientes desde una cámara alta no se tiene una certeza del objeto y crece la
incertidumbre de detección al igual que si se tomara la captura de perfil.
4.5 Implementación de sustractor de fondo y
extracción de blobs
Una de las técnicas encontradas para la detección de personas, se basa en la
simpleza de la detección de blobs en movimiento sobre una escena. A continuación
se muestra en un diagrama de flujo la representación de cada uno de los módulos
que comprenden el algoritmo así como la relación entre ellos.
Dispositivo de Captura Cámara
WEB
Obtención del Video y separación
Fotograma por Fotograma
Sustracción de Fondo y
separación de Foreground
Aplicación de filtros Morfológicos
Detección de Blobs
¿Corresponde
a una persona?
¿Paso límite de
detección?
Seguimiento sobre el fotograma
No
Si
No
Si
Fig. 22. Diagrama de Flujo para algoritmo de deteccion por sustraccion de fondo y extraccion de Blobs
Dispositivo de captura:
En visión artificial, el principal dispositivo de captura es una cámara de video, la cual
obtiene las imágenes del mundo real y las digitaliza para poder ser utilizadas por un
equipo de procesamiento. Aunque en la aplicación el dispositivo de captura es la
cámara web descrita con anterioridad, este también puede ser un video previamente
grabado, o una imagen almacenada en un computador o incluso un video creado a
partir de un algoritmo de imágenes.
Obtención del video – Separación fotograma por fotograma:
Entrando en materia del algoritmo diseñado, el primer bloque o modulo funcional
debe ser la obtención del video, cuyo objetivo principal es la generación de datos de
imágenes sobre las que los demás bloques realizar su ejecución. La técnica de
procesamiento es capturar un fotograma, realizar las operaciones diseñadas,
capturar el siguiente fotograma y realizar de nuevo las operaciones, por lo que este
bloque separa el video en fotogramas para ser procesados.
Peatones = Peatones +1
¿Fin de
Video?
Si
Generación de video a partir de
Fotograma Procesado
No
FIN
Fig. 23 Obtención Fotograma por Fotograma del Video
Sustracción de fondo y separación de Foreground:
Dentro de las librerías de OpenCV, se tienen implementado 2 algoritmos de
sustracción de fondo, el BackgroundSubtractorMOG2 y el
BackgroundSubtractorKNN. Para el algoritmo de detección de personas se
ensayaron ambos métodos pero fue el BackgroundSubtractorMOG2 el que mostro
una mayor velocidad a los cambios de iluminación y del entorno de fondo,
permitiendo que el análisis en tiempo real de la imagen presente mejores resultados.
Los siguientes son los valores de configuración del sustractor de fondo:
History: Cantidad de frases que utilizara para modelar el fondo.
varThreshold: Umbral de distancia entre pixeles.
detectShadows: Si es True, el algoritmo detecta las sombras y las marca.
Los parámetros definidos para el sustractor de fondo fueron
History = 500
varThreshold = 16 # por defecto
detectShadows: False # No se requiere detectar sombras. Solo objetos en movimiento.
Fig. 24. Separación del Foreground mediante sustractor de fondo.
Al observar, el algoritmo modela un escenario estático sobre el cual aplica una
máscara binarizada en donde se muestran los pixeles en movimiento. La
variación de los parámetros del algoritmo no agrega mayor valor a la
aplicación, ya que lo que se quiere en este punto es detectar los objetos en
movimiento para luego detectar el blob perteneciente.
Filtros morfológicos:
Las transformaciones morfológicas modifican la forma de los objetos de una
imagen. En la detección de blobs son de gran utilidad para eliminar ruido como
por ejemplo el movimiento de un árbol o pixeles dispersos que no contribuyen
con el modelo y que pueden ser generados por cambios de luz en la escena.
Dentro de las transformaciones morfológicas de utilidad se implementaron las
siguientes:
Erosión:
La idea básica de la erosión es igual que la erosión del suelo solamente, que
erosiona los límites del objeto en primer plano. Un kernel se desliza a través
de la imagen. Un píxel en la imagen original será considerado 1 sólo si todos
los píxeles bajo el kernel son iguales a 1, de lo contrario se erosiona (se hace
cero).
Fig. 25 Aplicación de Filtro Morfológico de erosión.
Dilatación:
El filtro de Dilatación es justo lo contrario al de erosión, Aquí, un elemento de
imagen es ' 1' si al menos un píxel bajo el kernel es ' 1 ' . Por lo tanto, aumenta
la región de blanco en la imagen o el tamaño de los aumentos de objeto en
primer plano. Normalmente, en casos como la eliminación de ruido, la erosión
es seguida por la dilatación. Debido a que, la erosión no solo elimina ruidos
blancos, sino que también se reduce el objeto. Entonces al dilatarlo, no va a
volver el objeto inicial, pero aumenta el área de objetos.
Fig. 26. Aplicación de Filtro Morfológico de dilatación
Detección de blobs:
En los bloques anteriores el objetivo es agrupar en cada fotograma los pixeles
en movimiento que se encuentran continuos o adyacentes entre sí como una
sola región (blob). De la máscara de Foreground obtenida y filtrada, las
imágenes en blanco representan las zonas en movimiento y las partes negras
las partes inmóviles.
Estos blobs son una herramienta útil para el análisis de forma y la detección
de objetos para reconocimiento.
Fig. 27. Detección de Blobs mediante la mascara
Detección de personas:
Una vez se obtienen los blobs en movimiento sobre el fotograma analizado,
falta identificar si esta coincide o no con una persona, para lo cual existen
varias técnicas, pero el objetivo de este algoritmo es la utilización de las
características del blob para su detección.
Al observar en las imágenes analizadas, varios objetos en movimiento son
detectados por la aplicación por lo que se realiza un primer filtro concerniente
al área del blob detectado, descartando los que contengan un área inferior o
superior a un valor establecido. Este valor depende de la distancia de análisis
de la cámara y es un parámetro que debe ser configurado en el escenario
analizado.
El siguiente filtro aplicado es la relación entre el ancho y el largo del blob,
clasificando así el blob dentro de un valor el cual corresponde a una persona
erguida y descartando por ejemplo un animal o un coche pequeño o algún
elemento que no corresponda con una persona.
Fig. 28. Detección de personas
Generación Video de salida:
Es el ultimo modulo y se encarga de la generación del fotograma con todas las
modificaciones, y texto de información para mostrar en pantalla como la
cantidad de personas que se han detectado. Asi mismo la información incluye
la cantidad de fotogramas por segundo analizados que deben estar por
encima de 15 FPS para cumplir con la rata minima de detección en tiempo
real.
Fig. 29. Generación de video resultante
4.6 Evaluación de los algoritmos de identificación.
Una vez implementados los dos algoritmos de detección se pusieron a prueba, para
esto se tuvo en cuenta en primera instancia la velocidad de procesamiento,
colocando un video de prueba en ambos detectores y evaluando el tiempo de
detección por fotograma, posteriormente se evaluó la exigencia de hardware en
procesador y RAM, y por último se analiza la precisión del conteo que cada
algoritmo. La prueba se realizó sobre una maquina ASUS N53SV con procesador
Intel Core I5 @ 2.3 GHz sobre un sistema operativo Linux Ubuntu 14.4 con 8 Gb de
RAM.
4.6.1 Evaluación por tiempo de detección a través de fotogramas
HOG descriptor y Background Subtraction.
Para este análisis se colocó un video de prueba de 1 minuto a 29 FPS (Fotogramas
Por Segundo) grabado con la cámara Canon Power Shot A2500, para un total de
1740 fotogramas a una resolución de 640x480. La cantidad de fotogramas por
segundo se calcula como uno sobre el tiempo que tarda en analizar una imagen, el
resultado se aprecia en la Figura 30.
Fig. 30 Grafica de procesamiento en segundos por Fotograma del algoritmo HOG.
Analizando el resultado el tiempo de procesamiento es muy alto por lo que hacer un
seguimiento de un peatón a 6 FPS no tiene sentido, con el fin de aplicar el algoritmo
en un entorno real se buscó bajar el tiempo de detección reduciendo la resolución
de la imagen del video fuente, pasando de 640x480 a 400x300. El resultado se
aprecia en la Figura 31 donde se logra bajar el tiempo de detección por imagen a un
valor aceptable para trabajo en tiempo real. Un valor superior a 15 FPS
Fig. 31 Grafica de procesamiento en FPS de imágenes a 400x300 pixeles
Ahora se evalúa el algoritmo de detección por sustracción de Fondo y análisis de
Blobs; para esta prueba se analizaron de igual forma los 1740 Fotogramas y los
resultados se aprecian en la Figura 32.
Fig. 32 Procesamiento en FPS Background subtraction
A partir de las comparaciones entre las Figuras 30,31 y 32 vemos como la velocidad
del algoritmo Background subtraction es hasta cinco veces más rápido y trabaja en la
resolución original.
4.6.2 Evaluación de exigencia de CPU y memoria RAM.
En este apartado a partir de la herramienta Psutil de Python, se monitorea el uso de
la maquina en cuando a procesador y memoria RAM los resultados se aprecian en
las Figuras 33 y 34 para HOG descriptor y Background sustractor respectivamente.
Fig. 33 Desempeño HOG descriptor arriba uso de CPU, abajo uso de RAM
La prueba se hizo con 1000 Fotogramas donde en los primeros 100 simplemente se
toman medidas con la maquina en reposo posteriormente se activan ambos
algoritmos hasta completar los 900 fotogramas donde nuevamente se pone en
reposo la máquina. El video de prueba fue un archivo de video grabado con la
cámara Canon Power Shot A2500 a 29 FPS y con una resolución de 640x480
pixeles.
Fig. 34 Desempeño del Background subtraction
De análisis de la Figura 33 y 34 se concluye que ambos algoritmos usan la misma
RAM, por lo tanto el análisis se debe enfocar en el desempeño de la CPU, siendo
claramente el Background sustractor el algoritmo más liviano, el con una media de
uso de procesador del 60% en comparación al 80% del algoritmo HOG.
4.6.3 Precisión de conteo con diferentes videos de peatones.
Con el fin de verificar la precisión de cada algoritmo al conteo de personas se
realizaron varias pruebas con distintos videos de peatones caminando, aplicando
sobre el mismo equipo de cómputo y al mismo video cada algoritmo, los resultados
se muestran en la siguiente tabla:
Tabla 3 . Comparación de detección de personas
Video Ambiente Total
personas
personas detectadas por HOGDescriptor
Personas detectadas por extracción de Blobs
Video 1 Controlado 24 20 15
Video 2 Controlado 16 13 10
Video 3 Controlado 9 8 8
Video 4 Controlado 30 28 21
% detección Controlado 100% 86,70% 70,90%
De los resultados mostrados en la tabla 3, se observa que el algoritmo de mejor
precisión para el conteo de personas corresponde al HogDescriptor sobre el cual se
tiene un porcentaje promedio del 86 % de detección, frente a un 70% del algoritmo
de sustracción de fondo y extracción de Blobs. Lo anterior ocurre debido a que el
segundo al utilizar una técnica de sustracción de fondo, los cambios de iluminación
producidos en la fuente del video generan que la máscara de Foreground cambie las
áreas de detección de blobs superiores a las filtradas por el algoritmo, mientras que
el HogDescriptor al realizar comparaciones de histogramas a partir de un
entrenamiento previo es más preciso en la detección del peatón.
4.7 Puesta a prueba del mejor algoritmo de
identificación.
Una vez realizadas y analizadas las pruebas de desempeño y en base a que el
objetivo principal del aplicativo es la detección de peatones, se determinó que el
algoritmo que mejor desempeña esta función es el Hog descriptor por la precisión de
detección que maneja, sacrificando un poco el uso de recursos y la velocidad de
análisis por fotograma del mismo.
En la figura 35 se muestran los resultados del algoritmo HogDescriptor implementado
sobre un ambiente real controlado, donde el tiempo de análisis de fotograma se
encuentra entre 0.05 y 0.06 segundos y el desempeño de frames por segundo entre
15 y 20 fps, así manteniendo un desempeño óptimo para detección de personas en
tiempo real y una precisión de conteo de peatones del 84 % sin la inclusión de falsos
positivos.
Fig. 35 Implementación del Algoritmo HOG Arriba imagen resultante, abajo grafica de desempeño al analizar 10500 Fotogramas.
4.8 Caracterización del ambiente real controlado.
Dentro del proyecto fue definido que el trabajo estaría determinado dentro de un
ambiente real controlado, por lo cual a continuación se precisan las principales
características del ambiente de trabajo sobre el cual los algoritmos de extracción de
Bolbs y Hog Descriptor funcionan:
Iluminación:
La iluminación es uno de los factores más importantes a la hora del procesamiento
del video y aunque depende en gran medida del tipo y calidad de la cámara
escogida, es importante tener en cuenta la iluminación mínima del escenario donde
se está poniendo a prueba los algoritmos de detección pues al no haber una
iluminación suficiente, las imágenes carecerán de información y no será posible
extraer ningún detalle de las mismas.
La cantidad de luz en un ambiente se mide en Lux (lx) que es una unidad derivada
del sistema métrico internacional que da una equivalencia de lumens por metro
cuadrado que hay en el ambiente.
Las pruebas de caracterización del escenario se hicieron al aire libre en determinado
periodo de tiempo mediante un luxómetro incorporado en un teléfono celular
Motorola G3 de alta gama, de referencia CT406 que incorpora un sensor TAOS
TSL277xx con un rango de medición desde 2 lux hasta 65535 lux [21].
En la tabla 4 se registraron los niveles de iluminación de un ambiente al aire libre no
controlado mediante una aplicación que entrega el valor en Lux al tiempo se
ejecutaban los algoritmos de identificación para revisar en todo momento si era
posible realizar la detección de peatones los resultados fueron:
Tabla 4 Nivel de iluminación en la escena
Hora de Lectura Nivel de iluminación (LUX) Detección de peatones
08:00 1300 si
09:00 1270 si
10:00 1322 si
11:00 1349 si
12:00 1483 si
13:00 1516 si
14:00 1497 si
15:00 1357 si
16:00 1160 si
17:00 824 si
17:30 687 si
17;45 28 si
18:00 20 si
18:15 12 no
18:30 8 no
18:45 8 no
19:00 5 no
20:00 4 no
21:00 4 no
22:00 2 no
Con lo anterior se concluye que el mínimo de luz necesario para que a través de la
cámara el algoritmo pueda detectar las personas es de 30 lux, contando con una
cámara de buena calidad como el lente canon ya descrito anteriormente [17].
Distancia:
La distancia mínima a la cual deben estar los peatones de la cámara para que estos
sean detectados respecto al foco de la cámara se estima en 3 metros, lo anterior
debido a que en primera medida el detector de Blobs es sensible al cambio repentino
de iluminación que se incrementa cuando un peatón pasa demasiado cerca al foco y
el historial de construcción del background se ve afectado, por otra parte dado que
fue necesario hacer un control muy preciso del escalamiento que realiza el HOG
Descriptor implica que las personas deben estar lo suficientemente lejos tal que se
logre hacer la detección morfológica de los vectores que corresponden al peatón,
cuando esto es incompleto el algoritmo simplemente lo descarta.
Desplazamiento del peatón:
Para el sistema del conteo, se parametrizo que el desplazamiento de los peatones es
de izquierda a derecha en los fotogramas analizados, por lo cual el ambos algoritmos
hacen un seguimiento cuando una persona se desplaza desde la izquierda hacia la
derecha respecto al foco de la cámara tal que en cualquier otro desplazamiento
aunque el algoritmo llegue a detectar los peatones, la precisión del conteo se
perderá.
Capítulo 5
5. Análisis de resultados y conclusiones
5.1 Análisis de resultados:
Ventajas y desventajas cualitativas de los algoritmos.
Aparte del cálculo de la velocidad y la eficiencia hay características que en la visión
artificial son fundamentales a tener en cuenta, y estas se relacionan con la buena
percepción que logra hacerse en su entorno, estas pruebas entre más fidedignas
sean, será posible definir el entorno óptimo de trabajo del algoritmo. Hay que
recordar que no hay sistemas 100% efectivos, pero si se conoce bien las limitantes
de detección de cada uno de los algoritmos se logra una mejor postura sobre el
algoritmo que mejor funciona basado en la situación de su entorno. A continuación el
análisis de dos situaciones en específico.
Detección Múltiple.
En primer lugar se debe hablar de la robustez a la hora de una detección múltiple,
dentro de las pruebas se presentó un caso donde se tiene un fotograma en el cual
pasan dos personas bajo una sombrilla; rápidamente se induce que el algoritmo más
robusto es el HOG descriptor, puesto que detecta a través de los gradientes
orientados cada objeto parecido lo más posible a un peatón. En las Figuras 36 y 37
se muestra una comparativa de este caso típico no controlado, un par de personas
caminan bajo una sombrilla apreciando como el detector por Blobs lo detecta como
un solo objeto, mientras que gracias al cálculo de los gradientes que aunque requiere
más tiempo de procesamiento da a la maquina una mayor certeza del objeto
detectado.
Fig. 36 Detección de dos personas mediante Sustractor de fondo y Blobs
Fig. 37 Detección de dos personas por HOG descriptor
Cambios repentinos de luz
El objetivo era buscar el mejor algoritmo encontrando varias veces esta falencia en
el detector de Blobs comparado con el HOG descriptor. El problema son los cambios
incidentes en la luz, dado que para un sustractor de fondos su percepción de la
imagen es un conjunto de mezclas Gaussianas un cambio en una de sus regiones
afecta considerablemente el comportamiento del detector, por el contrario el
descriptor de gradientes no toma en cuenta la magnitud del gradiente que es la
variable afectada por el cambio repentino de luz, mientras la orientación se
mantenga para el sistema la detección sigue vigente como se aprecia en las figuras
38 y 39.
Fig. 38 Confusión del detector por un cambio de luz repentino.
Fig. 39 Comparación de detección por Blobs en Verde y HOG descriptor en rojo.
En resumen en la tabla 5 tenemos una revisión de los aspectos más importantes de
cada uno de los algoritmos implementados y analizados.
Tabla 5. Resumen de características más importantes de los algoritmos implementados
Característica Background Subtraction HOG Descriptor
Carga de CPU 60% 80%
Carga de RAM 12% 12%
Desempeño 640x480 Pixeles @90FPS 400x300 Pixeles @20FPS
Detección de Peatones
por imagen 2 3
Precisión de conteo 70,9% 86,7%
Inmunidad a cambios de
luz leves No Si
Detección de personas
superpuestas No No
Detección Múltiple No Si
Mínima calidad de fuente
de video Alta VGA Media QVGA
5.2 Conclusiones:
La propuesta del mejor escenario de evaluación para ambos algoritmos condujo a la
implementación de ambos para verificar con certeza la complejidad y desempeño de
cada uno de los códigos, por una parte se implementó un algoritmo que no depende
de una base de datos ni entrenamiento previo, el cual funciona bastante bien si se
configuran los parámetros correctos para el escenario seleccionado, su velocidad de
procesamiento por fotograma llega a situarse por encima de los 90 frames por
segundo a una resolución de 640x480 pixeles y su detección no es dependiente de la
perspectiva de la cámara, en contra parte requiere que la fuente de video sea lo más
fidedigna posible y el éxito del mismo deprende de los buenos resultados que genere
la técnica de sustracción de fondo implementada.
En contraparte la implementación de un descriptor de gradientes Orientados HOG,
permite gracias al respaldo del entrenamiento de una maquina SVM, se logre una
detección más exacta de personas por su morfología en comparación a las
metodologías de análisis por Background, sin embargo hay que considerar que el
procesamiento es mucho mayor y que para llegar a procesar a una tasa de por lo
menos 19 Fotogramas por segundo debemos usar resoluciones de imagen por
debajo de los 400 Pixeles.
En lo que respecta a la evaluación e implementación se puede concluir del análisis
de resultados el hecho de que un algoritmo como el Background subtraction que
presenta una mayor velocidad de análisis por fotograma y con un menor uso de
recursos respecto a otros, no implica que sea el más preciso en la función de
detección de peatones; Por otra parte el algoritmo HOG Descriptor no es infalible
pues dado que su entrenamiento se realizó a partir de las imágenes del INRIA [20] ,
a la hora de fijar la perspectiva de la cámara respecto a los peatones detectados
debe respetarse la base de detección, de lo contrario tenemos detecciones
intermitentes y falsos positivos.
Para el proyecto se seleccionó como mejor algoritmo de detección el que implementa
la técnica de HogDescriptor en busca de cumplir con el objetivo principal de
detección de peatones, sin embargo el uso de ambos algoritmos es confiable
siempre que se defina el escenario donde se implementa trazando los parámetros
correctos y fijando las pautas de comportamiento del entorno.
5.3 Trabajo Futuro
Como trabajo futuro se plantea el mejoramiento del algoritmo por detección de blobs
para mejorar la detección de múltiples peatones con cierta cercanía. Gracias a las
herramientas seleccionadas de uso libre y la portabilidad que tiene un código de
lenguaje como Python, ambos algoritmos pueden ser implementados a futuro en
dispositivos que sean compatibles con estas herramientas como sistemas embebidos
o tarjetas de desarrollo tales como Raspberry Pi.
Se sugiere la exploración con lenguajes para tarjetas gráficas como Cuda de Nvidia
compatible con OpenCV, para mejorar los tiempos de detección.
Adicional a los algoritmos implementados aquí para la detección de peatones,
existen otras varias como son: la detección por reconocimiento facial mediante las
técnica Haar Cascades o entrenadores a través de redes neuronales, estas pueden
ser implementadas sobre python e identificar sus ventajas o desventajas con
respecto a los dos métodos acá expuestos con el fin de tener una base de
conocimiento que, permita identificar en qué escenarios presentan mejores
resultados cada una de las técnicas.
Se vislumbra la implementación de los sistemas de detección sobre una plataforma
de desarrollo Raspberry para sistemas de vigilancia en tiempo real con monitoreo
permanente a través de aplicativos web.
Bibliografía
[1] Tsong-Yi, Chao-Ho, Da-Jinn y Yi-Lio, «A People counting System Based on Face-
Detection,» de Fourth International Conference on Genetic and Evolutionary
Computing, 2010.
[2] A. Albiol y V. Naranjo, «Real-Time High Density People Counter using
Morphological Tools,» de Intelligent Transportation Systems IEEE Transactions
on., 2001.
[3] H. Aguello, «Sistemas de reconocimiento basados en la imagen facial,» de Revista
Avances en Sistemas e Informática, pp. 7-16 Vol. 8, Diciembre 2011.
[4] Salgado y M. C. a. Luis, «Adaptative Multi-Camera System for Real Time Object
detection,» de IEEE International Conference on Consumer Electronics (ICCE),
2011.
[5] N. Sabine, «Underwater Photography- level adjustement,» 2002. [En línea].
Available: http://www.dive.snoack.de/tutorials/e_Basics_01.html. [Último acceso:
25 Abril 2016].
[6] Hanzra y B. Singh, «Computer Vision and Programming Blog,» Hanzra Tech,
2014. [En línea]. Available: http://hanzratech.in/2015/02/07/caveat-thresholding-
hue-component.html. [Último acceso: abril 2016].
[7] J. J. E. L. Elizondo, «Introducción.,» de Fundamentos de procesamiento de
imagenes, California, Universidad Autonoma de Baja California.
[8] Triggs, N. Dalal y Bill, «Histogram of Oriented Gradients for Human Detection,»
IEEE Computer Society Conference on Computer Vision and Pattern Recognition,
vol. 1, pp. 886-893, 2005.
[9] P. Massion, «Background subtraction techniques review,» de IEEE international
conference on Systems, Man and Cybernetics, 2004.
[10] A. M. K. y Abid, «Image Pyramids,» de OpenCV-Python Tutorials Documentation,
Copyright 2011-2015, opencv dev team, 2013, pp. 79-84.
[11] B. P. y K. T. a. R., «An Improved Adaptive Background Mixture Model for Realtime
Tracking with Shadow detection,» de 2nd European Workshop on Advanced Video
Based Surveillance Systems, AVBS01, Sept 2001.
[12] Z. Z., «mproved adaptive Gaussian mixture model for background subtraction,» de
Pattern Recognition, 2004. ICPR 2004. Proceedings of the 17th International
Conference on, 2004, 23-26 Aug. 2004.
[13] A. B. Godbehere, A. Matsukawa y K. Goldberg, «Visual tracking of human visitors
under variable-lighting conditions for a responsive audio art installation,» de
American Control Conference (ACC), 2012, Montreal, QC, 2012.
[14] Heijden, Z. Zivkovic y F. v. der, «Efficient adaptive density estimation per image
pixel for the task of background subtraction,» Pattern Recognition Letters, vol. 27,
pp. 773-780, 2007.
[15] L. Li, W. Huang, I. Y.-H. Gu y Q. Tian, «Statistical Modeling of Complex
Backgrounds for Foreground Object Detection,» IEEE Transactions on Image
Processing, vol. XIII, pp. 1459-1471, 2004.
[16] Adrian y J. Gonzales, «Técnicas de percepcion activa para segumiento de objetos
mediante robots móviles en entornos urbamos,» Robotica y Telematica.
[17] I. Canon U.S.A., «www.usa.canon.com,» 2016. [En línea]. Available:
https://www.usa.canon.com/internet/portal/us/home/products/details/cameras/point-
and-shoot/slim-stylish-cameras/powershot-a2500. [Último acceso: 2016 abril 2016].
[18] 2. Logitech, «Support Logitech,» 2016. [En línea]. Available:
http://support.logitech.com/en_us/product/quickcam-deluxe-for-notebooks. [Último
acceso: 28 Abril 2016].
[19] M, Center for Biological and Computational Learning at MIT and MIT, 2000. [En
línea]. Available: http://cbcl.mit.edu/software-datasets/PedestrianData.html. [Último
acceso: 12 Abril 2016].
[20] «INRIA Person Dataset,» [En línea]. Available:
http://pascal.inrialpes.fr/data/human/. [Último acceso: 10 Abril 2016].
[21] b. m@, «andrux and me,» 24 Enero 2015. [En línea]. Available: http://andrux-and-
me.blogspot.com.co/p/summary.html. [Último acceso: 24 abril 2016].
[22] Cmglee, «https://en.wikipedia.org/wiki/Pyramid_(image_processing),» CC BY-SA
3.0, [En línea]. Available:
https://commons.wikimedia.org/w/index.php?curid=42549151. [Último acceso: 6
Abril 2016].
[23] R. Szelinski, Computer Vision Algorithms and Aplications, Springer, 3 de
Septiembre 2010.
[24] J. P. Viola y M. J., «Robust Real-Time Face Detection,» International Journal of
Computer Vision, nº 57, pp. 137-154, 2004.
[25] K. T. Yi, C. Ho y D. Yi-Li, «People counting System Based on Face-Detection,» de
Fourth International Conference on Genetic and Evolutionary Computing, 2010.
[26] Solem y J. Erik, «Support Vector Machines,» de Programing Computer Vision with
Python, creative commons, 2012, pp. 223-227.
6. Anexos
6.1 Licencia de uso OPEN CV:
(http://opencv.org/license.html)
License Agreement
For Open Source Computer Vision Library
(3-clause BSD License)
Redistribution and use in source and binary forms, with or without modification are
permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of
conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
Neither the names of the copyright holders nor the names of the contributors may be
used to endorse or promote products derived from this software without specific prior
written permission.
This software is provided by the copyright holders and contributors “as is” and any
express or implied warranties, including, but not limited to, the implied warranties of
merchantability and fitness for a particular purpose are disclaimed. In no event shall
copyright holders or contributors be liable for any direct, indirect, incidental, special,
exemplary, or consequential damages (including, but not limited to, procurement of
substitute goods or services; loss of use, data, or profits; or business interruption)
however caused and on any theory of liability, whether in contract, strict liability, or
tort (including negligence or otherwise) arising in any way out of the use of this
software, even if advised of the possibility of such damage.