inmensia |
Blog
Juan Mellado, 12 Mayo, 2012 - 20:15
He liberado los fuentes de js-handtracking, una librería escrita en JavaScript que captura la imagen de una webcam y la procesa con el objetivo de detectar la presencia de piel humana, preferentemente una mano, y extraer sus características estructurales más importantes. La librería realiza las siguientes operaciones: - Detección de las áreas de la imagen que contienen piel Demo online: Para probar la demo es necesario utilizar un navegador moderno con soporte para WebRTC, que es la tecnología que permite a JavaScript acceder a la webcam directamente desde el navegador. Por ejemplo, Chrome 18 o superior, con el flag Para la detección de piel al final he optado por convertir los colores desde RGB hasta HSV y comprobar los valores de los canales H y V para determinar si están dentro del rango de la piel humana: v >= 15 and v <= 250
Las condiciones de iluminación son muy importantes y hacen que los colores sean detectados de forma muy distinta por la webcam. He tenido bastantes problemas ajustando los parámetros. Al final eliminando el equilibrado automático de blancos he conseguido una detección bastante estable. Lo realmente importante es darse cuenta que hace sólo unos pocos meses era impensable pensar en realizar este tipo de aplicaciones sencillas de visión artificial en JavaScript.
Juan Mellado, 9 Mayo, 2012 - 18:54
Estoy trabajando en una nueva librería escrita en JavaScript. Esta vez estoy tratando de implementar un sistema de tracking, en especial de manos. Mi objetivo es ser capaz de detectar una mano que se encuentre dentro de una imagen y destacar sobre ella sus características principales. Ya tengo un prototipo bastante avanzado, como puede verse en la siguiente imagen: La librería segmenta una imagen dada dividiéndola en regiones que contengan colores dentro del rango que caracteriza la piel humana (blanco). Asumiendo que la región más grande encontrada corresponde a una mano, ya que ese es el objetivo de uso de la librería. A continuación encuentra el contorno de la región (rojo), y sobre ese contorno calcula la envolvente convexa (azul) y sus defectos de convexidad (verde). Los defectos de convexidad suelen ser de bastante utilidad, ya que se pueden usar para contar el número de dedos que tiene levantados la mano por ejemplo. Viendo la imagen está claro que la librería ya cumple su objetivo, pero aún me quedan varias pruebas que quiero realizar antes de liberar los fuentes. La parte más complicada del proceso está siendo la primera, la detección de la piel humana. Ya había trabajado antes en el tema, pero me estoy encontrando con problemas debido a que mi webcam es MUY mala y no hay forma de que me proporcione fotogramas con los colores correctos. De momento me estoy limitando a utilizar imágenes estáticas, aunque tengo una demo que acepta como entrada vídeo directamente. En el apartado de la documentación de referencia, para la detección de piel he probado tres sistemas distintos. Al final el que se encuentra ahora mismo implementado es el que se describe en esta página (en chino): - http://blog.csdn.net/scyscyao/article/details/5468577 De hecho, la imagen de la mano que he puesto es de esa página. La he estado utilizando para comparar resultados. Espero que no haya problemas de copyright. Antes de liberar la librería me gustaría revisar la implementación que tiene OpenCV de una técnica llamada "adaptive skin detection", que ajusta los parámetros de detección de piel humana en función de como varía la imagen fotograma a fotograma. Pero no estoy muy convencido, ya he hecho una primera prueba en JavaScript de la parte básica sobre una imagen estática y detecta menos piel que el método que tengo ahora mismo funcionando.
Juan Mellado, 7 Mayo, 2012 - 09:25
Esta parte de la documentación, junto a la dedicada a base de datos, es la más extensa. Y no es casual. Son las capas a las que normalmente más tiempo se le dedica durante el desarrollo de una aplicación. Y eso que me he dejado muchas cosas en el tintero, como la integración con otros frameworks, la creación de portlets, la escritura de webservices, ... y un largo etcétera.
Juan Mellado, 5 Mayo, 2012 - 10:13
En esta nueva tanda de artículos dentro de la serie dedicada a Spring se revisa el uso de JDBC, la implementación de Hibernate para realizar el mapeo entidad-relación, el estándar JPA, e incluso la serialización XML de entidades: En la práctica no tiene sentido conocer los detalles de todas las implementaciones disponibles, sólo saber que existen. Normalmente la tecnología a utilizar viene dada por el proyecto, si se trata de un proyecto de mantenimiento, o por el tipo de desarrollo, si se trata de un nuevo desarrollo. En la actualidad aplicar JPA 2.0 parece ser la norma. La siguiente tanda de artículos será la última de esta serie, y estará dedicada al desarrollo de aplicaciones web.
Juan Mellado, 3 Mayo, 2012 - 09:37
Spring da soporte para incorporar la gestión de transacciones a las aplicaciones más allá del ofrecido por un gestor de base de datos. Ya sea aprovechando las capacidades ofrecidas por un servidor de aplicaciones, o las proporcionadas de forma local por la propia aplicación mediante alguna librería que lo implemente. En los siguientes artículos de la serie dedicada a Spring reviso algunos términos importantes y muestro configuraciones de ejemplos: - Transacciones (1) - Introducción - Transacciones (2) - Definición y Uso - Transacciones (3) - Configuración y Anotaciones Una de las cosas que siempre me han gustado de esta parte es que basta con añadir la etiqueta La siguiente tanda de artículos estará dedicado al acceso a base de datos y el mapeo objeto relacional en general. |