martes, 27 de diciembre de 2011

¿Qué tarjeta gráfica pongo en un servidor de aplicaciones JEE?

Teniendo en cuenta que un servidor de aplicaciones va a dedicarse fundamentalmente a atender transacciones HTTP, lo natural es pensar que su tarjeta gráfica va a ser de escasa utilidad, salvo para la propia consola. Y eso es cierto, pero desde la versión 1.4 de Java, el API Java 2D es capaz de aprovechar la GPU de la tarjeta gráfica para delegar en ella operaciones costosas como cambiar de escala una imagen, dibujar sombreados...

Si la aplicación web que estamos desarrollando requiere transformar imágenes almacenadas en un repositorio o requiere generar gráficos, incluso dibujar sencillos diagramas de barras, la aceleración aportada por la tarjeta gráfica puede liberar a la CPU de mucho trabajo.

El problema en la práctica no es trivial, puesto que tanto la disponibilidad de aceleración por hardware como su rendimiento práctico dependen del sistema operativo, del modelo de tarjeta gráfica, de la versión de Java y de la disponibilidad de rendering pipelines para OpenGL, DirectDraw, Direct3D o X11. El rendimiento también depende de los métodos concretos del API Java 2D que se utilicen, puesto que la aceleración puede no estar implementada en todos ellos. Son muchas las posibles combinaciones, por lo que resulta difícil dar recetas.

Recientemente, entre dos enfoques distintos para el mismo tratamiento de ciertas imágenes, encontré una proporción de velocidades de 200 a 1. Es tanta la diferencia que merece la pena tomarse la molestia de buscar la forma de aplicar la aceleración gráfica, no sólo en aplicaciones  de escritorio, sino también en aplicaciones web que transforman o generan imágenes. Entonces tendrás tu respuesta a la pregunta que da título a esta entrada.

lunes, 26 de diciembre de 2011

Por qué lo llaman 3D cuando quieren decir estereoscópico


Clément Ader, además de inventar aviones y la mismísima palabra avión, demostró en 1881 de forma práctica el uso del sonido estereofónico, impresionando a la audiencia con su "teatrófono", que daba la sensación de percibir la distribución de las fuentes de sonido en el espacio. Pero no fue hasta 1927 cuando el término estereofónico fue acuñado por la compañía Western Electric. Desde entonces, a nadie le molesta hablar de equipos de sonido estéreo.

Curiosamente, el término estereofónico se acuño por su analogía con estereoscópico, mucho más antiguo, ya que en 1838, Charles Wheatstone (sí, el del puente de Wheatstone que se estudia en bachillerato) estudiando la visión binocular humana, inventó el primer estereoscopio. Aunque no termina de entrar de lleno en la vida de todos, esta tecnología siempre ha estado ahí. A fin de cuentas, ¡quién no ha tenido un Wiew Master!
View Master
En estos últimos tiempos, la industria del cine y de la televisión se han puesto de acuerdo en inundarnos con cines y equipos de TV capaces de presentar imágenes estereoscópicas. Esto ayuda a crear la suficiente masa crítica que permita invertir en la  producción de este tipo de películas y programas. Pero el término estereoscópico parece hacerse demasiado largo, y han decidido usar la expresión 3D en su lugar.

Debe de estar Edwin Abbot removiéndose en su tumba cada vez que alguien piensa que a partir de la información proporcionada por dos líneas rectas puede construir una superficie de dos dimensiones. En efecto, los habitantes de Planilandia sólo perciben rectas, a partir de las cuales nunca podrán saber lo que hay detrás del contorno de los objetos, porque la visión bidimensional requiere la percepción de todo lo existente en un plano. No obstante, nosotros, que vivimos en un mundo tridimensional, percibimos sus dos dimensiones y no  sólo vemos su exterior, sino también sus tripas.
Un médico y un comerciante vistos en Planilandia
Pues lo mismo nos ocurre a nosotros en una dimensión más. Nuestra visión es bidimensional, y usando dos imágenes podemos obtener una cierta idea de la profundidad de las cosas que vemos. Pero la visión tridimensional implica algo más: el conocimiento de los objetos existentes en cualquier punto del espacio. El siguiente par animado permite comprender que la valla se encuentra detrás del grupo de personas pero, por mucho que nos empeñemos, no conseguimos ver los zapatos de la dama del centro. Esa es la diferencia fundamental entre ver en las tres dimensiones o no.
Par estereoscópico animado
Ya sé que sólo es un nombre, que es más fácil decir tresdé que estereoscópico, y que cuando vayamos al cine tendremos que decir en la taquilla que queremos ver la versión 3D, pero no por eso debemos renunciar a entender las cosas.

