Informe Aguado Emder
Informe Aguado Emder
Informe Aguado Emder
Alumnos:
Pablo Aguado – 23724 – aguadopd@hotmail.com
Fabricio Emder – 23764 – elector102@gmail.com
Profesor:
Adrián Orellana - orellana@inaut.unsj.edu.ar
Abril – 2016
Índice
Índice
1. Introducción 3
2. Objetivos 3
4. Alternativas iniciales 7
4.1. Desarrollo de un detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.2. Detectores integrados en OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.3. OpenNI Tracker de ROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.4. Skeltrack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.5. Human Tracker de ROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.6. OpenPTrack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5. Algoritmos evaluados 10
5.1. HOG + SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.1.1. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.1.2. Entrenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.1.3. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2. Cascada de clasificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2.1. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.2.2. Entrenamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2.3. Haar-like features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2.4. LBP features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2.5. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.3. Preprocesamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.3.1. Escalado inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.3.2. Transformación a escala de grises . . . . . . . . . . . . . . . . . . . . . . . 17
5.3.3. Ecualización de histograma . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.3.4. Filtrado por convolución . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4. Postprocesamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.4.1. Estimación de la altura real . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6. Pruebas 18
6.1. Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.2. Evaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.2.1. Igualdad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.2.2. Medidas básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6.2.3. Medidas a optimizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6.3. Sets de imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.4. Parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.4.1. HOG + SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
6.4.2. LBP + Cascada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7. Implementación 22
7.1. Conceptos generales de ROS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.2. Información desde el TurtleBot . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.3. Información desde la Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.4. Información desde una PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7.5. Nodo de detección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1
Índice
8. Resultados 24
8.1. Pruebas y ajuste de parámetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
8.1.1. HOG + SVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
8.1.2. LBP + Cascada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.2. Pruebas con los mejores parámetros . . . . . . . . . . . . . . . . . . . . . . . . . 26
8.3. Pruebas sobre el set de validación . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
8.4. Implementaciones en línea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
9. Conclusiones 27
9.1. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
9.2. Mejoras al trabajo realizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
9.3. Mejores alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
9.4. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Referencias 32
B. Apéndice: Nodos 36
2
1. Introducción
1. Introducción
Este es el informe del trabajo integrador final de la materia Temas Específicos de Control
I: Visión Artificial, dictada en la carrera Ingeniería Electrónica de la Universidad Nacional de
San Juan. La consigna es llevar a cabo un proyecto que en el se apliquen todos los conocimientos
adquiridos en la materia, asimilándolos con práctica y complementándolos con más conceptos.
Se planteó como objetivo principal del proyecto realizar la detección de personas desde un robot
móvil con un grado aceptable de aciertos. Para ello se probaron la eficiencia y eficacia de distintos
algoritmos que fueron implementados en OpenCV sobre un robot TurtleBot, equipado con
una cámara RGB+D Microsoft Kinect y trabajando bajo el sistema ROS (Robot Operative
System). El programa desarrollado fue luego adaptado para poder utilizarse en otras cámaras sin
información de profundidad, como una webcam de una PC o una mini-computadora Raspberry
Pi 2 con cámara.
El informe se extiende sobre algunas alternativas de trabajo, conceptos de los detectores utili-
zados y también sobre ROS, ya que fue una herramienta de uso constante. Se abordan también
las pruebas realizadas, su evaluación e interpretación, terminando con algunas conclusiones ob-
tenidas y posibles mejoras.1
2. Objetivos
El detector de personas a implementar intenta satisfacer las siguientes especificaciones:
1. Funciona en línea.
2. Detecta personas adultas
a) en posición vertical, ya sea caminando o paradas;
b) a una distancia mayor a 1 metros y menor a 7 metros.2
3. Funciona bajo condiciones normales de iluminación, entendiendo como normal el nivel de
iluminación presente en entornos cerrados donde personas circulen y/o realicen trabajos
manuales — es decir, oficinas, fábricas, laboratorios, etc.
4. Funciona bajo ROS sobre un robot TurtleBot (versión 1).
detectores.
3
3. Con qué se trabajó
Figura 1: Turtlebot 1
4
3. Con qué se trabajó
(a) (b)
3.2.1. Funcionamiento
Para la obtención de la imagen de profundidad o mapa de profundidad no se utiliza la infor-
mación de la cámara RGB, si no que un proyector láser infrarrojo con una matriz de difracción
constante proyecta un patrón de puntos que luego es captado por la cámara infrarroja. Ver Fi-
gura 3.
Se conoce a priori cuál es la visualización del patrón ante una superficie plana a una distancia
determinada. Para conocer la profundidad de los objetos en la imagen se procede a correlacionar
cada porción del patrón observado contra todo el patrón conocido; al encontrar la coincidencia
se mide el desfasaje o disparidad, y a partir de esto y por triangulación se calcula la distancia
real de la porción en cuestión.3 [6, 7, 8, 9, 10, 11, 5, 12]
La imagen de profundidad es una imagen de un solo canal cuyos valores corresponden a dis-
tancias (en mm desde la cámara) y es transmitida como una imagen de 16 bits, pero sólo los
11 bits menos significativos son útiles. La distancia de trabajo efectiva del sensor Kinect v1 es
desde 0, 8 m a 3, 5 m, con un error de 1 cm en profundidad y de hasta 3 mm en las mediciones
de ancho y alto.
3 Elmodo real de funcionamiento no ha sido explícitamente publicado, y mucha de esta información está basada
en ingeniería inversa, análisis de expertos y patentes de la empresa PrimeSense, desarrolladora del System On
a Chip PS1080, encargado de todo el procesamiento de imágen y audio de la Kinect. Un interesante análisis
en español de la Kinect se encuentra en el Apéndice A de [5].
5
3. Con qué se trabajó
3.3.1. Cámara
La cámara conectada a la Raspberry Pi tiene las siguientes especificaciones:
Sensor OmniVision OV5647
Formatos QVGA (320 ∗ 240 px) @ 120 FPS, VGA (640 ∗ 480 px) @ 90 FPS, 720P @ 60 FPS,
960P @ 45 FPS, 1080 @ 30 FPS, QSXGA (2592 ∗ 1944 px) @ 15 FPS
6
4. Alternativas iniciales
Lente LS-2716CS
Campo de visión 81 ° horizontal
Distancia focal 4 mm
Interfaz SCI
4. Alternativas iniciales
En base a las herramientas disponibles y a los objetivos buscados, las siguientes alternativas
iniciales fueron contempladas:
7
4. Alternativas iniciales
8
4. Alternativas iniciales
Detector HOG Clasificador tipo máquina de vectores soporte (Support Vector Machine, SVM ),
utilizando como vector de características a un histograma de gradientes orientados (His-
togram of Oriented Gradients, HOG). [20, 21]5
Latent SVM Detector basado en modelos de partes deformables; usa HOG para detectar las
partes. Este sistema fue desechado porque es muy lento6 y tiene poca precisión7 , comparado
con los anteriormente nombrados. [22, 23]
Esta es la opción elegida para mayor desarrollo. Implicó profundizar el conocimiento en la biblio-
teca OpenCV, que fue la utilizada durante el cursado de la materia, y además conocer conceptos
de detectores estándar de personas (u otros objetos), como lo son los detectores en cascada y
los detectores HOG. Como se verá en las secciones siguientes, se añadió además información de
profundidad para mejorar la precisión de los detectores, pero el corto rango útil de esta perjudica
a los resultados en lugar de mejorarlos.
4.4. Skeltrack
La biblioteca de código abierto Skeltrack [25]. Está basada en [26] y utiliza información
heurística para encontrar a la persona. Si bien la detección es muy rápida, tanto el trabajo original
como la implementación en Skeltrack están limitadas a un usuario en cámara y necesitan que
el usuario sea el único objeto en escena.
Esta opción fue desechada debido a las limitaciones que imponía.
4.6. OpenPTrack
El proyecto OpenPTrack [29, 27, 30, 31], que permite la detección y seguimiento de múlti-
ples personas utilizando arreglos de cámaras. Algunos de sus desarrolladores formaron parte del
equipo de Human Tracker, por lo que los algoritmos utilizados son similares.
5 [20]se refiere a la versión del algoritmo para GPUs. La versión para CPUs no está documentada pero se utiliza
de la misma manera que la de GPUs.
6 Aproximadamente 1 segundo para una imagen de 640 ∗ 480 px.
7 Ver el trabajo original de Felzenszwalb. En nuestras pruebas con OpenCV, el número de falsos positivos lo
9
5. Algoritmos evaluados
5. Algoritmos evaluados
A continuación se presentan (conceptual y superficialmente) los detectores que tuvieron mejores
resultados y se enuncian los parámetros de cada uno. También mencionamos algunas estrategias
de pre y post procesamiento que fueron probadas.
dx = 94 − 56 = 38
dy = 93 − 55 = 38
p
Gradiente = 382 + 382 ≈ 53,74
Ángulo = arctan(38/38) = 45◦
10
5. Algoritmos evaluados
5.1.2. Entrenamiento
La SVM se entrena previamente con una gran cantidad de muestras positivas y negativas
etiquetadas (se indica si cada imagen tiene una persona o no)10 , a las cuales se les calcula el
vector descriptor anteriormente mencionado. El subespacio vectorial obtenido se utiliza para
optimizar un hiperplano de decisión que permita la (mejor) separación entre las clases.
Para buscar personas se recorre la imagen objetivo con una ventana patrón — dicho de otra
manera, se hace deslizar la ventana sobre la imagen objetivo. Nótese que el sistema se diseña y
entrena para un tamaño fijo de imagen. Para hacerlo multiescala se recurre a achicar la imagen en
donde se buscan los objetos, o a escalar la ventana patrón adonde se intenta detectar la persona.
10 A esto se le denomina entrenamiento supervisado.
11
5. Algoritmos evaluados
5.1.3. Implementación
El detector HOG de OpenCV está en el módulo objdetect. [20]11 Su constructor es:
HOGDescriptor ( cv : : S i z e w i n S i z e ,
cv : : S i z e b l o c k S i z e ,
cv : : S i z e b l o c k S t r i d e ,
cv : : S i z e _ c e l l S i z e ,
i n t nbins ,
i n t d e r i v A p e r t u r e =1,
d o u b l e winSigma=−1,
i n t histogramNormType=HOGDescriptor : : L2Hys ,
d o u b l e L2HysThreshold =0.2 ,
b o o l gammaCorrection=f a l s e ,
i n t n l e v e l s=HOGDescriptor : : DEFAULT_NLEVELS) ;
v o i d d e t e c t M u l t i S c a l e ( c o n s t cv : : Mat& img ,
s t d : : v e c t o r <cv : : Rect>& f o u n d L o c a t i o n s ,
double hitThreshold = 0 ,
cv : : S i z e w i n S t r i d e = cv : : S i z e ( ) ,
cv : : S i z e padding = cv : : S i z e ( ) ,
d o u b l e s c a l e =1.05 ,
d o u b l e f i n a l T h r e s h o l d =2.0 ) ;
11 Ver nota 5.
12
5. Algoritmos evaluados
13
5. Algoritmos evaluados
Nótese que cada feature está asociada a una posición fija dentro de una imagen de tamaño fijo.
Entonces, cada feature o descriptor específico está determinado por su valor y por información
implícta no variable: su posición, su escala (no confundir con el escalado de toda la imagen o
clasificador, para la detección) y su figura — estos dos últimos solo para features Haar. Por
ejemplo, una característica podría ser del tipo 1(a) de la Figura 13, de un tamaño total de
20 ∗ 20 px y con su esquina superior en las coordenadas (2,12) de la imagen objetivo. Otra
característica podría ser del mismo tipo, pero de un tamaño de 38 ∗ 38 px y situada en (43,33).
El valor de cada una ingresa a un clasificador binario distinto, y no necesariamente ambas se
calcularán en caso de una imagen que no contiene el objeto buscado.
5.2.2. Entrenamiento
El entrenamiento del clasificador es supervisado: se ingresa una gran cantidad de imágenes
positivas y negativas, todas etiquetadas (clase “persona” o clase “no persona”); luego el sistema se
optimiza iterativamente para reducir la diferencia entre las salidas del clasificador y las etiquetas.
Se evaluan las características o features en todas las posiciones posibles, para todas las imá-
genes; cada característica es la entrada a un clasificador binario distinto. Estos son llamados
clasificadores débiles, porque individualmente no permiten una buena clasificación, y muchas
veces apenas pueden superar a una decisión aleatoria. Sin embargo, en conjunto forman un
clasificador fuerte.
Durante las iteraciones de entrenamiento, cada feature (y en cada posición) se va pesando según
su capacidad de detección y se priorizan las imágenes que han sido incorrectamente clasificadas.
Al finalizar el entrenamiento, solamente las mejores características se retienen, pues son las que
mejor permiten la identificación del objeto — además se reduce la dimensionalidad del clasificador
y se hace más general o menos sobreentrenado. El detector de caras presentado por Viola y Jones
tiene más de 160.000 features posibles, pero sólo se utilizan alrededor de 6,000 — afirman que
con 200 ya obtienen una precisión del 95 %. [18]
14
5. Algoritmos evaluados
Básicamente, se analiza cada píxel de una imagen o región de una imagen, de la siguiente
manera: [36, 37, 38]
1. Se evalúa la diferencia entre cada uno de los píxeles circundantes (según la implementación,
inmediatamente adyacentes, a un radio mayor o incluso interpolando valores) y el píxel
central del análisis.
2. A los píxeles cuyo valor es mayor o igual al píxel central se les asigna un valor de 1,
mientras que aquellos cuyo valor sea menor reciben un valor de 0. Nótese que la diferencia
se mantendrá aunque cambie el contraste o el brillo.
3. Los valores obtenidos se concatenan en una única palabra binaria que es la que representa
al píxel — se reemplazó su valor original por uno que codifica la información propia y la
de su entorno.
Otras implementaciones analizan sólo conjuntos no intersectados de píxeles; es decir, cada píxel
sólo pertenece a un vecindario. También hay versiones que incluyen información multiescala,
incluyendo en el vector descriptor los valores correspondientes a más de un radio de análisis.
5.2.5. Implementación
El detector en cascada está en el módulo objdetect de OpenCV. [17] Su constructor:
CascadeClassifier () ;
13 Estimamos que es de esta manera en OpenCV, pero no podemos afirmarlo. LBP no está documentado en la
sección de detectores en cascada.
15
5. Algoritmos evaluados
v o i d d e t e c t M u l t i S c a l e ( c o n s t Mat& image ,
v e c t o r <Rect>& o b j e c t s ,
d o u b l e s c a l e F a c t o r =1.1 ,
i n t minNeighbors =3,
i n t f l a g s =0,
S i z e m i n S i z e=S i z e ( ) ,
S i z e maxSize=S i z e ( ) ) ;
16
5. Algoritmos evaluados
minSize cv::Size, tamaño mínimo de las detecciones. Acota la búsqueda junto a maxSize. Es
usado como parámetro variable en este trabajo, proporcional a la escala inicial.
maxSize cv::Size, tamaño máximo de las detecciones. Es usado como parámetro variable en
este trabajo, proporcional a la escala inicial.
5.3. Preprocesamiento
5.3.1. Escalado inicial
Se reduce el tamaño de la imagen por un factor arbitrario. Esta función es especialmente
importante en cámaras de gran resolución, donde se puede acortar de manera importante el
tiempo de procesamiento sin que esto tenga un impacto significativo en los resultados.
17
6. Pruebas
5.4. Postprocesamiento
5.4.1. Estimación de la altura real
Ya que se cuenta con la imagen de profundidad, se puede estimar la altura real de cada objeto
detectado.[43] Así, se pueden eliminar objetos que sean mayores o menores a un rango de alturas
válido para personas.
Lr : Longitud real del objeto [m]
Lp : Longitud del objeto [px]
Dr : Distancia al objeto [m]
Fp : Distancia f ocal [px]
Lp ∗ Dr
Lr =
Fp
Se utilizó una distancia focal Fp = 570 px, de acuerdo a lo sugerido en [7] y otros. La medida
de distancia se toma en el centro horizontal de cada cuadro, y a 2/3 de altura desde la base.
6. Pruebas
Se evaluaron los resultados de los detectores mencionados en la sección 5, para distintas combi-
naciones de parámetros, sobre sets de imágenes tomados desde el robot TurtleBot. El objetivo
es analizar la influencia de cada parámetro y elegir la mejor combinación para implementarla en
un nodo de ROS que se ejecutará en el robot. Los resultados se presentan en la sección 8.
6.1. Metodología
Por simplicidad, los parámetros de cada detector se consideran independientes entre sí. Se
evalúa la incidencia de cada uno sobre los resultados totales, manteniendo todos los demás
constantes en valores relativamente estándar.
El programa que realiza las detecciones es dp_opencv. Este programa guarda en un archivo
csv los datos de las detecciones, y en un txt los parámetros que se utilizaron.
• Fue diseñado para que fácilmente puedan añadirse y utilizarse otros detectores. De
hecho, para extraer manualmente las coordenadas reales se utilizó una clase detectora.
El programa dp_resultados compara las detecciones de un csv con las coordenadas reales
del set. Guarda un archivo con los resultados.
Un conjunto de scripts de bash ejecuta dp_opencv y dp_resultados para distintas com-
binaciones de parámetros y junta los resultados en un único archivo para posterior visua-
lización.
6.2. Evaluación
6.2.1. Igualdad
Cada detección es un rectángulo contenido en la imagen de entrada. Sea e una detección
estimada y r el rectángulo real que contiene a una persona en una imagen,
e u r si y solo si
1. La distancia euclídea entre centros es menor a una proporción del ancho de r
q
(centroxr − centroxe )2 + (centroyr − centroye )2 < P _RADIO ∗ anchor
18
6. Pruebas
P _RADIO = 0,5
P _AN CHO = 1
P _ALT O = 0,4
precisión ∗ recuperación
Fβ = (1 + β 2 ) ∗
β 2 ∗ precisión + recuperación
precisión ∗ recuperación
F1 = (2) ∗
precisión + recuperación
precisión ∗ recuperación
F0,5 = (1 + 0,52 ) ∗
0,52 ∗ precisión + recuperación
14 Por prueba y error. Para esto desarrollamos el programa dp_cuadros, que marca las personas reales y las
estimadas. Consideramos que la inspección visual fue herramienta esencial para la detección de errores
en el programa.
19
6. Pruebas
20
6. Pruebas
6.4. Parámetros
6.4.1. HOG + SVM
Los parámetros variados son:
21
7. Implementación
7. Implementación
Una vez realizadas las pruebas para poder determinar qué algoritmo y qué parámetros se
adaptaban mejor a nuestro objetivo, implementamos el detector como un nodo de ROS para eje-
cutarlo en línea. Para mayor compatibilidad solo se usaron funciones de CPU, ninguna
de GPU.
22
7. Implementación
$ r o s s e r v i c e c a l l / camera / s t o p _ c a p t u r e // D e t i e n e l a c a p t u r a de v i d e o
y la publicación .
Cuando usamos el primero publica distintos mensajes con información. El topic necesario
para ver la imagen de la cámara es /camera/image. Para ver más opciones y características del
paquete, remitirse a su documentación en [46].
Nuevamente, se pueden visualizar las imágenes con rqt_image_view.
23
8. Resultados
8. Resultados
8.1. Pruebas y ajuste de parámetros
8.1.1. HOG + SVM
En la Tabla 1 se observan los resultados obtenidos para el detector HOG en el set 235. 20
Algunas observaciones:
Como se preveía, en casi todos los casos un aumento de precisión implica un decremento
de recuperación, y viceversa.
El detector Daimler tuvo un peor desempeño que el Default. Manteniendo el resto de
los parámetros igual, el detector Daimler mejoró la recuperación (80 % contra 66 %) pero
tuvo un gran decremento en precisión (19 % contra 96 %). Hay que recordar (ver 5.1.3) que
están entrenados con imágenes de distinto tamaño y tal vez eso está relacionado con los
otros parámetros.
La ecualización de histograma mejora los resultados.
La mejor escala inicial no fue 1 (sin escalado) sino que fue 1,5. Sugiere una relación entre
la escala inicial y el paso de escala o factor de escalado.
24
Parámetro Tipo Variación Valor inicial Valor final Precisión Recuperación F1 F0.5 Mejor valor (F0.5) Tiempo
tamanio_blur int Incremento Sin blur 9 Decrece Decrece Decrece Decrece Sin blur Crece
escala_inicial float Incremento 1 3 Crece Crece y luego decrece Crece y luego decrece Crece y luego decrece 1,5 Decrece
umbralAgrupamiento int Incremento 1 8 Crece Decrece Crece y luego decrece Crece y luego decrece 2 Constante
pasoEscala float Incremento 1,05 4 Decrece Decrece Decrece Decrece 1,05 Decrece
filtros bool - Sin filtros Con filtros - - Decrece Decrece Sin filtros -
25
8. Resultados
Parámetro Tipo Variación Valor inicial Valor final Precisión Recuperación F1 F0.5 Mejor valor (F0.5) Tiempo
tamanio_blur int Incremento Sin blur 9 Decrece Crece Crece Decrece Sin blur Crece
escala_inicial float Incremento 1 4 Crece Decrece Decrece Crece y luego decrece 1,2 Decrece
minNeighbors int Incremento 1 8 Crece Decrece Crece y luego decrece Crece y luego decrece 5 Constante
scaleFactor float Incremento 1,05 4 Crece Decrece Decrece Crece y luego decrece 1,1 Decrece
26
9. Conclusiones
9. Conclusiones
9.1. Resultados
Evaluamos las distintas opciones que ofrece OpenCV 2.4.x para la detección de personas
(detector en cascada con features tipo Haar, detector en cascada con features tipo LBP y el
detector HOG) para un caso específico: la detección de personas desde un robot TurtleBot
27
9. Conclusiones
Tabla 9: HOG+SVM: Parámetros optimi- Tabla 10: LBP + Cascada: Parámetros optimiza-
zados sobre set8 dos sobre set8
28
9. Conclusiones
(a) Verdadero positivo (b) Verdaderos positivos: frente y re- (c) Verdadero positivo
verso
(d) Verdaderos positivos: incompleto (e) Verdaderos positivos: perfil (f) Verdaderos positivos: personas
y ocluido cercanas
(g) Falso positivo continuo (h) Falso positivo (i) Falso negativo: vista de perfil
con sensor Kinect a 30 cm del suelo, en ambientes interiores. Se recurrió a los clasificadores
entrenados incluidos en OpenCV para los detectores Haar y HOG, mientras que el detector
LBP utilizó una cascada externa; todos están entrenados para detección de peatones, tarea que
llevan a cabo en forma muy satisfactoria.
Los resultados en el limitado set de validación son de F0.5 mayor a 0,7, con precisiones de
hasta el 90 % y recuperación del 60 %. Más pruebas en línea mostraron tendencia a error en
patas de muebles, y en reflejos y sombras sobre superficies verticales. En promedio, el detector
HOG produjo mejores resultados. El sistema es preciso, y en general los falsos positivos que se
observan no son continuos en el tiempo. Si bien consideramos que los resultados obtenidos no son
confiables para la mayoría de las posibles aplicaciones, creemos pueden mejorarse para hacerse
útiles. Algunos factores que influyeron negativamente, en orden de importancia:
1. Los clasificadores utilizados fueron entrenados para condiciones muy distintas a los obje-
tivos de este trabajo. Detectan personas completas, de pie, de frente o de espalda, con
poca tolerancia a vistas de perfil o intermedias. Suponemos fueron entrenados con imágenes
tomadas desde una altura promedio de ojos humanos o alturas superiores como las utiliza-
das para posicionar cámaras de vigilancia. Las diferencias entre esta perspectiva y la de la
cámara del TurtleBot se acentúan a corta distancia — las habituales en los ambientes
objetivo de este trabajo.
2. Los sets de imágenes utilizados para optimizar no aportaron la diversidad suficiente.
Fue variada la orientación, posición y completitud de las personas en escena, pero fueron
29
9. Conclusiones
3. Para simplificar el análisis, los parámetros de los detectores fueron considerados indepen-
dientes entre sí, pero en realidad existen relaciones complejas entre varios de ellos.
Elevar la posición de la cámara, para reducir la distancia a partir de la cual una persona se
observa completa en la imagen. Esto incrementará tanto la precisión como la recuperación.
Hacer una mejor estimación de la altura real (ver 5.4.1). En lugar de usar la profundidad de
un solo punto, debería hacerse un promedio de varios o buscar una alternativa más robusta
ante oclusiones.
Superar las limitaciones del clasificador usado, ya sea con un modelo entrenado en interiores
y con mayor tolerancia a las vistas laterales, o entrenando uno específicamente para la
aplicación. En este caso, se puede decidir elevar el sensor Kinect para que los resultados
sean aplicables a una mayor proporción de otros desarrollos.
Para el entrenamiento, sea cual sea el clasificador elegido y una vez acotado el ámbito
de acción, se debe recopilar una gran cantidad de muestras positivas, asegurándose de que
contengan diversidad de posiciones, alturas, distancias, vestimenta, oclusiones, iluminación.
De igual manera, es importante añadir una todavía mayor cantidad de muestras negativas,
asegurándose de incluir a los elementos que más pueden confundirse con una persona; en
este trabajo observamos a las patas de sillas y mesas, las sombras de personas sobre la
pared y reflejos de personas sobre superficies reflectantes.
Utilizar más de un detector, en cascada y siguiendo el concepto utilizado por el detector en
cascada. Implicaría relajar los parámetros de los detectores para que tengan mayor recu-
peración, aunque pierdan precisión, que se logra al utilizar un detector sobre los resultados
del otro.
Utilizar la información temporal disponible al trabajar con videos. Una opción es hacer un
promedio temporal de los cuadros detectados, con la intención de eliminar aquellos falsos
positivos que aparecen esporádicamente. Otra, más compleja, es detectar el movimiento de
personas a través de la diferencia entre cuadros, pero se debe limitar, conocer o estimar el
movimiento del robot.
Hacer seguimiento de las personas detectadas. Puede ser una buena alternativa combinado
con un detector muy confiable, sacrificando capacidad de recuperación, o con el uso del
filtrado temporal.
OpenNI y Nite son herramientas avanzadas que permiten reconocer a una persona en
posición natural incluso con oclusiones importantes, y luego realizan seguimiento. Si bien
la documentación existente no es mucha, OpenNI ha continuado lentamente su desarrollo
y continúa siendo de código abierto. El problema es que Nite, el middleware que realiza la
detección y seguimiento de personas, desapareció al ser comprada su empresa desarrollado-
ra; todavía se pueden usar las versiones antiguas que se distribuyen de manera no oficial,
30
9. Conclusiones
pero el producto ha sido discontinuado y eso implicará falta de compatibilidad con otras
plataformas de software o hardware.
OpenPTrack es una alternativa abierta muy interesante que permite arreglos multi-
cámara. Los autores nos informaron que lo han usado satisfactoriamente desde un robot,
con la cámara a 1, 3 m de altura. Otro usuario afirma que, desde 0, 5 m de altura, su
problema es perder el seguimiento al desaparecer las cabezas de las personas.
9.4. Comentarios
Para la realización de este trabajo tuvimos la necesidad de conocer y aprender a usar herra-
mientas muy útiles y de amplio uso industrial: OpenCV y ROS. Tanto el desarrollar en ellos
como buscar alternativas, nos permitieron conocer características que desconocíamos e inferir
potenciales aplicaciones.
También fue nuestra primer experiencia en Linux (usando Ubuntu, Xubuntu y Kubuntu);
pudimos apreciar sus características de primera mano. No solo desarrollamos programas com-
plejos en los entornos Eclipe y Netbeans, sino que también recurrimos a otras herramientas,
como scripts de bash, ssh, entre otros. Incluso, para la escritura de este informe, utilizamos LATEX
a través de LYX. Para el control de versiones aprendimos Git, y siempre trabajamos colaborati-
vamente con las herramientas de Github21 . Si bien todo esto significó más tiempo de trabajo y
aprendizaje, pensamos que ha sido una buena inversión dirigida a incrementar nuestras aptitudes
profesionales y capacidades personales.
Intentamos aplicar un procedimiento científico ordenado para poder lograr conclusiones con-
cretas. Si bien los resultados no fueron los esperados, esperamos que sirvan de base para mejores
implementaciones. Recomendamos acudir continuamente al consejo de personas experimentadas
en la temática, para orientar bien los esfuerzos y el tiempo invertido. Esperamos en un futuro
cercano probar las alternativas mencionadas en 9.3 para comprobar su eficacia en la aplicación
objetivo de este trabajo.
Agradecemos al Grupo Estudiantil de Robótica de la Universidad Nacional de San
Juan (GERUNSJ) por permitirnos disponer de 2 robots TurtleBot, y al profesor Adrián
Orellana por sus apoyo y útiles recomendaciones. Agradecemos también a todas las personas
que comparten día a día sus problemas, soluciones y conocimientos, en diversas comunidades de
internet.
31
Referencias
Referencias
[1] Wikipedia, “iRobot Create — Wikipedia, The Free Encyclopedia.” https://en.wikipedia.
org/wiki/IRobot_Create, 2016. [Internet; descargado abril-2016]. 3
[12] J. Smisek, M. Jancosek, and T. Pajdla, “3D with Kinect.,” in ICCV Workshops, (http:
//cmp.felk.cvut.cz/ftp/articles/pajdla/Smisek-CDC4CV-2011.pdf), pp. 1154–1160,
IEEE, 2011. 5
[13] R. P. Foundation, “Raspberry Pi 2 model B.” https://www.raspberrypi.org/products/
raspberry-pi-2-model-b. [Internet; descargado abril-2016]. 6
[14] Open Source Robotics Foundation, “Robot Operating System.” http://www.ros.org, 2016.
7
[15] Wikipedia, “Sistema Operativo Robótico — Wikipedia, La enciclopedia libre.” https://es.
wikipedia.org/wiki/Sistema_Operativo_Robótico, 2015. [Internet; descargado abril-
2016]. 7
[16] Itseez, “Open Source Computer Vision Library.” http://opencv.org. 7
[17] OpenCV, “OpenCV 2.4 Documentation: Cascade Classification.” http://docs.opencv.
org/2.4/modules/objdetect/doc/cascade_classification.html. [Internet; descargado
marzo-2016]. 8, 13, 15
[18] P. Viola and M. Jones, “Rapid Object Detection using a Boosted Cascade of Simple Featu-
res,” in Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition,
(Hawaii), 2001. 8, 13, 14
32
Referencias
[19] T. Ojala, M. Pietikäinen, and T. Mäenpää, “Multiresolution gray-scale and rotation in-
variant texture classification with local binary patterns,” Pattern Analysis and Machine
Intelligence, IEEE Transactions on, vol. 24, no. 7, pp. 971–987, 2002. 8, 14
[20] OpenCV, “OpenCV 2.4 Documentation: HOG.” http://docs.opencv.org/2.4/modules/
gpu/doc/object_detection.html#gpu-hogdescriptor. [Internet; descargado marzo-
2016]. 9, 10, 12
[21] N. Dalal and B. Triggs, “Histograms of Oriented Gradients for Human Detection,” in Pro-
ceedings of the IEEE Conference on Computer Vision and Pattern Recognition, (San Diego,
USA), 2005. 9, 10
[22] OpenCV, “OpenCV 2.4 Documentation: Latent SVM.” http://docs.opencv.org/2.4/
modules/objdetect/doc/latent_svm.html. [Internet; descargado marzo-2016]. 9
[23] P. F. Felzenszwalb, R. B. Girshick, D. A. McAllester, and D. Ramanan, “Object Detec-
tion with Discriminatively Trained Part-Based Models.,” IEEE Trans. Pattern Anal. Mach.
Intell., vol. 32, no. 9, pp. 1627–1645, 2010. 9
[24] Tim Field and Marcus Liebhardt, “ROS package: Openni tracker.” http://wiki.ros.org/
openni_tracker, 2013. [Internet; descargado marzo-2016]. 9
[25] Igalia, “Skeltrack.” https://github.com/joaquimrocha/Skeltrack, 2013. 9
[26] A. Baak, M. Müller, G. Bharaj, H. P. Seidel, and C. Theobalt, “A data-driven approach for
real-time full body pose reconstruction from a depth camera,” in Computer Vision (ICCV),
2011 IEEE International Conference on, pp. 1092–1099, Nov 2011. 9
[27] M. Munaro, C. Lewis, D. Chambers, P. Hvass, and E. Menegatti, “RGB-D Human Detection
and Tracking for Industrial Environments.,” in IAS (E. Menegatti, N. Michael, K. Berns, and
H. Yamaguchi, eds.), vol. 302 of Advances in Intelligent Systems and Computing, pp. 1655–
1668, Springer, 2014. 9
[28] M. Munaro, C. Lewis, D. Chambers, P. Hvass, E. Menegatti, and S. Edwards, “ROS package:
Human tracker.” https://github.com/ros-industrial/human_tracker, 2013. [Internet;
descargado marzo-2016]. 9
[29] University of California, “OpenPTrack.” http://openptrack.org, 2016. 9
[30] M. Munaro, F. Basso, and E. Menegatti, “OpenPTrack: Open source multi-camera calibra-
tion and people tracking for RGB-D camera networks.,” Robotics and Autonomous Systems,
vol. 75, pp. 525–538, 2016. 9
[31] M. Munaro, A. Horn, R. Illum, J. Burke, and R. B. Rusu, “OpenPTrack: People Tracking
for Heterogeneous Networks of Color-Depth Cameras,” 2014. 9
[32] C. McCormick, “HOG person detector tutorial.” https://chrisjmccormick.wordpress.
com/2013/05/09/hog-person-detector-tutorial, 2013. [Internet; descargado abril-
2016]. 10
[33] Wikipedia, “Máquinas de vectores de soporte — Wikipedia, La enciclopedia libre.” https:
//es.wikipedia.org/wiki/Máquinas_de_vectores_de_soporte, 2015. [Internet; descar-
gado abril-2016]. 10
[34] M. Enzweiler and D. M. Gavrila, “Monocular Pedestrian Detection: Survey and Experi-
ments,” IEEE Trans. Pattern Anal. Mach. Intell., vol. 31, no. 12, pp. 2179–2195, 2009.
12
[35] R. Lienhart, A. Kuranov, and V. Pisarevsky, “Empirical Analysis of Detection Cascades of
Boosted Classifiers for Rapid Object Detection,” in Proceedings of the 25th DAGM Sympo-
sium on Pattern Recognition, (Magdeburg, Germany), 2003. 14
[36] M. Pietikäinen, “Local Binary Patterns,” Scholarpedia, vol. 5, no. 3, p. 9775, 2010. revision
#137418 http://www.scholarpedia.org/article/Local_Binary_Patterns. 15
33
Referencias
[38] A. Rosebrock, “Local Binary Patterns with Python and OpenCV.” http://www.
pyimagesearch.com/2015/12/07/local-binary-patterns-with-python-opencv, 2015.
[Internet; descargado abril-2016]. 15
[39] H. Kruppa, M. Castrillon-Santana, and B. Schiele, “Fast and robust face finding via local
context,” pp. 157–164, 2003. 16
34
A. Apéndice: Estructura de archivos
35
B. Apéndice: Nodos
B. Apéndice: Nodos
El workspace de ROS contiene el nodo de detección y un nodo publicador de video para la
webcam. Para poder ejecutarlos, primero hay que compilarlos.
Los pasos a seguir:
2. Compilar:
a) Situarse dentro de la carpeta implementacion
b) Ejecutar catkin_make . Esto compila los nodos.
c) Se le informa a ROS la existencia de esos paquetes con source devel/setup.bash
3. Se ejecutan los nodos 22
con rosrun
a) [Opcional] rosrun detpeople publicador_video — Ejecuta un nodo que publica
video desde la webcam de la PC.
b) rosrun detpeople detpeople — Ejecuta el detector.
Para recibir imágenes desde el TurtleBot, ver 7.2. Para transmitir imágenes desde la Rasp-
berry Pi, referirse a 7.3; el nodo Raspicam se puede compilar de forma similar a lo realizado
en el punto 2 anterior.
36