Quantcast
Channel: 平板电脑
Viewing all articles
Browse latest Browse all 500

La tecnología Intel® RealSense™ y la nube de puntos

$
0
0

Descargar PDF

1. Introducción

Todo aquel que desarrolle aplicaciones gráficas, se encontrará en algún momento con el término “nube de puntos”, el cual, con respecto a la programación 3D, hace referencia simplemente a un conjunto de vectores o puntos que representan una forma. En la representación 3D tradicional, los puntos no son suficientes por sí mismos para proporcionar una representación visual de la forma, porque representan una única coordenada en el espacio, no un volumen o alguna asociación con puntos circundantes que pudiese implicar una superficie. Por lo general, corresponde al programador unir estos puntos para formar polígonos, o recurrir a otras técnicas que definan superficies, y obtener de esa manera una representación sólida de la forma en cuestión.
Figura 1.Una nube de puntos que representa un toro.

Hay mucha información disponible sobre captura, manipulación y representación de conjuntos de datos de nubes de puntos, pero muy pocos consejos sobre cómo aplicar este concepto a la creación de aplicaciones Intel® RealSense™.

En este artículo se verán recomendaciones sobre API, técnicas básicas y tecnología que se puede investigar a fin de contar con algunas herramientas más. Para entender el contenido es conveniente, pero no esencial, tener conocimientos básicos del SDK de Intel® RealSense™, programación 3D y estructuras geométricas.

2. Por qué es importante

Cuando se consideran los datos en bruto que se obtienen de las cámaras de profundidad típicas, son más bien una nube de puntos alineada dentro de una cuadrícula común, no una figura tridimensional. Esta sutil distinción es clave para encontrar soluciones innovadoras a las dificultades que enfrentamos en la actualidad.

También cabe decir que todavía se debe resolver el problema de manipular con precisión espacios 3D virtuales solo con las manos, como tomar una pelota virtual desde el aire o esculpir una estatua de arcilla. Este tipo de actividades parece adecuarse con naturalidad a la tecnología Intel RealSense, pero crear las técnicas que lo permitirían supera lo que se puede hacer con la mayoría de los kits de desarrollo de software (SDK) y deja en manos de los programadores innovar para encontrar soluciones.

Además de las posibilidades de colisión ya mencionadas, otro aspecto importante de pensar en los datos de profundidad en bruto como una nube de puntos es que nos permite combinar esos datos en representaciones 3D más exactas de formas tridimensionales. Por ejemplo, es posible escanear una habitación desde distintas perspectivas y ángulos, recopilar los datos como puntos y luego detectar puntos en común para unir los datos.

A quien todavía no esté convencido de que las nubes de puntos son un medio poderoso en el cual trabajar, lo invito a que busque en internet el video “The Shipping Galleries - A 3D Point Cloud Fly Through” y “Real-time Rendering of Massive Unstructured Raw Point Clouds” y que mire cómo se puede virtualizar el mundo real.

Imaginemos ahora una tecnología que utilice datos de nube de puntos generados en tiempo real, sin emplear el método tradicional de conjuntos de datos de 100 millones de puntos. Imaginemos tener caracterizaciones realistas en tiempo real en nuestro mundo virtual, controlar los objetos virtuales desde el mundo real e idear soluciones jamás concebidas.


Figura 2.PerceptuCam es una aplicación Intel® RealSense™ para conferencias que utiliza datos de puntos y crea con ellos una versión virtual del usuario.

Empezar desde lo más básico y entender todo lo necesario acerca de las nubes de puntos puede ser muy valioso para futuros proyectos. ¿Cuánto falta para que veamos camionetas de Google capturando nubes de puntos por las calles en tiempo real y transmitiéndolas a la nube para que las consuman al instante millones de usuarios que se trasladan de un lugar a otro? ¿Cuánto falta para que todas las cámaras de seguridad de las grandes ciudades integren equipos de captura de profundidad mediante escaneo y alojen petabytes de datos de nube de puntos en grupos de servidores de uso gratuito? Las nubes de puntos no van a quedarse tal cual están, y la tecnología Intel RealSense es la puerta de entrada para trabajar con ellas en tiempo real antes de que se conviertan en un recurso generalizado para los consumidores.