lunes, 28 de noviembre de 2011

El arte y la visión por computador con caras

Un amigo me hace llegar una interesante entrada de blog sobre arte digital y anális facial. La disponibilidad de software para el análisis facial listo para usar en OpenCV y puesto a disposición de todo el mundo por los investigadores, ha disparado su uso.

Hay otra reflexión asociada al mismo blog ¿llegaremos a sufrir una sociedad vigilada por cámaras en la que todos nuestros movimientos puedan ser conocidos por terceros? La tecnología de visión puede ser utilizada en un sentido (buscar delincuentes) o en otro (controlar a cualquiera). En cualquier caso, todavía estamos muy lejos de que sea una realidad. Sobre todo debido a que los sistemas actuales no son capaces de reconocer a una persona en cualquier condición ambiental. Para ver donde se encuentran los sistemas actuales es interesante echar un vistazo al "Face Recognition Vendor Test" del NIST. También es interesante el test propuesto para caras en la "jungla", "Labeled Faces in the Wild".

miércoles, 19 de octubre de 2011

Procesamiento de Imágenes con Android en Stanford

Me ha sorprendido grátamente encontrarme con que en la Universidad de Stanford se enseña procesamiento de imágenes con prácticas y proyectos que los alumnos desarrollan en teléfonos con Android. Me parece una decisión muy inteligente, con una buena visión pedagógica (el alumno con inquietudes siempre está interesado en aprender lo último de lo último) y de futuro (hay que entrenar a los ingenieros, si se puede, en lo que se encontrarán en su trabajo).

El mayor sector de crecimiento en informática es, y será por bastante tiempo, la computación móvil. Los teléfonos móviles inteligentes se acercan año a año al rendimiento necesario para los algoritmos más exigentes en Visión por Computadora (detección de objetos, seguimiento visual, etc). Así que tarde o temprano tendremos que hacer alguna aplicación de visión por computador para el teléfono móvil ... tiempo al tiempo. Sin ir más lejos OpenCV desde la versión 2.2 compila y se puede utilizar en Android.

Un ejemplo muy interesante es la aplicación para Android "Google goggles" que permite hacer la detección de objetos en "batch" combinando procesamiento en el teléfono y acceso a servidores.

viernes, 14 de octubre de 2011

Uso de la Visión Artificial en eventos deportivos

Hasta hace poco, cuando en televisión mostraban las estadísticas de los partidos de fútbol o de tenis me sorprendía la dura labor que se debía estar realizando para recopilar dichos datos durante cada partido. Que si el tiempo de posesión del Barsa fue del 80%, que si Nadal recorrió 6 kms durante el partido, que si el balón ha salido de banda 33 veces... Pero resulta que en la mayoría de estos casos ya hay sistemas de Visión Artificial que se encargan de recopilar dicha información, de informar a los espectadores e incluso de asesorar al árbitro.

Quizás la aplicación más conocida sea el famoso Ojo de Halcón. Esta aplicación se utiliza los torneos de tenis de alto nivel para determinar la trayectoria de la bola y así saber si, como diría McEnroe: "la bola entró". Actualmente, el software que se utiliza fue desarrollado por la empresa inglesa Roke Manor Research Ltd., luego se ha perfeccionado en la empresa Hawk-Eye Innovations Ltd.parece que hace poco Sony la ha comprado. Según la Wikipedia, la tecnología de Ojo de Halcón utiliza varias cámaras (más de 4) de alta velocidad calibradas y un modelo de la pista. Con ellas determina la posición 3D de la bola en tiempo real mediante un proceso básico de triangulación.


Otra de las utilidades, en este caso menos conocida, consiste en el cálculo de la distancia recorrida por los jugadores en los partidos. Hace poco, en el blog Ballesterismo explicaban que el cálculo de la distancia recorrida por los jugadores de fútbol (Live Player Tracking) en competiciones europeas se realiza mediante técnicas de Visión Artificial. En particular se utiliza el software desarrollado por la empresa Italiana Delta Tre. Además, según cuenta la empresa Tracab, también se utiliza su propio software de seguimiento 3D para analizar otros eventos del juego.

En la misma línea, en el ICCV 2011 se presentó un trabajo sobre el seguimiento de personas y una de sus aplicaciones se centró en el seguimiento de jugadores en eventos deportivos. Los resultados fueron espectaculares.

