Proyecteando

May 21, 2009 13:14

Voy a aprovechar que tengo el proyecto algo parado ahora mismo para hacer una entrada explicando un poco en detalle de qué va mi proyecto y cómo voy.

La idea de mi proyecto es que tengo que hacer una página web. Ése es el resumen xD
Primero vamos a ver para qué es la página web y luego cómo tengo que hacerla. Y como será un poco largo voy a poner un cut.


La web es para un grupo de trabajo de la Unión Europea, COGAIN (Communication by Gaze Interaction).
El COGAIN aglutina distintos grupos de investigación de universidades de la Unión Europea que trabajan en la comunicación mediante interacción de la mirada (traducción cutre mía). Un ejemplo sería manejar el ratón del ordenador con la mirada. De hecho, en la UPNa mis directores de proyecto tienen ya montado un sistema que hace justamente eso (y que llegué a probar, mola un montón xD).
Para este tipo de sistemas lo que necesitas básicamente es una cámara apuntando a la cara del usuario, un método de saber dónde está la pupila y una forma de traducir eso en una posición en la pantalla.

El problema que tiene esto del COGAIN es la heterogeneidad, la multitud de sistemas diferentes que engloba. Por ejemplo, el sistema de la UPNa funciona mediante una cámara con un filtro infrarrojo y dos leds a cada lado de la pantalla iluminando la cara. Como los leds también trabajan en el infrarrojo en la cámara se ven dos puntos de luz en el interior de la pupila (para el que no lo sepa la pupila refleja este tipo de luz). Antes de empezar a utilizar el sistema hay que calibrarlo: el programa muestra una serie de puntos en la pantalla y te pide que mires a cada uno durante unos segundos. Así puede hacerse una idea de cuándo tu ojo mira a qué punto.
Pero no es el único sistema. Otros funcionan con reconocimiento de la cara mediante pulsos de luz e intentando ver a dónde se dirige ésta. Otros (como el de la portada de COGAIN) van colgados de unas gafas y siguen así tu pupila. Otros funcionan con webcams. Otros tienen dos cámaras para comparar las dos imágenes. En fin, un montón.

Además las personas que se dedican a diseñar el sistema en sí no siempre son las mismas que hacen los programas para adivinar a dónde miras. Para la gente que diseña algoritmos de detección de la mirada es vital disponer de imágenes con las que trabajar, imágenes en las que sepan a dónde estaba mirando el usuario y con las que probar sus algoritmos.

Así que mi proyecto consiste en crear una web que funcione como un repositorio de imágenes. En esta web se podrán subir grupos de imágenes capturadas con uno de estos sistemas y la gente podrá bajarse esas imágenes. Evidentemente hay que proporcionar toda la información que se pueda sobre el sistema y la situación en la que se tomaron las imágenes para que sean lo más útiles posibles.

Por lo tanto lo primero que hicimos fue diseñar qué información se iba a guardar en la base de datos cuando alguien sube un grupo de imágenes. Cosas como el número de iluminadores, el tipo de luz con el que se trabaja, el número de cámaras, distancias del usuario a la pantalla, tamaño de ésta, etc etc. Hemos intentado hacer una base de datos flexible para que entre el mayor tipo de sistemas posible.

Y ahora vamos con el cómo xD

Para poder hacer todo lo dicho es necesario que la web esté programada en algún lenguaje dinámico (html es como un documento de word o un pdf, lo que se necesita aquí es algo que pueda cambiar sin tener que haciéndolo a mano xD) y con una base de datos en la que almacenar toda la información.
En este caso no hubo elección puesto que el servidor en el que se iba a alojar la página y los programas para realizarla estaban ya comprados: servidor con Windows Server 2003, base de datos MS SQL Server 2005 y para programar MS Visual Studio 2008.
Esto quiere decir que la tecnología con la que programo la web es ASP.NET. ASP quiere decir Active Server Pages y es lo que comentaba de un lenguaje dinámico para webs.
Lo de .NET es como un marco de Microsoft para sus tecnologías orientadas a internet y lo veréis seguramente en más sitios ya que lo han pegado a todo xD
ASP.NET funciona mediante controles: cada cosa que quieras que haga algo en la web es un control. Ejemplos: botones, paneles, calendarios...
Lo que quieres que haga el control específicamente (cada uno viene con algunas cosas de serie básicas) tienes que programarlo en C# (o también Visual Basic.NET xD) en lo que se llama código-detrás-de-los-archivos.

Un poco lío, ¿no? xDDDD
En el fondo no lo es tanto, pero de primeras sí. Además está el problema de las versiones. Ahora mismo C# y ASP.NET están en la versión 3.5, como .NET en general. Pero en las páginas oficiales casi toda la ayuda, ejemplos y documentación es para la anterior, la 2.0. Y son diferentes es bastantes cosas (al menos en mi experiencia xD).
Por otro lado los programas que mencionaba antes (Windows Server o WS, SQL Server y Visual Studio o VS) están todos en su versión 2008 disponible, pero en mi caso es un pequeño popurri que me ha causado algún que otro quebradero de cabeza.
Ah, se me olvidaba una pieza del puzzle, el IIS (Internet Information Services). Es el sistema de Microsoft de hacer que un ordenador sea un servidor y dé acceso a internet. El último es el 7.0 pero no está disponible para WS2003, así que en el servidor tengo la 6.0.
Toma ya xDDDD

