Blog

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:

Hand Tracking

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.

Temas: Java Spring
Juan Mellado, 7 Mayo, 2012 - 09:25

Spring FrameworkLa última tanda de artículos de la serie dedicada a Spring tratan el desarrollo de aplicaciones web, que es donde se utiliza el framework de forma más habitual. Los artículos son un repaso rápido de la documentación oficial de referencia, enumerando algunas de las facilidades más importantes que ofrece Spring a la hora de implementar servlets y handlers:

- Web MVC (1) - Configuración

- Web MVC (2) - Servlets

- Web MVC (3) - Controladores

- Web MVC (4) - Handlers

- Web MVC (5) - Modelos

- Web MVC (6) - Vistas

- Web MVC (7) - Tag Library

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.

Temas: Java Spring
Juan Mellado, 5 Mayo, 2012 - 10:13

Spring FrameworkLa mayoría de aplicaciones del mundo empresarial suelen estar basadas en algún de tipo de base de datos. El modelo de dominio de un sistema suele ser la pieza central en base a la que se construye. Spring ofrece una gran cantidad de formas de configurar y acceder a bases de datos, e incluso fuentes de recursos más sofisticados como JDO.

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:

- JDBC (1) - Introducción

- JDBC (2) - JdbcTemplate

- JDBC (3) - Objetos

- ORM (1) - Hibernate

- ORM (2) - JPA

- Object/XML Mapping

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.

Temas: Java Spring
Juan Mellado, 3 Mayo, 2012 - 09:37

Spring FrameworkEl concepto de transacción es algo que cualquiera que haya trabajado con una base de datos debería comprender perfectamente. Se establece un punto de inicio, se realizan operaciones, y se termina consolidando las operaciones realizadas (con un commit), o deshaciéndolas (con un rollback). La transacción garantiza la atomicidad de las operaciones, o todo o nada.

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

- Transacciones (4) - Ejemplo

Una de las cosas que siempre me han gustado de esta parte es que basta con añadir la etiqueta @Transactional sobre un método para conseguir que su código se ejecute dentro de una transacción. Una de las cosas que nunca me han gustado de esta parte es que en algunos casos, si la configuración no es correcta, el código no se ejecuta dentro de una transacción, pero no se eleva ningún mensaje de advertencia o error ni se produce ninguna excepción.

La siguiente tanda de artículos estará dedicado al acceso a base de datos y el mapeo objeto relacional en general.

Temas: Java Spring
Juan Mellado, 1 Mayo, 2012 - 09:39

Spring FrameworkHacer pruebas de una aplicación tradicional que ataque una base de datos siempre ha sido algo problemático, y si no, al menos algo laborioso. En esta nueva tanda de artículos dentro de la serie dedicada a Spring se enumeran algunas de las características concretas que ofrece el framework para ayudar en la creación de pruebas unitarias, de integración, y su uso con JUnit:

- Testing (1) - Tests Unitarios

- Testing (2) - Tests de Integración

- Testing (3) - JUnit

Desde que se popularizó el término TDD (Test Driven Development), o sea, escribir y ejecutar primero el código de pruebas antes que el código de producción, parece que no es correcto hablar de desarrollo de sofware sin mencionarlo. ¿Y además un 100% de cobertura? Uhmm... eso implica hacer pruebas hasta para los getters y setters.

El siguiente tema de la serie abordará la gestión integrada de transacciones.