Según algunos estudios estás técnicas son bastante precisas. Sin embargo, no terminan de automatizarse para aspectos cruciales del juego. Supongo que aunque hay empresas, como la propia Hawk-Eye Innovations Ltd., que disponen de sistemas de Visión Artificial para saber si un balón entró en la portería o si alguien está en fuera de juego, muchos de estos sistemas no se ponen en marcha porque eliminarían una parte importante del espectáculo: los errores arbitrales.

jueves, 13 de octubre de 2011

La confluencia entre Gráficos y Visión por Computadora

Desde hace bastante tiempo ya, se constanta una tendencia en las aplicaciones y la teoría que nos lleva a "la confluencia de los gráficos y la visión". Esto es, cada vez hay más aplicaciones que añaden objetos virtuales en secuencias de vídeo real (realidad aumentada) y también otras que reconstruyen objetos o se captura el movimiento de personajes utilizando técnicas de Visión. Si queremos hacer realidad aumentada necesitamos colocar la cámara virtual (la de los gráficos 3D) alineada con la cámara real. Está claro que eso no sería posible sin el desarrollo de la teoría necesaria para autocalibrar (encontrar los parámetros como la distancia focal) de la cámara(s) a partir de una "simple" secuencia de vídeo.

Un ejemplo interesante de esa relación entre ambos mundos se ve claramente en películas como Avatar. En la realización de la pelicula se mezcla imagen real, imagen sintética, captura de movimiento del cuerpo de actores y captura de expresiones faciales. Uno de los investigadores de Visión que participaron en el desarrollo de la película Avatar es Iain Matthews (ahora en Disney Research).

Otro ejemplo de la visión y los gráficos son las herramientas de postproducción y análisis de vídeo de la empresa 2D3 (que nació como resultado de la investigación en Visión de un grupo de investigadores de la universidad de Oxford).

El último ejemplo interesante es la aparición de carteles, símbolos, medidas de distancias sobre el suelo, etc. en las retransmisiones deportivas por televisión.

Por tanto los investigadores o ingenieros trabajando en gráficos (o en visión) tarde o temprano tendrán que utilizar técnicas de visión (de gráficos).

martes, 4 de octubre de 2011

KinectFusion ...

El sensor 3D de Microsoft, "el Kinect", ha revolucionado el mundo de las aplicaciones de interacción hombre-computadora. Lo que la gente utiliza de Kinect es el sensor que estima mapas de profundidad con una calidad más que aceptable. Pero lo más interesante de Kinect está en el software que corre dentro de la Xbox para poder estimar la pose del cuerpo del usuario. Ese software ha sido desarrollado por los investigadores de MS Research.

Ahora la gente de Microsoft Research, Imperial College y otras instituciones presentan en el SIGGRAPH una extensión del uso del sensor 3D para la reconstrucción completa de escenas 3D en tiempo real y su uso en aplicaciones para mejorar la interacción mundo real-mundo virtual. El vídeo es sencillamente impresionante.

También es cierto que uno de los investadores participantes en KinectFusion, Andrew Davison, había hecho antes reconstrucciones 3D densas en tiempo real con una simple webcam y una computadora. La diferencia con el KinectFusion es la velocidad y la información de partida (en el caso de KinectFusion se parte de mapas de profundidad bastante buenos obtenidos en tiempo real).

jueves, 28 de abril de 2011

Artículo sobre Visión por Computadora en el New York Times ...

Que las aplicaciones por Visión por Computadora nos rodean sin que nos demos mucha cuenta es un hecho (lectura de matrículas en el parking de la esquina es un ejemplo claro). El NYT ha publicado un artículo muy interesante sobre el particular: Computers That See You and Keep Watch Over You.

martes, 26 de abril de 2011

Computer Vision Fact and Fiction

Todos los que nos dedicamos de alguna forma a la técnología hemos visto como en las películas o series de TV se "pueden hacer" cosas que pasan por encima de las leyes de la física, aparecen tecnologías inexistentes, se puede "hackear" un sistema "programando en tiempo real" y viendo cómo el código pasa a toda velocidad por la pantalla, etc.

Por otro lado los que nos dedicamos a la Visión por Computadora sabemos qué se puede hacer hoy en día y qué es probable que se pueda hacer. ¿Se puede identificar a una persona por el Iris como en Minority Report? ¿Se puede seguir un vehículo sobre imágenes de satélite? ¿Se puede "mirar" ampliando la resolución de una imagen como en Blade Runner?

Existe una magnífica serie de reportajes sobre diferentes aplicaciones de Visión que han aparecido en películas comentadas por expertos en cada tema. La serie se llama "Computer Vision Facts and Fiction":

