Stap 11: Processing Script en Kinect bibliotheken
Allereerst moeten we de kinect libraries voor verwerking downloaden (opzoeken op google) Zorg ervoor dat u het installatiepunt bijhouden voor kinect bibliotheek in uw bibliotheek van de verwerking. Wanneer kunt u de demo voor punt tracking weet u dat het correct op uw systeem is geïnstalleerd. Ook moeten we de Eliza chat bot bibliotheek installeren, dit komt met een testpakket.
Wilt u uw eigen achtergrondafbeelding voor uw programma maken en noem het bg1.jpeg
U moet ook uw eigen Eliza script ive noemde het zoiets als newscript.txt maken, maar noem het wat je wilt, of unhash van de code van de steekproef van het internet als u gewoon wilt gebruiken van het origineel.
U kunt ook commentaar uit punt volgen en toegang skelet tracking modus naar interactief met meerdere deelnemers.
Verwerking van Code:
importeren van processing.serial.*;
/ * Een beetje voorbeeld met behulp van de klassieke "Eliza" program.
Eliza is opgesteld als een Processing library, gebaseerd op de java-broncode door Charles Hayden: http://www.chayden.net/eliza/Eliza.html
Het standaardscript die Eliza van gedrag bepaalt kan worden veranderd met de readScript() functie. Intructions om de scriptbestand te wijzigen zijn hier beschikbaar: http://www.chayden.net/eliza/instructions.txt *
/ max is 67 op sweep
importeren van codeanticode.eliza.*; Seriële myport; int dummy = 8; int sendx = 0; Seriële myport2; nek motor int drawskeleton = 0; 1 / 0 = int-lastsentx-1; int lastsenty =-1;
int archsenty =-1; int archsentx =-1;
int eyecount = 0; gebruikt voor de bemonstering van verkeer
Eliza eliza; PFont lettertype; String elizaResponse, humanResponse; Booleaanse showCursor; int lastTime; PImage bg1a;
int closestValue; int closestX; int closestY; int lastcx; int lastcy;
float targx; float targy;
eenvoudige openni importeren SimpleOpenNI.*;
float-globx, globy;
float oldglobx, oldgloby;
SimpleOpenNI context; [kleur]
userClr = nieuwe kleur [] {color(255,0,0),
Color(0,255,0),
Color(0,0,255),
Color(255,255,0),
Color(255,0,255),
Color(0,255,255)
}; PVector com = nieuwe PVector();
PVector com2d = nieuwe PVector();
einde simpleopenni
void setup {size(1200, 786);
println(sketchPath);
si context = nieuwe SimpleOpenNI(this);
if(context.isInit() == false) {//println ("kan niet init SimpleOpenNI, misschien de camera is niet aangesloten!");
Exit();
terugkeer;
} / / enable depthMap generatie context.enableDepth();
skelet generatie voor alle gewrichten inschakelen
context.enableUser();
Background(200,0,0);
einde si bg1a=loadImage("bg1.jpg");
println(Serial.List());
myport = nieuwe Serial (dit, Serial.list()[5],9600);
myport2 = nieuwe Serial (dit, Serial.list()[???],9600);
Wanneer Eliza wordt geïnitialiseerd, een standaardscript ingebouwd in de
bibliotheek wordt geladen. Eliza = nieuwe Eliza(this);
Een nieuw script kan worden geladen door de readScript functie.
Het kan duren lokale en externe bestanden.
eliza.readScript("scriptnew.txt");
eliza.readScript ("http://chayden.net/eliza/script");
Ga terug naar het standaardscript, dit gebruiken: / / eliza.readDefaultScript();
lettertype = 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);
Als (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;
voor (int hangoor = 0; hangoor < 100; hangoor ++) {println ("zou ingaan op oog TWITCHING");
myport.write(201);
lastcx = closestX;
lastcy = closestY;
} else {}
if(ABS(lastsenty-archsenty) > 45 & & abs(lastsentx-archsentx) < 45) {println ("GO BACK TO beweging wil");
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);
} Als (sendx > 9 & & lastsentx! = sendx) {//println ("verzendende posities van de hals" + sendx);
if(ABS(lastsentx-SendX) > 35) eyecount = 145;
myport.write(SendX);
UNCOMMENT voor het bijhouden van de mensen lastsentx = sendx;
} //println ("nek y:"+int(globy));
if(Random(10) > 4) {int outy=70+int(globy);
if(outy>200) outy = 200;
println("outy="+outy);
HIER IS de regel verzenden de nek Y-coördinaten if(lastsenty!=outy) {if(abs(lastsenty-outy) > 35) eyecount = 145;
myport.write(outy);
println("OUTY:"+outy);
lastsenty = outy;
} }
DUMMY vegen begint hier if(random(10) > 2) {/ / myport.write(dummy);
println("dummy:"+dummy);
Dummy ++;
if(dummy>170) dummy = 9;
myport.write((70+dummy));
println("neckyyyyyyyy"+(70+dummy));
} //DUMMY SWEEP EINDIGT HIER
Fill(255);
beroerte (111);
tekst (elizaResponse, 30, 450, breedte - 40, hoogte);
Fill(0);
int t = millis();
Als (t - lastTime > 500) {showCursor =! showCursor;
lastTime = t;
} als tekst (showCursor) (humanResponse + '_', 30, 600, breedte - 40, hoogte);
anders tekst (humanResponse, 30, 600, breedte - 40, hoogte);
simpleopennidrawmethod();
closestpixdrawmethod();
}
VOID closestpixdrawmethod() {closestValue = 8000;
context.update();
de diepte-matrix ophalen met de kinect int [] depthValues = context.depthMap();
voor elke rij in de diepte afbeelding voor (int y = 0; y < 480; y ++) {}
elke pixel in de rij voor kijken (int x = 0 x < 640; x ++) {}
Trek de corresponderende waarde uit de diepte-array
int i = x + y * 640;
int currentDepthValue = depthValues [i];
Als die pixel het dichtst is hebben we gezien tot nu toe
Als (currentDepthValue > 0 & & currentDepthValue < closestValue) {}
Save zijn waarde closestValue = currentDepthValue;
en haar positie (zowel X en Y-coördinaten) opslaan
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);
de diepte-afbeelding op het scherm tekent
Image(kinect.depthImage(),0,0);
teken een rode cirkel overheen,
op de X- en Y-coördinaten geplaatst
we gered van de dichtstbijzijnde pixel. Fill(255,0,0);
ellips (closestX, closestY, 25, 25);
}
VOID keyPressed() {als ((key == ENTER) || (Key == Return)) {/ / println(humanResponse); //first zoeken naar trefwoorden
elizaResponse = eliza.processInput(humanResponse); println (">>" + elizaResponse); String [] = {elizaResponse} uit;
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) & & (sleutel! = CODED)) {}
Als de sleutel alfanumerieke, toe te voegen aan de tekenreeks
humanResponse = humanResponse + sleutel;
} else if ((key == BACKSPACE) & & (0 < humanResponse.length())) {char c = humanResponse.charAt(humanResponse.length() - 1);
humanResponse = humanResponse.substring (0, humanResponse.length() - 1); } }
VOID printElizaIntro() {String hello = Hello.";
elizaResponse = Hallo + "" + eliza.processInput(hello);
println (">>" + elizaResponse);
}
VOID simpleopennidrawmethod() {context.update();
//println ("gx ="+ globx +"GY =" + globy); tekenen van depthImageMap / / image(context.depthImage(),0,0); if(drawskeleton==1) image(context.userImage(),0,0); het skelet trekken als er beschikbare int [] userList = context.getUsers(); for (int i = 0; i
vertex(com2d.x-5,com2d.y);
hoekpunt (com2d.x + 5,com2d.y);
endShape(); Fill(0,255,100);
Text(integer.toString(UserList[i]),com2d.x,com2d.y);
} } } }
VOID drawSkeleton (int userId) {}
om de 3D-gezamenlijke gegevens / * PVector jointPos = nieuwe 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 (userId, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_NECK) context.drawLimb (userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_LEFT_SHOULDER); context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_LEFT_ELBOW); context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_ELBOW, SimpleOpenNI.SKEL_LEFT_HAND);
context.drawLimb (userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND);
context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO);
context.drawLimb (userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP); context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE); context.drawLimb (userId, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT);
context.drawLimb (userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE); context.drawLimb (userId, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT); }
}
// ----------------------------------------------------------------- // SimpleOpenNI events
VOID onNewUser (SimpleOpenNI curContext, int userId) {//println ("onNewUser - userId:" + userId); println ("\tstart skelet bijhouden"); curContext.startTrackingSkeleton(userId); }
VOID onLostUser (SimpleOpenNI curContext, int userId) {//println ("onLostUser - userId:" + userId);}
VOID onVisibleUser (SimpleOpenNI curContext, int userId) {///println ("onVisibleUser - userId:" + userId);}