Saliendo un poco de este follón, vamos a contar cómo voy y qué me queda.
La base de datos está ya diseñada. Como en el fondo se maneja desde la web no requiere mucho más.
La página web ya ha dado sus primeros pasos. El sistema de gestión de usuarios está, de forma que puedes registrarte, hacer login y logout.
Ahora estoy con subir las imágenes.

Aquí hay dos problemas: uno, subir los archivos en sí y dos, gestionar toda la información que tiene que introducir el usuario. La segunda parte está más bien terminada, mediante una guía paso a paso, con zonas que se activan dependiendo de lo que elijas y demás, de forma que a pesar de que son muchas cosas no resulta tan pesado como parecía en un principio.
El problema está en los archivos.
Las imágenes de un sistema de estos son las capturadas por la cámara, pongamos a 24 FPS (imágenes por segundo). Si una sesión con un sistema de estos dura un rato, en seguida tenemos muchísimas imágenes. Que en muchos casos no se comprimen porque la calidad es importante.
Como andar subiendo y bajando docenas o cientos de imágenes es bastante pesado decidimos que se subirían sólo archivos comprimidos.
El problema de esto es tener que subir un archivo de, digamos, 200 MB. Aquí vienen mis actuales quebraderos de cabeza.

Resulta que en ASP.NET sólo hay un control para subir archivos, y uno muy básico de hecho. Eliges el archivo y le das a subir. Y la página se queda cargando hasta que termina. Para empezar si el archivo va a tardar necesitamos que el usuario sepa cuánto y cómo va, porque pegarse 15 minutos con una página simplemente cargando sin saber qué pasa no es buena idea.
Por otro lado el control éste carga el archivo completo en un buffer, en memoria, y una vez que lo tiene entero, lo mueve al disco. Eso quiere decir que si hay, digamos, tres personas subiendo archivos de 300 megas necesitamos 900 megas de ram libres o alguno dará error. Otra vez, no es buena idea.

Así que me he dedicado a investigar programas o trozos de código que arreglen estos problemas, y he encontrado uno muy prometedor, NeatUpload.

Un inciso, voy a comentar cuál es mi entorno de desarrollo.

Para empezar programo las cosas en mi portátil. Tengo Windows Vista con IIS 7.0 y ASP.NET 3.5
Para no andar siempre trasteando con el servidor, tengo instalada una máquina virtual con Windows Server 2003, IIS 6.0 y ASP.NET 2.0 actualizado para que funcione el 3.5
Esta máquina virtual tiene los mismos parámetros, nombre, etc que el servidor final para que sea lo más parecido posible. Así, una vez lo programo en mi portátil lo paso a la máquina virtual y arreglo las diferencias. Una vez funciona ahí, copio los archivos al servidor y funciona.
En teoría.

Llevo casi una semana peleándome con el NeatUpload porque en mi ordenador y en la máquina virtual va como la seda, pero en el servidor final no. He acabado preguntándole al desarrollador y después de varias pruebas lo último que sé (es de hoy xD) es que tiene pinta de ser el firewall de la universidad.
El código necesita dos conexiones activas por archivo que se sube, una para subir el archivo y otra para mostrar el progreso. Parece ser que la conexión de la universidad con el exterior está evitando esto en algún momento. Por eso estoy ahora un poco parado, hay que ver si pueden mirarlo allí y si es eso.

Una vez acabado esto, ¿qué me queda?
El siguiente punto gordo son las búsquedas. Dado que hay muchos tipos distintos de sistemas necesitamos unas búsquedas que sean flexibles e intuitivas. Es posiblemente lo más difícil del proyecto, al menos hacerlo bien. Al menos en teoría no habrá estos problemas de código que estoy teniendo con las subidas.
Cuando termine eso habrá que ajustar todo porque la web estará prácticamente lista. Encontrar bugs, afinar controles, etc. También hay que realizar una guía de la web en la que explicar detalladamente qué significa cada campo, qué unidades se usan, qué convenciones etc.
Y ya sólo quedará el diseño de la misma.

Ah, el nombre de la web va a ser IGAIN (Images of Gaze Interaction).

En fin, ése es mi proyecto. Espero acabarlo en verano, no sé si en Junio (no creo), Julio o Agosto.
Si la cosa funciona bien y he hecho mi trabajo correctamente, la web debería de poder convertirse en un sitio de referencia para los grupos de investigación de sistemas de seguimiento de la mirada. Esperemos que sí :D

proyecto, universidad

Previous post Next post
Up