Web de Computer Vision Facts and Fiction


Creo que es muy interesante para que cualquiera sepa qué se puede y qué no se puede hacer hoy en día en Visión por Computadora.

domingo, 17 de abril de 2011

Lenguajes para Visión Artificial

Hasta el año 2000, los sistemas de Visión Artificial se programaban habitualmente en lenguajes de bajo nivel, sobre todo en C. Esto casi siempre se debía a que los algoritmos de Visión Artificial suelen requerir cálculos intensivos, y C permitía ejecutarlos con máxima celeridad.

Evidentemente, si un programador domina el lenguaje ensamblador de una máquina y programa un algoritmo de manera nativa para la misma, el resultado puede ser óptimo. Sin embargo, para programar de manera eficiente en ensamblador se requieren unos conocimientos muy avanzados (y mucha paciencia). Un programador menos instruido puede implementar el mismo algoritmo en C y obtener seguramente un rendimiento mayor. Además, tardará menos y su solución servirá para un amplio abanico de máquinas. Esto se debe a que C provee de herramientas de abstracción de las que el lenguaje ensamblador adolece, y a que en C se pueden encontrar miles de bibliotecas que facilitan mucho la labor del programador (entre las que podemos destacar OpenCV para visión). De hecho, casi todos los fabricantes suministran bibliotecas en C para el manejo de su hardware (por ejemplo, los fabricantes de tarjetas gráficas proporcionan APIs propietarias como CUDA o abiertas como OpenCL).

Creo que lo comentado hasta ahora justifica suficientemente el paso de ensamblador a C. Pero se debe observar que, de la misma forma, podría justificar el paso de C a otros lenguajes de más alto nivel, como Matlab, Python o Java. De hecho, desde principios de siglo, cada vez más sistemas de Visión Artificial se implementan en lenguajes de más alto nivel como Matlab. Este cambio hacia una abstracción aún mayor, simplifica de nuevo las labores de programación. Además, esto está ocurriendo sin que se note un decremento en el rendimiento de los sistemas, lo cual se debe a dos hechos: por un lado los ordenadores de hoy son lo suficientemente rápidos para que la ejecución sobre lenguajes más lentos no plantee demasiados problemas, y por otro lado, la mayoría de las funciones de cálculo intensivo de Matlab están implementadas en C, por lo que si Matlab se usa de manera adecuada, la perdida de rendimiento respecto a programar directamente en C podría ser despreciable.

Uno de los problemas de Matlab estriba en que no es una solución gratuita, y por tanto la documentación y el software tiene un coste que, sobre todo, el aprendiz no desea pagar. Es quizás por ello que, en los últimos años, en el entorno educativo han aparecido alternativas gratuitas como Octave, R, Scilab, o Scipy sobre Python. Estas herramientas han evolucionado suficiente para abandonar su origen educativo y ser usadas en aplicaciones reales. En particular, Scipy sobre Python se está siendo elegido por muchos como su entorno para procesamiento de imagen.

Entornos QtOctave (sobre Octave) y Spyder (sobre Python y Scipy)

En Java, también se pueden encontrar bibliotecas para trabajar en Visión (como las JAI, ImageJ o JavaCV), pero en general es más raro que un sistema de Visión Artificial se programe en Java. Esto quizás se deba a la ausencia de una gran biblioteca de Visión Artificial para Java, o a que como la complejidad de programar en Java es similar a la de programar en C, simplemente no se suela optar por esta alternativa. Sin embargo, Java ofrece muy buenas perspectivas para el desarrollo de aplicaciones de Visión Artificial. Por un lado, no hay lenguaje que disponga de más bibliotecas que Java, no por nada es el lenguaje más utilizado en el mundo, con un 20% de cuota de mercado. Por otro lado, es multiplataforma, y esto puede ser determinante, por ejemplo en el mundo de los móviles de última generación (de hecho Java es el lenguaje nativo del sistema operativo Android). Además, una implementación eficiente en Java, desde el punto de vista de velocidad de ejecución, puede llegar a ofrecer un rendimiento similar a una realizada en C.

Se puede concluir diciendo que Matlab y las alternativas libres (como Octave o Scipy) son los entornos preferidos para programar aplicaciones de Visión Artificial en ambientes académicos, mientras que C sigue siendo el lenguaje de programación preferido para este tipo de aplicaciones en entornos industriales, aunque la distancia entre ambos se está reduciendo en los últimos años en detrimento de C.