Paso 11: Proceso de escritura y Kinect bibliotecas
En primer lugar tenemos que descargar las librerías de kinect para el procesamiento (búsquela en google) Asegúrese de instalar el punto de seguimiento para kinect biblioteca a la biblioteca de procesamiento. Cuando se puede ejecutar la demo para el seguimiento del punto de Sabe usted que está instalado correctamente en su sistema. También es necesario instalar la biblioteca de bot de chat de Eliza, este viene con un paquete de prueba.
Usted necesitará hacer su propia imagen de fondo para su programa y llame al bg1.jpeg
Usted también necesitará hacer su propia Eliza script he llamado algo así como newscript.txt pero lo llaman lo que desea, o unhash el código de ejemplo de internet, si desea utilizar el original.
También puede comentar un punto de acceso y seguimiento seguimiento de esqueleto modo interactivo con múltiples participantes.
Código de procesamiento:
Import processing.serial.*;
/ * Un pequeño ejemplo usando el clásico "Eliza" del programa.
Eliza fue compilada como una biblioteca de procesamiento, basada en el código fuente de java de Charles Hayden: http://www.chayden.net/eliza/Eliza.html
La secuencia de comandos predeterminado que determina el comportamiento de Eliza se puede cambiar con la función readScript(). Instrucciones para modificar el archivo de secuencia de comandos están disponibles aquí: http://www.chayden.net/eliza/instructions.txt *
max es 67 en barrido
Import codeanticode.eliza.*; Serie myport; maniquí de int = 8; int sendx = 0; Serie myport2; cuello motor int drawskeleton = 0; 1 / 0 int lastsentx =-1; int lastsenty =-1;
int archsenty =-1; int archsentx =-1;
int eyecount = 0; utilizado para el muestreo de movimiento
Eliza eliza; PFont fuente; Cadena elizaResponse, humanResponse; showCursor booleano; lastTime int; PImage bg1a;
int closestValue; int closestX; int closestY; int lastcx; int lastcy;
Float targx; Float targy;
openni simple importar SimpleOpenNI.*;
globx flotador, globy;
flotador oldglobx, oldgloby;
Contexto SimpleOpenNI; [color]
userClr = nueva color [] {color(255,0,0),
color(0,255,0),
color(0,0,255),
color(255,255,0),
color(255,0,255),
color(0,255,255)
}; Com PVector = nuevo PVector();
Com2d PVector = nuevo PVector();
simpleopenni final
void setup() {size(1200, 786);
println(sketchPath);
contexto si = nuevo SimpleOpenNI(this);
if(context.isInit() == false) {//println ("no init SimpleOpenNI, quizás la cámara no está conectada!");
Exit();
retorno;
} / / habilitar depthMap generación context.enableDepth();
habilitar la generación de esqueleto para todas las juntas
context.enableUser();
Background(200,0,0);
final si bg1a=loadImage("bg1.jpg");
println(serial.List());
myport = serie nueva (esto, Serial.list()[5],9600);
myport2 = nueva serie (esto, Serial.list()[???],9600);
Cuando Eliza se inicializa, un script por defecto integrado en el
se carga la biblioteca. Eliza = nuevo Eliza(this);
Un nuevo script se puede cargar a través de la función readScript.
Puede tomar local así como de archivos remotos.
eliza.readScript("scriptnew.txt");
eliza.readScript ("http://chayden.net/eliza/script");
Para volver a la secuencia de comandos predeterminado, utilice esto: / / eliza.readDefaultScript();
Font = loadFont("Rockwell-24.vlw");
textFont(font);
printElizaIntro();
humanResponse = "";
showCursor = true;
lastTime = 0; }
void draw() {while(myport.available() > 0) {int dat=myport.read();
println(""+DAT);
} eyecount ++;
println("EYECOUNT:"+eyecount);
Si (eyecount > = 30) {println("diffx="+abs(closestX-lastcx) + "diffy="+abs(closestX-lastcy));
println (archsenty + ""+ closestY +""+ archsentx +"" + lastsentx);
if(archsenty==-1) archsenty = lastsenty;
if(archsentx==-1) archsentx = lastsentx;
if(ABS(closestY-lastcy) < 30 & & abs(closestX-lastcx) < 30) {/ / archsenty = lastsenty;
archsentx = lastsentx;
para (lop int = 0; lop < 100; lop ++) {println ("iba a CRISPAR de ojo");
myport.Write(201);
lastcx = closestX;
lastcy = closestY;
} else {}
if(ABS(lastsenty-archsenty) > 45 & & abs(lastsentx-archsentx) < 45) {println ("GO BACK TO movimiento estaria");
lastcx = closestX;
lastcy = closestY;
myport.Write(202);
eyecount}} = 0;
} image(bg1a,0,0,width,height);
Background(102);
if(globx!=oldglobx) {sendx=int(abs(globx));
sendx=8+(sendx/8);
oldglobx = globx;
myport.Write(sendx);
} Si (sendx > 9 & & lastsentx! = sendx) {//println ("enviar posiciones de cuello" + sendx);
if(ABS(lastsentx-sendx) > 35) eyecount = 145;
myport.Write(sendx);
DESCOMENTE para seguimiento de personas lastsentx = sendx;
} //println ("cuello y:"+int(globy));
if(Random(10) > 4) {int outy=70+int(globy);
if(OUTY>200) outy = 200;
println("OUTY="+OUTY);
Aquí está la línea enviando el cuello Y coordina if(lastsenty!=outy) {if(abs(lastsenty-outy) > 35) eyecount = 145;
myport.Write(OUTY);
println("OUTY:"+OUTY);
lastsenty = outy;
} }
MANIQUÍ de barrido comienza aquí if(random(10) > 2) {/ / myport.write(dummy);
println("dummy:"+dummy);
dummy ++;
if(dummy>170) maniquí = 9;
myport.Write((70+dummy));
println("neckyyyyyyyy"+(70+dummy));
} //DUMMY BARRIDO TERMINA AQUÍ
Fill(255);
movimiento (111);
texto (elizaResponse, 30, ancho 450, - 40, altura);
Fill(0);
int t = millis();
Si (t - lastTime > 500) {showCursor =! showCursor;
lastTime = t;
} Si (showCursor) texto (humanResponse + '_', 30, ancho 600, - 40, altura);
otro texto (humanResponse, 30, ancho 600, - 40, altura);
simpleopennidrawmethod();
closestpixdrawmethod();
}
void closestpixdrawmethod() {closestValue = 8000;
context.Update();
obtener la matriz de la profundidad de la kinect int [] depthValues = context.depthMap();
para cada fila de la imagen profundidad (int y = 0 y < 480; y ++) {}
mirar cada píxel de la fila (int x = 0; x < 640; x ++) {}
Saque el valor correspondiente de la matriz de profundidad
int i = x + y * 640;
int currentDepthValue = depthValues [i];
Si píxel es el más cercano que hemos visto hasta ahora
Si (currentDepthValue > 0 & & currentDepthValue < closestValue) {}
guardar su valor closestValue = currentDepthValue;
y guardar su posición (coordenadas X e Y)
closestX = x; closestY = y;
}}} float scfac = 67.0 / 640;
globx =(closestX*scfac) *.7;
targy =(closestY*scfac) * 3.2;
Globy=Globy+((targy-Globy)/8);
Globy = targy;
/ / println(globx);
dibujar la imagen de profundidad en la pantalla
Image(Kinect.depthImage(),0,0);
dibuja un círculo rojo sobre ella,
situado en las coordenadas X e Y
nos salvó del píxel más cercano. Fill(255,0,0);
elipse (closestX, closestY, 25, 25);
}
void keyPressed() {si ((key == ENTER) || (Key == Return)) {/ / println(humanResponse); //first análisis de palabras clave
elizaResponse = eliza.processInput(humanResponse); println (">>" + elizaResponse); String [] a = {elizaResponse};
saveStrings("/Users/carlstrathearn/Desktop/test.txt",out);
Delay(10);
println(sketchPath+"/Data/applescriptbridge.app");
Open(sketchPath+"/Data/applescriptbridge.app");
myport.Write(1);
humanResponse = "";
} else if ((key > 31) & & (tecla! = codificado)) {}
Si la clave es alfanumérica, agregar a la cadena
humanResponse = humanResponse + clave;
} else if ((key == BACKSPACE) & & (0 < humanResponse.length())) {char c = humanResponse.charAt(humanResponse.length() - 1);
humanResponse = humanResponse.substring (0, humanResponse.length() - 1); } }
void printElizaIntro() {Hola cadena = "Hola";
elizaResponse = Hola + "" + eliza.processInput(hello);
println (">>" + elizaResponse);
}
void simpleopennidrawmethod() {context.update();
//println ("gx ="+ globx +"GY =" + globy); llamar depthImageMap / / image(context.depthImage(),0,0); image(context.userImage(),0,0) de if(drawskeleton==1); dibujar el esqueleto si es disponible int [] lista de usuarios = context.getUsers(); para (int i = 0; i
Vertex(com2d.x-5,com2d.y);
vértice (com2d.x + 5,com2d.y);
endShape(); Fill(0,255,100);
Text(Integer.ToString(userList[i]),com2d.x,com2d.y);
} } } }
void drawSkeleton (int id) {}
para obtener los datos conjuntos 3d / * PVector jointPos = new PVector(); context.getJointPositionSkeleton(userId,SimpleOpenNI.SKEL_NECK,jointPos);
println(jointPos); */ //
println(SimpleOpenNI.SKEL_HEAD);
if(Random(100) > 97) {PVector jointPos = new PVector(); context.getJointPositionSkeleton(userId,SimpleOpenNI.SKEL_HEAD,jointPos);
println(jointPos.x);
println(jointPos.y);
println(jointPos.z);
globx=jointPos.x;
Globy=jointPos.y;
}
if(drawskeleton==1) {context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_NECK), context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_LEFT_SHOULDER) context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_LEFT_ELBOW); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_ELBOW, SimpleOpenNI.SKEL_LEFT_HAND);
context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND);
context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO);
context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT);
context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE); context.drawLimb (ID de usuario, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT); }
}
// ----------------------------------------------------------------- // SimpleOpenNI events
void onNewUser (SimpleOpenNI curContext, int id) {//println ("onNewUser - ID de usuario:" + userId); println ("\tstart seguimiento de esqueleto"); curContext.startTrackingSkeleton(userId); }
void onLostUser (SimpleOpenNI curContext, int id) {//println ("onLostUser - ID de usuario:" + usuario);}
void onVisibleUser (SimpleOpenNI curContext, int id) {///println ("onVisibleUser - ID de usuario:" + usuario);}