Archivo de la etiqueta: Computer vision

Sobre las aguas

Hablando un día en L ´estruch sobre una idea que trataba sobre la lluvía se nos ocurrió experimentar con el sensor Kinect recién hackeado, Kinect Core Vision ( desarrollada entonces por el amable Patricio González Vivo http://www.patriciogonzalezvivo.com/blog/?p=364 ), TUIO y Processing. Muy divertido y relajante 😉 logramos este suelo interactivo.

Los primeros pasos de este experimento estuvieron en probar las comunicaciones serial entre OpenNi, TUIO y Jitter.

Después pasamos a experimentar con la App de Patricio que la podeis descargar en GitHub (https://github.com/patriciogonzalezvivo/KinectCoreVision).

kinectcore1kinectcoreProcessing Sketch

 
import TUIO.*;
TuioProcessing tuioClient;

// these are some helper variables which are used
// to create scalable graphical feedback
float cursor_size = 15;
float object_size = 60;
float table_size = 760;
float scale_factor = 1;
PFont font;

void setup()
{
//size(screen.width,screen.height);
size(640,480);
noStroke();
fill(0);

loop();
frameRate(30);
//noLoop();

hint(ENABLE_NATIVE_FONTS);
font = createFont(“Arial”, 18);
scale_factor = height/table_size;

// we create an instance of the TuioProcessing client
// since we add “this” class as an argument the TuioProcessing class expects
// an implementation of the TUIO callback methods (see below)
tuioClient = new TuioProcessing(this);
}

// within the draw method we retrieve a Vector (List) of TuioObject and TuioCursor (polling)
// from the TuioProcessing client and then loop over both lists to draw the graphical feedback.
void draw()
{
background(255);
textFont(font,18*scale_factor);
float obj_size = object_size*scale_factor;
float cur_size = cursor_size*scale_factor;

Vector tuioObjectList = tuioClient.getTuioObjects();
for (int i=0;i<tuioObjectList.size();i++) {
TuioObject tobj = (TuioObject)tuioObjectList.elementAt(i);
stroke(0);
fill(0);
pushMatrix();
translate(tobj.getScreenX(width),tobj.getScreenY(height));
rotate(tobj.getAngle());
rect(-obj_size/2,-obj_size/2,obj_size,obj_size);
popMatrix();
fill(255);
text(“”+tobj.getSymbolID(), tobj.getScreenX(width), tobj.getScreenY(height));
}

Vector tuioCursorList = tuioClient.getTuioCursors();
for (int i=0;i<tuioCursorList.size();i++) {
TuioCursor tcur = (TuioCursor)tuioCursorList.elementAt(i);
Vector pointList = tcur.getPath();

if (pointList.size()>0) {
stroke(0,0,255);
TuioPoint start_point = (TuioPoint)pointList.firstElement();;
for (int j=0;j<pointList.size();j++) {
TuioPoint end_point = (TuioPoint)pointList.elementAt(j);
line(start_point.getScreenX(width),start_point.getScreenY(height),end_point.getScreenX(width),end_point.getScreenY(height));
start_point = end_point;
}

stroke(192,192,192);
fill(192,192,192);
ellipse( tcur.getScreenX(width), tcur.getScreenY(height),cur_size,cur_size);
fill(0);
text(“”+ tcur.getCursorID(), tcur.getScreenX(width)-5, tcur.getScreenY(height)+5);
}
}

}

// these callback methods are called whenever a TUIO event occurs

// called when an object is added to the scene
void addTuioObject(TuioObject tobj) {
println(“add object “+tobj.getSymbolID()+” (“+tobj.getSessionID()+”) “+tobj.getX()+” “+tobj.getY()+” “+tobj.getAngle());
}

// called when an object is removed from the scene
void removeTuioObject(TuioObject tobj) {
println(“remove object “+tobj.getSymbolID()+” (“+tobj.getSessionID()+”)”);
}

// called when an object is moved
void updateTuioObject (TuioObject tobj) {
println(“update object “+tobj.getSymbolID()+” (“+tobj.getSessionID()+”) “+tobj.getX()+” “+tobj.getY()+” “+tobj.getAngle()
+” “+tobj.getMotionSpeed()+” “+tobj.getRotationSpeed()+” “+tobj.getMotionAccel()+” “+tobj.getRotationAccel());
}

// called when a cursor is added to the scene
void addTuioCursor(TuioCursor tcur) {
println(“add cursor “+tcur.getCursorID()+” (“+tcur.getSessionID()+ “) ” +tcur.getX()+” “+tcur.getY());
}

// called when a cursor is moved
void updateTuioCursor (TuioCursor tcur) {
println(“update cursor “+tcur.getCursorID()+” (“+tcur.getSessionID()+ “) ” +tcur.getX()+” “+tcur.getY()
+” “+tcur.getMotionSpeed()+” “+tcur.getMotionAccel());
}

// called when a cursor is removed from the scene
void removeTuioCursor(TuioCursor tcur) {
println(“remove cursor “+tcur.getCursorID()+” (“+tcur.getSessionID()+”)”);
}

// called after each message bundle
// representing the end of an image frame
void refresh(TuioTime bundleTime) {
redraw();
}

Anuncios

Interactive fiber optic fabric / Fibra óptica interactiva

IMG_5390

“Curtain RasGas”:  Dispositivo de Interacción lumínica y visual basado en tecnologías de fibra óptica textil, comunicación inalámbrica con las azafatas del Stand y Programación exclusiva para RasGas. Se trata de una cortina que detecta la presencia de la gente y que emite una luz variable en función de la cantidad de asistentes que se acercan al Stand desde su exterior. Además se haya sincronizada con otro dispositivo que forma parte del Stand.

Localización:  Fachada Exterior Del Stand

Materiales Analógicos

* Cortina basada en Tecnología de Fibra Optica Textil.  Este tejido Luminoso emite una luz de color a lo largo de todo el tejido produciéndo un efecto lumínico espectacular.

Suponga que quiere sacar a la luz de la linterna a lo largo de un pasillo recto, simplemente apunte el haz de rectas por el pasillo y la luz viaja en línea recta, por lo que no hay problema. Si el pasillo tiene una curva en ella, puede colocar un espejo en la curva para reflejar la luz, si el pasillo es muy curvado múltiples espejos pueden alienar el haz de luz.

Esto es exactamente lo que sucede en una fibra óptica. La luz en un cable de fibra óptica viaja a través del pasillo rebotando constantemente. Siguen el principio de la reflexión lumínica.

Debido a que el revestimiento no absorbe toda la luz desde el núcleo, la luz de onda puede viajar grandes distancias.

Dossier Interacciones 1

Medidas Generales:  310 m2

* Implementación de Hardware para control de interacción con Diseño de Uniforme de Azafatas “SuitRasGas”:

– Micro-controlador Arduino.

– Circuitos integrados para Multiplexado del sistema lumínico e implementación en Micro-controlador, tales como los 4051,  que permiten ampliar las capacidades de toma de datos de los micro-controladores.

– Cámaras con tecnologías de IR: 4 Kinects

– Pc u ordenador contenedor de la aplicación y control de los datos generados.

Técnicas y Herramientas :

– Captación de asistentes por medio de materiales digitales.

– Envío de Datos por parte de Hardware detector al Microcontrolador.

– Envío de datos del Micro- controlador al contendor de los sistemas de control.

– Recepción de datos por parte de del contenedor que los usa para generar la interacción lumínica de aumentar la luminosidad de “Curtain RasGas” ante el mayor número de asistentes que se acercan, así cómo su proximidad.

-Programación de los datos recibidos para el control de la intensidad de la Luz desprendida por la Fibra Optica, a través de Max/msp dmx.

– Enttec

IMG_5849

tecnicas fibra optica

cortinas fibra optica

Max/msp Patches :

Captura de pantalla 2013-02-09 a las 19.12.28 Final wiew

Captura de pantalla 2013-02-09 a las 19.13.42Kinect patch that contro 7 stripes of Fiber Optic Fabric

kinect subpatch Kinect difference

dimmer control by max/mspDimmer control w/Max/msp