Inicio | Apuntes breves | Virtualizar VisualSFM para Windows sobre Mac Os X

Virtualizar VisualSFM para Windows sobre Mac Os X

Jueves, 20 de Diciembre de 2012 15:47

vsfm win serverUno de los problemas que me estoy encontrando en el trabajo con SfM en Mac OsX es encontrar herramientas como VisualSFM que funcionen de forma adecuada en mi Macbook, ya que normalmente las uso en mi workstation con Ubuntu.

Dado que compilar VisualSFM en MacOsX me esta resultando ciertamente complicado, he decidido probar con la virtualización en una maquina virtual con Windows XP, ya que la instalación de VisualSFM es muy sencilla.

Recordar que VisualSFM es una herramienta de Structural for Motion, la cual nos permite crear modelos 3D en forma de nubes de puntos a partir de colecciones de imágenes 2D no ordenadas. VisualSFM se puede usar como herramienta de fotogrametría libre, ya que los modelos creados se pueden georeferenciar y por tanto dotar de unas dimensiones y contexto preciso. Estas herramientas están siendo cada vez más usadas en el campo de la documentación gráfica del patrimonio ya sea en procesos de conservación de bienes culturales, excavaciones arqueológicas o documentación de abrigos rupestres. El proceso de trabajo con esta herramienta no exige de planificación ni calibración de la cámara como es necesario en otras herramientas de fotogrametría, por lo que el trabajo es muy ágil. Desafortunadamente la instalación de VisualSFM esta muy orientada a Windows, aunque es posible instalarla en Linux como ya expliqué en otro artículo, pero en Mac Os X , a pesar de los esfuerzos de Iván R. Murillo para realizar una distribución compilable para Mac Os X, personalmente he tenido bastantes dificultades para su instalación y por ahora me he decantado por la virtualización de VisualSFM en un entorno Windows, para poderlo tener disponible en mi Macbook.

Instalar VisualSFM en Windows

La instalación es muy simple, sólo hay que descargar el ejecutable desde la web de Changchang y adicionalmente descargar las herramientas PMVS y CMVS de Yasutaka, ya compilados, para ello podemos acudir a la web de Pierre Moulon, elegir el tipo de sistema, y descargar cmvs.exe, genOption.exe, pmvs2.exe y pthread.dll que hay que ubicar simplemente junto al ejecutable de VisualSFM.exe.

Virtualizar VisualSFM

Sin embargo existe un problema bastante grave para el uso de de VisualSFM en un entorno virtualizado, es el derivado del uso del procesador de nuestra tarjeta gráfica, ya que VisualSFM usa SiftGPU que como su nombre indica usa GPU (graphics processing unit) para el proceso de detección de puntos comunes, keypoints o características comunes entre imágenes, y el problema es que las características GPU de nuestra targeta gráfica no suelen ser accesibles desde los entornos virtualizados.

Esta situación es difícil de solucionar, por lo que la única alternativa es abandonar el uso de GPU y pasar a CPU, o sea, a cargar el proceso gráfico a nuestro procesador, situación bastante poco óptima, pero es la única alternativa. Para ello necesitamos la herrmienta Siftwin32.exe que podemos descargar ya compilada de diversos proyectos en la red como SFMH1 o PYMOSAICK. Una vez descargado simplemente ubicamos el ejecutable junto a VisualSFM.exe y desactivamos SiftGPU en Tools->Enable GPU->Disable SiftGPU y Tools->Enable GPU->Match Using GLSL , para hacerlo permanente podemos ir al archivo .ini con las configuraciones y definir:

param_use_siftgpu 0
param_use_siftmatchgpu 0

Es muy importante que el directorio donde hayamos guardado los ejecutables de VisualSFM no posea espacios como es el habitual “Archivos de Programa” ya que de lo contrario la localización de Siftwin32.exe no se hará correctamente y VisualSFM intentará usar GPU

De esta forma podemos usar VisualSFM en un entorno sin GPU, aunque el proceso de detección de puntos en común entre imágenes será extremadamente lento.

Sin embargo existe una alternativa a este proceso por el cual vamos a levantar a SfitGPU en Mac Os X como un servidor, para poder acceder a dicho servicio desde la maquina virtual, de esta forma podemos aprovechar las capacidades GPU de la máquina host desde el entorno virtual.

Para ello hay seguir los siguientes pasos:

Instalar SiftGPU en Mac Os X

Antes de instalar SiftGPU necesitamos instalar la librería de imagen DevIL, GLEW y opcionalmente GLUT y Libjpeg de la que depende DevIL:

Para instalar GLEW podemos hacerlo usando Darwin Ports de forma que:

sudo port install glew

Para instalar Libjpeg

http://www.ijg.org/files/jpegsrc.v8d.tar.gz

Una vez descomprimida hacemos simplemente:

./configure
  make
  sudo make install

A continuación ya podemos descargar y compilar DevIL

http://downloads.sourceforge.net/project/openil/DevIL/1.7.8/DevIL-1.7.8.tar.gz

Tras descomprimir debemos acudir al archivo:

devil-1.7.8/src-ILU/ilur/ilur.c

Y ajustar la ruta:

#include <malloc.h>

a

#include <sys/malloc.h>

Una vez realizada esta operación procedemos a compilar con las opciones ILU y ILUT:

./configure --enable-ILU --enable-ILUT
  make
  sudo make install

Ahora ya podemos descargar e instalar SiftGPU:

http://wwwx.cs.unc.edu/~ccwu/cgi-bin/siftgpu.cgi

Pero antes de compilar necesitamos realizar algunos ajustes que he tomado parcialmente del archivo makesiftgpu del citado proyecto de Iván

Para ello abrimos makefile en la raíz del directorio SiftGPU y activamos:

  siftgpu_enable_server = 1
  siftgpu_prefer_glut = 1

Y en "siftgpu_sse_options" cambiamos "-march=native" por "-march=core2", y finalmente en CFLAGS podemos borrar “-L/usr/lib64” aunque da igual, por que nos arrojará un warning pero compilará igual.

Tras compilar con un simple make, ya esta disponible en el directorio /SiftGPU/bin el binario server_siftgpu que podemos iniciar con, por ejemplo:

./server_siftgpu -server 7777

De esta forma tenemos iniciado el server SifttGPU.

Configurar VisualSFM con SiftGPU server

SiftGPU server visualSFMUna vez compilado correctamente SiftGPU en Mac Os X, acudimos a nuestra máquina virtual, arrancamos VisualSFM y accedemos a la opcion Tools > Enable GPU > Remote SfitGPU, de esta forma se nos abrirá un pequeño diálogo donde debemos especificar la IP de nuestro server SiftGPU, puerto y ciertos parámetros, de forma que por ejemplo tengamos:

192.168.1.5 7777 -fo -1

En la última versión de VisualSFM la V0.5.21 existe un bug con las conexiones al server SiftGPU, tras notificarlo a Changchang Wu, autor de VisualSFM ha corregido el error, que será solucionado en futuras versiones. Para acceder a la versión corregida (solo para Windows) debemos hacerlo a a través de la siguiente URL

http://homes.cs.washington.edu/~ccwu/vsfm/test/

x-rite Professional LED Lighting, DSLR Support and Accessories for Photo and Video BabelColor asociacion española de imagen cientifica y forense