Realidad Aumentada utilizando Processing

Comenzando por definiciones anexo esta explicación de Realidad Aumentada del Blog de mi+d sin embargo para información más detallada recomiendo leer el artí­culo completo:

La Realidad Aumentada se basa en la existencia de una serie de dispositivos que son capaces de añadir información virtual a la información fí­sica ya existente. Es un enfoque distinto del de la Realidad Virtual, ya que no se sustituye la realidad física, si no que se complementa esta realidad fí­sica con otros datos o elementos. Esto permite crear interfaces de usuario muy ricas e intuitivas que, probablemente, en un futuro no muy lejano se extiendan y generalicen como interfaces ideales de muchos Sistemas Inteligentes.
Processing es un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en Java, de fácil utilización, y que sirve como medio para la enseñanza y producción de proyectos multimedia e interactivos de diseño digital. Fue iniciado por Ben Fry y Casey Reas a partir de reflexiones en el Aesthetics and Computation Group del MIT Media Lab. Puede ser utilizado tanto para aplicaciones locales así­ como aplicaciones para la web (Applets).

Pueden descargar Processing para Linux, Windows o Mac OS desde el siguiente enlace: http://processing.org/

Desde mi punto de vista una de las mejores cosas que tiene este lenguaje de programación es la comunidad activa de desarrolladores y multitud de librerias que te permiten desarrollar facilmente un proyecto de realidad aumentada. La imaginación y la creatividad es el lí­mite.

Para esta ejemplo hice uso de la librerí­a FLARToolKit (una variación) hecha por Bryan Chung. Como pueden ver gracias a esta librería se puede crear un excelente proyecto en pocas líneas de código. Este código invoca un archivo de video y uno de audio (ya que FLARToolKit no reproduce el audio del video por default) que se proyecta en un marcador impreso en una hoja de papel incluí­da en la libreria. Para capturar el video pueden hacer uso de su webcam o si lo prefieren también es posible conectar una cámara vía Firewire, USB o HDMI y Processing la detectará sin problemas.

import JMyron.*;
import processing.video.*;
import processing.opengl.*;
import pARToolKit.SimpleARToolKit;
import ddf.minim.*;

AudioPlayer player;
Minim minim;

SimpleARToolKit ar;
int capWidth, capHeight;
JMyron m;
Movie mov;
PImage img;

void setup() {
size(400, 300, OPENGL);
capWidth = 320;
capHeight = 240;
m = new JMyron();
m.start(capWidth,capHeight);
m.findGlobs(0);

minim = new Minim(this);
player = minim.loadFile(“audio.mp3”);

img = createImage(capWidth, capHeight, ARGB);
mov = new Movie(this, “video.mov”);
mov.stop();
mov.loop();
mov.read();
ar = new SimpleARToolKit(this, capWidth, capHeight);
ar.loadPattern(“patt.hiro”, 80, 0.0f, 0.0f);
ar.register(“showBox”);
noStroke();
fill(200,200,0);
rectMode(CENTER);
frameRate(15);
}

void draw() {
background(0);
m.update();
m.imageCopy(img.pixels);
img.updatePixels();
hint(DISABLE_DEPTH_TEST);
image(img,0,0,width,height);
hint(ENABLE_DEPTH_TEST);
if (ar.findMatch(img,100)) {
ar.showObject();
player.play();
mov.speed(1);
}
else{
player.pause();
mov.speed(0);
}
}

void showBox(SimpleARToolKit _a) {
pushMatrix();
translate(0,0,-20);
beginShape(QUADS);
texture(mov);
vertex(-60,-45,0,240);
vertex(60,-45,320,240);
vertex(60,45,320,0);
vertex(-60,45,0,0);
endShape();
popMatrix();
}

void movieEvent(Movie _m) {
_m.read();
}

void stop() {
m.stop();
super.stop();
}

Finalmente anexo el video del resultado en Windows (en estos dí­as lo voy a probar en Linux también), seguramente habrá algunas dudas en la instalación, configuración y demas pendientes, por favor sientanse en libertad de publicar sus comentarios, espero que encuentren interesante este tipo de herramientas y que pronto comiencen a desarrollar en Processing, saludos.

*Utilicé el video del grupo Quiero Club “Música”

Comentarios

comentarios

Desarrollador Web, promotor de la cultura digital y de la democracia en red. Viajero, patinador, gamer y blogger. @lacendi

Facebook

¡Envíanos un Mensaje!

Fields marked with an * are required