Reconocimiento visual de ademanes usando
Transcripción
Reconocimiento visual de ademanes usando
Reconocimiento visual de ademanes usando MS Kinect – Captura de video Dr. Héctor Avilés | Escuela de Invierno de Robótica 2015 Sistema propuesto Extracción de la silueta Análisis visual Ejecución del ademán* ... ... Captura de Video RGB-D Extracción de observaciones Postura, forma Ademán Clasificación de ademanes BD . . . *Imagen tomada de: http://www.samsung.com/global/microsite/tv/common/guide_book_5p_vi/waving.html Movimiento Captura de video ● ● ● ● Sensor MS-Kinect, eliminador y computadora Libfreenect OpenGL Utility Toolkit (GLUT) para despliegue Ubuntu 14.04 Captura de video ● Software para captura: – Microsoft SDK, OpenNI, libfreenect Captura de video ● ¿Por qué libfreenect?: – Python, C, C++, C#, Java, Ruby, Matlab, OpenCV – Linux, OS X, Windows – Registro de imágenes RGB y de profundidad – Ejemplos básicos de captura RGB-D, reconstrucción 3D y sonido, (aunque no hay esqueletización, reconocimiento de gestos, etc.) Captura de video Hardware requerido Captura de video ● Libfreenect: http://openkinect.org/ ● Descarga: https://github.com/OpenKinect/libfreenect ● Instrucciones de instalación: http://openkinect.org/wiki/Getting_Started#Ubuntu_Manual_Install Captura de video ● Instrucciones de instalación: – sudo apt-get install git-core cmake libglut3-dev pkg-config build-essential libxmu-dev libxi-dev libusb-1.0-0-dev* – git clone git://github.com/OpenKinect/libfreenect.git – cd libfreenect – cmake . – ccmake . – make – sudo make install – sudo ldconfig /usr/local/lib64/ – sudo glview *Alternativamente: sudo apt-get install git-core cmake freeglut3-dev pkg-config buildessential libxmu-dev libxi-dev libusb-1.0-0-dev Captura de video Árbol de subdirectorios libfreenect Captura de video ● Subdirectorios importantes: – ./libfreenect/bin (ejemplos ejecutables) – ./libfreenect/examples (códigos fuente) Captura de video ● Archivos relevantes: – glview.c (glview) – glpclview.c (glpclview) Captura de video ● ● ● ● Captura (protocolo/API) y acceso a datos (buffers) puede requerir un porcentaje importante del tiempo total de desarrollo Inicialmente se compilará glview.c y glpclview.c fuera de ./libfreenect Posteriormente se análizarán ambos códigos Makefile para compilar Captura de video ● ● ● Makefile es un archivo que indica al compilador (gcc): – Directivas (e.g., -Wall) – Librerías (.so, .a) – Cabeceras (.h) Soporte de variables (e.g., LDFLAGS, CFLAGS, CC) y etiquetas Utilería make para interpretación – make clean para borrar archivos objeto y ejecutables Captura de video ● Estructura de árbol de Makefile: – fuentes → objetos → ejecutable Captura de video Ejemplo Makefile Captura de video ● glview.c: – RGB (3 bytes por pixel) – Profundidad 11 bits por píxel: ● 2047 valores posibles ● Intervalo útil [300,1020] – Paleta de colores de gradiente para visualización de profundidad – Resolución de 640x480 píxeles – Hilos (pthread) y OpenGL para captura/despliegue 2D Captura de video Ejemplo glview Ejemplo Ejecución glview Ejemplo Video Seguimiento en oficina Captura de video ● Ejercicio: – Compilar glview.c y ejecutar glview – Identificar y documentar funciones de: – ● Inicio de comunicación con Kinect ● Captura de datos ● Conversión profundidad → RGB ● Despliegue de imágenes Localizar buffers de almacenamiento de RGB y profundidad Captura de video ● glpclview.c: – Datos RGB y de profundidad similar al glview.c – Despliegue 3D (nube de puntos) – Basado en gran medida en OpenGL – Acercamiento/rotación Captura de video Ejemplo glpclview Ejemplo Ejecución glpclview Captura de video ● Ejercicio: – Compilar glpclview.c y ejecutar glpclview – Use el ratón, 'w' y 's' para modificar la vista – Identificar y documentar funciones de: – ● Inicio de comunicación con Kinect ● Captura de datos ● Despliegue de imágenes Localizar buffers de almacenamiento de RGB y profundidad Resumen ● Kinect, libfreenect OpenGL para captura ● Makefile para compilación ● ● Revisión de códigos fuente de glview.c y glpclview.c glview y glpclview para captura y despliegue ¿Preguntas?