3. El punto de partida

En un artículo anterior analicé en profundidad la captura, el almacenamiento y el uso de datos 3D provenientes de una cámara de profundidad, desde la perspectiva de la generación de geometría tridimensional. El artículo se llama “3D a partir de datos de profundidad” (https://software.intel.com/en-us/articles/perpetual-computing-generating-3d-from-depth-data).


Figura 3.Prototipo en fases iniciales en el que se muestra cómo unir datos de profundidad sin procesar para crear geometría 3D.

La única diferencia entre el 3D creado en el artículo anterior y obtener la nube de puntos ahora es que no hay paso de unión. Una vez que se ha determinado la distancia de profundidad (Z) en la cuadrícula de escaneo fijo (XY), el arreglo en el que se han almacenado estos vectores pasa a ser nuestro conjunto de datos de nube de puntos, como se muestra en los ejemplos 1 y 2 siguientes.

EJEMPLO DE CÓDIGO 1. Creación de la estructura de datos de la nube de puntos

// estructura vectorial básica y arreglo de conjunto de datos de nube de puntos
struct vec3
{
	float x;
	float y;
	float z;
}
vec3* dataset = new vec3[depthwidth*depthheight];
dataset[(y*depthwidth)+x].x=(float)x;
dataset[(y*depthwidth)+x].y=(float)y;
dataset[(y*depthwidth)+x].z=(float)depthdistance;

Repasemos y resumamos: cuando ya hayamos inicializado la cámara de profundidad y obtenido un flujo de datos de profundidad, podremos rellenar un arreglo 2D de valores cortos (16 bits) que contienen la distancia desde la cámara hasta un objeto sólido detectado. El tamaño del arreglo 2D refleja la resolución del formato de datos de profundidad que se ha elegido. Al momento de redactarse este texto, existen varias cámaras que ofrecen resoluciones de profundidad de 320 x 240 a 640 x 480 y producen una nube de entre 76.800 y 307.200 puntos. Como es razonable suponer que cada punto consume 12 bytes (4 bytes por eje de vértice), estamos hablando de más de 900 kB para guardar un solo conjunto de datos de nube de puntos sin comprimir.

4. Un poco de color

Un aspecto que no hemos comentado de los datos provenientes de la cámara es que el flujo de color adicional es a menudo una imagen de mayor resolución. El SDK de Intel RealSense proporciona un flujo de asignación con búsqueda para poner en correlación el punto de profundidad con el color en la ubicación correspondiente.

EJEMPLO DE CÓDIGO 2. Estructura de datos ampliada con el componente RGB

// estructura vectorial básica y arreglo de conjunto de datos de nube de puntos
struct vec3
{
	float x;
	float y;
	float z;
  unsigned char red;
  unsigned char green;
  unsigned char blue;
}
vec3* dataset = new vec3[depthwidth*depthheight];
int datasetindex = (y*depthwidth)+x;
dataset[datasetindex].x=(float)x;
dataset[datasetindex].y=(float)y;
dataset[datasetindex].z=(float)depthdistance;
dataset[datasetindex].red=((*(DWORD*)colorStreamPtr)&0xFF0000)>>16;
dataset[datasetindex].green=((*(DWORD*)colorStreamPtr))&0xFF00)>>8;
dataset[datasetindex].blue=((*(DWORD*)colorStreamPtr))&0xFF);

Aumentar la estructura de datos de puntos para incluir un componente RGB hace posible reconstruir no solo la forma, sino también la textura del objeto. Únicamente el hardware “LiDAR” más costoso es capaz de capturar a la vez información de color y de profundidad superprecisa. Por lo tanto, es muy recomendable aprovechar esta información proveniente del aparato del consumidor si se desea crear la mejor representación visual de lo que hay frente a la cámara.
Figura 4.Una instantánea del flujo de color donde se extrajeron de la representación los píxeles de profundidad más lejanos.

El componente extra de color aumentaría la estructura de datos por puntos en 24 bytes, más del doble del uso de memoria del conjunto de datos y el posterior transporte si se tiene la intención de almacenar estos paquetes de nube de puntos. Una manera de reducir esta carga es con simple compresión RGB, ya sea que se utilice un formato 565 (5 bits para el rojo, 6 bits para el verde, 5 bits para el azul) o algo más atrevido, como una paleta y un índice de búsqueda.

5. Usos del conjunto de datos de nube de puntos

Supongamos que hemos guardado el conjunto de datos como arreglo vectorial típico y que estamos listos para visualizar o controlar algo. Son varias las técnicas que se pueden emplear y en este artículo vamos a hablar de algunas.

API de nube de puntos

Para empezar con todo, hay un proyecto muy conocido de código fuente abierto que se llama PCL (Point Cloud Library; http://pointclouds.org/). Contiene numerosas operaciones comunes para nube de puntos clasificadas por áreas de interés. Incluye filtros, detección de puntos clave, generación de árboles para ordenación, segmentación, detección de superficies, reconocimiento de formas 3D y varias técnicas de visualización.
Figura 5.Parte lo que ofrece Point Cloud Library (Copyright © PCL1)

Los detalles específicos de estos módulos especializados van más allá de lo que cubre este artículo, pero con un poco de paciencia y padecimiento, se llega a buen puerto. Consejos y ayuda no faltarán con esta invaluable API: son numerosísimas las personas que hacen aportes.

Manipulación física

Muchas aplicaciones para Intel RealSense se contentan con extraer de la posición de la mano o el rostro algo similar a una coordenada de puntero de mouse y no piden más de los datos de profundidad. Con el poder de las nubes de datos, se puede convertir la mano en un objeto físico real, y se le otorga a la aplicación el mismo grado de control virtual que uno tendría en el mundo real.

La técnica implica crear unas 76.000 esferas físicas (datos de profundidad de 320 x 240) y llevarlas a las posiciones en tiempo real de los puntos del conjunto de datos, eliminando todos los movimientos y colisiones de gran energía como parte del proceso. El resultado que se obtiene es una superficie física precisa de la mano visible, capaz de interactuar con otros objetos físicos del mundo virtual, levantar, empujar, tomar, golpear y tocar en un sistema de control totalmente nuevo.

Una manera de regular el tamaño del conjunto de datos es mediante el control de las muestras de datos de profundidad, para equilibrar la resolución de la mano 3D con el costo general de procesamiento. Quienes estén familiarizados con las técnicas para física de las GPU modernas pueden incluso transmitir todo el conjunto de datos a la memoria de vídeo y tener un nivel de granularidad sustancialmente mayor para la simulación.

Representación visual

La representación gráfica de datos de nube de puntos sin procesar se parece a una serie de puntos diminutos en una pantalla relativamente vacía, semejante a un esbozo 3D fantasmal. Este no sería un método de presentación deseable para la mayoría de las aplicaciones, pero hay varias maneras de convertir el enjambre de puntos en algo sólido.
Figura 6.Incluso con una gran concentración de puntos, sigue siendo difícil ver la representación (© PCL1).

La primera técnica ya se trató en un artículo titulado “3D a partir de datos de profundidad”. En esencia, hay que crear un polígono a partir de los tres puntos más cercanos y avanzar por la malla siguiendo ese proceso, hasta unir todos los puntos. Esta técnica tiene varias ventajas y desventajas. La desventaja principal es que no distingue qué formas se deben separar. Por ejemplo, la mano está separada de la cabeza, pero el método de unión básico no se da cuenta y supone que la superficie es una sola e ininterrumpida. Otra desventaja es el costo de procesamiento que implica unir tantos puntos para crear polígonos, paso que debe hacerse en cada ciclo y que consume muchos recursos de CPU y GPU. La última desventaja es que la aplicación necesita más memoria para almacenar esta malla 3D ya generada, porque el tamaño final es mayor que el del conjunto de datos original (que también debe permanecer en la memoria). La ventaja número uno es que una vez generada la malla 3D, tiene todos los beneficios de un objeto geométrico convencional y se lo puede iluminar y agregar texturas y sombras según lo exija la aplicación.

Una técnica más experimental es ordenar los datos de nube de puntos en un árbol de búsqueda (en PCL se pueden encontrar más detalles sobre estas técnicas), y eliminar los datos en tiempo real después del procesamiento. De manera similar a como funciona la tecnología Voxel, se representa la forma en el espacio de pantalla y cada píxel desencadena una lectura en el árbol de búsqueda ordenado. Si la posición y el ángulo son fijos, la búsqueda puede ser muy rápida. Si se agrega una búsqueda más dinámica por ray-casting, se puede representar la forma de nube de puntos desde cualquier ángulo y posición. Además, como la búsqueda puede devolver el punto viable más cercano de cada píxel de pantalla, los espacios que normalmente acompañan las representaciones en bruto de la nube de puntos se rellenan. En la nota titulada “El árbol kd cuantificado” (http://research.edm.uhasselt.be/tmertens/papers/qkdtree.pdf) se puede encontrar más información sobre los árboles kd, y es un buen punto de partida para investigar más el tema.

Asignación automática de nubes de puntos

Otro uso interesante de la nube de puntos es que permite detectar con exactitud un marcador único dentro de una instantánea de un conjunto de datos de nubes de puntos y usar el marcador como punto de fijación para unir una segunda nube de puntos. Con ejecución en tiempo real y el uso de detección automática de marcadores, se puede crear una aplicación que, cuanto más tiempo permanezca una forma frente a la cámara, más aprenderá de ella. Tomemos como ejemplo una taza. Una instantánea de la parte delantera muestra como máximo un 50 % de la superficie, sin datos de puntos de la parte trasera. La instantánea se pasa a otro subproceso que comienza a identificar marcadores dentro de la nube de puntos (asa, borde circular, hendiduras, planos, cilindros, etc.) y los guarda para utilizarlos más adelante.
Figura 7.Los datos de puntos se pueden reducir a planos y cilindros simples con marcadores ideales (© PCL1).

Con tandas posteriores de datos, se repite este proceso y se inicia un segundo proceso para aparear marcadores. Solo a aquellos que muestran una correlación elevada se les ordena unirse a los datos de nube de puntos en tiempo real. En teoría, cuando uno levanta un objeto y le muestra a la computadora todos sus lados, el software entiende cómo es la forma entera.

Fotocopiadora 3D

Ahora que se pueden conseguir con facilidad impresoras 3D, es posible convertir una malla 3D virtual en un objeto del mundo real con solo imprimirlo como elemento sólido. Si se utiliza la técnica mencionada, casi cualquier objeto se puede escanear en segundos con la cámara de profundidad, luego inspeccionarlo en el software y convertirlo después a un formato listo para la impresora 3D. Imaginemos que se pierde una pieza de nuestro juego de ajedrez preferido, entonces tomamos la pieza equivalente del otro color y la escaneamos mientras la hacemos girar con la mano.
Figura 8.Hay que sostener el objeto frente a uno y dejar que la computadora se encargue del resto.

Para mejorar la precisión, el software diferenciará entre el color de la mano, los dedos, el rostro y los matices predominantes del fondo. Quizá al iniciarse la aplicación, haya un pequeño “paso de calibración” y pida hacer un “saludo a la cámara” como puntapié inicial.

En la práctica, este tipo de escaneo libre sin controles nunca produce resultados que igualen en precisión a los realizados en laboratorios profesionales o con giros tipo rueda de alfarero, pero por medio de filtros de nube de puntos (en PCL hay más información sobre filtros de delineación y de reducción de ruido) se puede generar una malla 3D sellada de buena calidad a partir de una cantidad suficiente de muestras. Este proceso aprovecha en gran medida que la cámara de profundidad puede transmitir hasta 60 fotogramas por segundo cuando el flujo de color está desactivado, y produce muchas miniinstantáneas y más ocasiones para que un algoritmo de detección inteligente de marcadores haga su trabajo.

Detección de formas 3D

Si extendemos esta técnica, cuando tenemos una base de datos de referencias de marcadores y suficientes nubes de puntos asociadas como para reconstruir un objeto 3D, contamos con lo esencial para un sistema de detección de objetos 3D. Se puede crear software que almacene en caché una forma entera, y la siguiente vez que se muestre esa forma a la cámara, se activarán decenas de indicadores porque la computadora reconoce muchos marcadores que tiene registrados de ese objeto.
Figura 9.Con suficientes marcadores, se puede detectar esta taza a partir del asa y el cilindro (© PCL1).

Serán innumerables las oportunidades que surgirán para los ingenieros de software cuando resolvamos los inconvenientes que presenta la detección instantánea de objetos. En la actualidad, las computadoras son capaces de reconocer unas pocas palabras y gestos, como un perro bien entrenado pero casi ciego. Con la capacidad de distinguir entre diferentes objetos y si se toma en cuenta el contexto para catalogar esas observaciones, la computadora deja de ser un aparato tosco que saca conclusiones a partir de generalizaciones y pasa a ser un dispositivo inteligente y muy específico, que abre las puertas a la posibilidad de realizar proyectos muy interesantes.

Pasada la etapa de detección de una taza, el software podría detectar rasgos faciales. Cuanto más tiempo se siente una persona frente a la computadora y más marcadores se asocien con ese “objeto”, más rápido podrá el equipo reconocer a la persona.

6. Trucos y consejos

Recomendamos

  • Antes de poner en práctica cualquier técnica para conjuntos de datos de nube de puntos, hay que implementar un método para representar en la pantalla la nube de puntos en bruto. Esto servirá como vista para depuración durante el desarrollo y también para confirmar que la cámara esté generando lo que debe.
  • Si se opta por usar la biblioteca Point Cloud Library, primero hay que configurar y compilar los ejemplos proporcionados y asegurarse de que las llamadas a la biblioteca funcionen. PCL tiene muchas dependencias, por lo que sería más fácil portar la aplicación Intel RealSense a un ejemplo de PCL existente, en lugar de lo opuesto.
  • Antes de embarcarse en la tarea de escribir una técnica visual propia para pasar de nube de puntos a 3D, conviene dedicar unas horas a investigar las muy buenas técnicas que ya existen, tales como triangulación de Delaunay, algoritmo de pivoteo de bola, reconstrucción de superficies de Poisson y formas alfa, entre muchas otras.
  • MeshLab es otra buena biblioteca de código fuente abierto que se puede utilizar para convertir nubes de puntos a mallas 3D, y viene con algoritmos de limpieza muy prácticos que ayudan a sellar y perfeccionar las mallas obtenidas.

Desaconsejamos

  • No hay que intentar procesar conjuntos de datos de nube de puntos en tiempo real con código que genere muchos árboles y que esté diseñado para que los siguientes accesos a los puntos sean rápidos. Estos tipos de código son para usar en pasos de preparación, no para procesamiento en tiempo real. Cuando sea posible, se debe probar la técnica de generación por separado en un prototipo antes de confiar en ella para el software principal.
  • No hay que intentar crear datos de nube de puntos con bloqueo de exclusión mutua porque reduce el rendimiento de toda la aplicación cuando se detienen subprocesos específicos. Es mejor crear una cadena de asignaciones de nubes de puntos que permita al flujo de profundidad generarlos lo más rápido posible y usar un segundo subproceso para las manipulaciones intensas que haya que realizar del conjunto de datos en cualquier otra parte.
  • No hay que dejar de tener presente la memoria y el espacio de almacenamiento que la aplicación empezará a exigir. La gran mayoría de las aplicaciones que trabajan con nubes de puntos consumen enormes cantidades tanto de memoria como de espacio en disco, y eso puede salirse de control con mucha facilidad. Hay que elaborar el presupuesto de recursos por adelantado.

7. Resumen

Quizás en un futuro no tan distante, entraremos en nuestro despacho, dormitorio o estudio, y cuando nos sentemos nos saluden con un amable “Hola, Lee. Qué bueno verte otra vez”. Y con voz algo irritada: “No estás usando anteojos. ¿Quieres que se te canse la vista?”. “Computadora, sí estoy usando anteojos”, contesto. “Sí, ahora los veo. Perdón”, es su respuesta.

Desde hace muchos años estoy convencido de que se puede entrenar a las computadoras y los robots hasta cierto grado. En la actualidad, “matamos” a los dispositivos informáticos al final de cada jornada. Los apagamos, borramos sus cerebros y los volvemos a encender al día siguiente. Colocamos y quitamos las numerosas cargas que queremos que transporte nuestro burro electrónico, pero el burro por sí mismo actúa mecánicamente, es incapaz de recordar quién es su dueño, y poco le importa. ¿No podríamos enseñarle a reconocernos de un vistazo, a que absorba pasivamente y cree una red neuronal de referencias a nubes de puntos, y las conecte a sus otros sentidos, como el tiempo, la ubicación y la tarea que está realizando? Entonces sería sencillo programar la computadora con algunas idiosincrasias humanas básicas, por ejemplo reconocer situaciones que se repiten con frecuencia: “Lee, hace siete días que tienes puesta la misma camisa. ¡Suerte que no tengo nariz!”. Más fácil aún sería reemplazar la programación convencional con comunicación visual directa: “No, computadora, esto es una tableta, no un teléfono”. “¡Muestra el dispositivo como corresponde!”, pide la computadora.

Esto puede sonar a ciencia ficción o a los desvaríos de un programador. Hace algunos años yo habría estado de acuerdo. La diferencia hoy en día es que contamos con una capacidad de almacenamiento en la nube suficiente para registrar años de experiencia informática, tanto de manera individual como colectiva. Tenemos sensores de los que se sirven los aparatos para vernos y oírnos, y el poder de cálculo para hacer realidad todo esto. Lo único que falta en este momento es que aparezca un adelantado, alguien intrépido que después de leer esto no exclame “¡qué delirio!” o “nunca va a pasar”, sino que piense “podría intentarlo”.

Acerca del autor

Cuando Lee Bamber no escribe artículos, es el director ejecutivo de The Game Creators (http://www.thegamecreators.com), una empresa británica que se especializa en el desarrollo y la distribución de herramientas para crear juegos. Esta empresa fundada en 1999 y la comunidad de desarrolladores de juegos que la acompaña crearon títulos muy populares, como Dark Basic, The 3D Game Maker, FPS Creator, App Game Kit (AGK) y, recientemente, Guru.

1Un agradecimiento especial a POINTCLOUDS.ORG por compartir las imágenes de su sitio web mediante Creative Commons Attributions 3.0. De conformidad con los requisitos, incluimos el enlace a la licencia (http://creativecommons.org/licenses/by/3.0/), y confirmamos que no hemos hecho ningún cambio a las imágenes que son propiedad intelectual de PCL.

Avisos
Intel, el logotipo de Intel e Intel RealSense son marcas comerciales de Intel Corporation en los EE. UU. y otros países.
Copyright © 2015 Intel Corporation. Todos los derechos reservados.
*Es posible que la propiedad de otros nombres y marcas corresponda a terceros.

  • Intel® RealSense™ Technology
  • Intel® RealSense™
  • Point Cloud
  • Lee Bamber
  • 开发人员
  • Microsoft Windows* 8.x
  • 英特尔® 实感™ 技术
  • C/C++
  • 中级
  • 英特尔® 实感™ SDK
  • 英特尔® 实感™ 技术
  • 前置 F200 照相机
  • 笔记本电脑
  • 平板电脑
  • URL

  • Viewing all articles
    Browse latest Browse all 500

    Trending Articles



    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>