Étape 11 : Les bibliothèques de Script de traitement et Kinect
D’abord il faut télécharger les bibliothèques de kinect à la transformation (chercher sur google) Assurez-vous que vous installez le point de suivi pour kinect bibliothèque dans votre bibliothèque de traitement. Vous pouvez exécuter la démo pour le point de suivi vous savez qu'il est correctement installé sur votre système. Nous avons besoin également d’installer la bibliothèque de bot de tchat Eliza, cela vient avec un paquet de test.
Vous devrez faire votre propre image d’arrière-plan pour votre programme et appelez-le bg1.jpeg
Vous devrez également faire votre propre Eliza script ive appelé quelque chose comme newscript.txt, mais appeler ce que vous voulez, ou unhash l’exemple de code internet si vous souhaitez simplement utiliser l’original.
Vous pouvez aussi commenter point accès et suivi le mode de suivi squelette à interactive avec plusieurs participants.
Code de traitement :
Import processing.serial.* ;
/ * Un petit exemple avec la classique « Eliza » du programme.
Eliza a été compilée en tant que bibliothèque de traitement, basée sur le code source java de Charles Hayden : http://www.chayden.net/eliza/Eliza.html
Le script par défaut qui détermine le comportement d’Eliza peut être modifié avec la fonction readScript(). Intructions pour modifier le fichier de script sont disponibles ici : http://www.chayden.net/eliza/instructions.txt *
/ max est de 67 sur le coupe-bise
Import codeanticode.eliza.* ; Serial myport ; int factice = 8 ; int sendx = 0 ; Série myport2 ; cou moteur int drawskeleton = 0 ; 1 / 0 int lastsentx =-1 ; int lastsenty =-1 ;
int archsenty =-1 ; int archsentx =-1 ;
int eyecount = 0 ; utilisée pour l’échantillonnage de mouvement
Eliza eliza ; PFont polices ; Chaîne elizaResponse, humanResponse ; showCursor booléenne ; lastTime int ; Bg1a Byte ;
int closestValue ; int closestX ; int closestY ; int lastcx ; int lastcy ;
float targx ; flotteur targy ;
openni simple import SimpleOpenNI.* ;
flotteur globx, globy ;
flotteur oldglobx, oldgloby ;
SimpleOpenNI contexte ; [couleur]
userClr = new 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 = new PVector() ;
PVector com2d = new PVector() ;
fin simpleopenni
void setup() {size(1200, 786) ;
println(sketchPath) ;
contexte de tr = new SimpleOpenNI(this) ;
if(Context.isInit() == false) {//println ("Can' init SimpleOpenNI, peut-être la caméra n’est pas connectée!") ;
Exit() ;
retour ;
} / / enable depthMap génération context.enableDepth() ;
activez la génération squelette pour tous les joints
context.enableUser() ;
Background(200,0,0) ;
fin si bg1a=loadImage("bg1.jpg") ;
println(Serial.List()) ;
myPort = nouvelle série (cela, Serial.list()[5],9600) ;
myport2 = nouvelle série (cela, Serial.list()[???],9600) ;
Lorsque Eliza est initialisée, un script par défaut intégré dans le
bibliothèque est chargée. Eliza = new Eliza(this) ;
Un nouveau script peut être chargé via la fonction readScript.
Il peut prendre local ainsi que des fichiers à distance.
eliza.readScript("scriptnew.txt") ;
eliza.readScript ("http://chayden.net/eliza/script") ;
Pour revenir au script par défaut, utilisez ceci: / / eliza.readDefaultScript() ;
police = 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 ;
pour (lop int = 0; lop < 100 ; lop ++) {println ("irait en contraction oeil") ;
myPort.Write(201) ;
lastcx = closestX ;
lastcy = closestY ;
} else {}
if(ABS(lastsenty-archsenty) > 45 & & abs(lastsentx-archsentx) < 45) {println ("puissent-ils GO BACK TO mouvement") ;
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 (« envoi cou positions » + sendx) ;
if(ABS(lastsentx-SendX) > 35) eyecount = 145 ;
myPort.Write(SendX) ;
Décommentez la ligne suivante pour la suivi des personnes lastsentx = sendx ;
} //println (« cou y:"+int(globy)) ;
if(Random(10) > 4) {int outy=70+int(globy) ;
if(outy>200) outy = 200 ;
println("outy="+outy) ;
ICI est la ligne envoie le cou coordonnées Y if(lastsenty!=outy) {if(abs(lastsenty-outy) > 35) eyecount = 145 ;
myPort.Write(outy) ;
println("outy:"+outy) ;
lastsenty = outy ;
} }
DUMMY SWEEP STARTS HERE if(random(10) > 2) {/ / myport.write(dummy) ;
println("dummy:"+Dummy) ;
mannequin ++ ;
if(dummy>170) mannequin = 9 ;
myPort.Write((70+Dummy)) ;
println("neckyyyyyyyy"+(70+Dummy)) ;
} //DUMMY BALAYAGE SE TERMINE ICI
Fill(255) ;
accident vasculaire cérébral (111) ;
texte (elizaResponse, 30, largeur 450, - 40, hauteur) ;
Fill(0) ;
int t = millis() ;
Si (t - lastTime > 500) {showCursor =! showCursor ;
lastTime = t ;
} Si texte (showCursor) (humanResponse + « _ », 30, largeur 600, - 40, hauteur) ;
autre texte (humanResponse, 30, largeur 600, - 40, hauteur) ;
simpleopennidrawmethod() ;
closestpixdrawmethod() ;
}
void closestpixdrawmethod() {closestValue = 8000 ;
Context.Update() ;
obtenir le tableau de profondeur de la kinect int [] depthValues = context.depthMap() ;
pour chaque ligne de l’image de profondeur pour (int y = 0; y < 480; y ++) {}
Regardez chaque pixel dans la ligne correspondant (int x = 0; x < 640; x ++) {}
Tirez la valeur correspondante du tableau de profondeur
int i = x + y * 640 ;
int currentDepthValue = depthValues [i] ;
Si ce pixel est le plus proche de vous, nous avons vu jusqu'à présent
Si (currentDepthValue > 0 & & currentDepthValue < closestValue) {}
vous économisez sa valeur closestValue = currentDepthValue ;
et conserver sa position (coordonnées X et Y)
closestX = x ; closestY = y ;
scfac flotteur}}} = 67,0 / 640 ;
globx =(closestX*scfac) *.7 ;
Targy =(closestY*scfac) * 3.2 ;
Globy=Globy+((Targy-Globy)/8) ;
Globy = targy ;
/ / println(globx) ;
dessiner l’image de la profondeur à l’écran
image(Kinect.depthImage(),0,0) ;
Tracez un cercle rouge dessus,
positionné aux coordonnées X et Y
Nous avons économisé du pixel le plus proche. Fill(255,0,0) ;
ellipse (closestX, closestY, 25, 25) ;
}
void keyPressed() {si ((key == ENTER) || (Key == Return)) {/ / println(humanResponse) ; //first analyse des mots-clés
elizaResponse = eliza.processInput(humanResponse) ; println (">>" + elizaResponse) ; String [] out = {elizaResponse} ;
saveStrings("/Users/carlstrathearn/Desktop/test.txt",out) ;
Delay(10) ;
println(sketchPath+"/Data/applescriptbridge.app") ;
Open(sketchPath+"/Data/applescriptbridge.app") ;
myPort.Write(1) ;
humanResponse = "" ;
} ElseIf ((key > 31) & & (touche! = CODED)) {}
Si la clé est alphanumérique, ajoutez-le à la chaîne
humanResponse = humanResponse + touche ;
} ElseIf ((key == BACKSPACE) & & (0 < humanResponse.length())) {char c = humanResponse.charAt(humanResponse.length() - 1) ;
humanResponse = humanResponse.substring (0, humanResponse.length() - 1) ; } }
void printElizaIntro() {chaîne Bonjour = « Bonjour. » ;
elizaResponse = Bonjour + "" + eliza.processInput(hello) ;
println (">>" + elizaResponse) ;
}
void simpleopennidrawmethod() {context.update() ;
//println (« gx = « + globx + » GY = "+ globy) ; dessiner des depthImageMap / / image(context.depthImage(),0,0) ; if(drawskeleton==1) image(context.userImage(),0,0) ; dessiner le squelette s’il est disponible int [] userList = context.getUsers() ; pour (int i = 0; i
vertex(com2d.x-5,com2d.y) ;
vertex (com2d.x + 5,com2d.y) ;
endShape() ; Fill(0,255,100) ;
Text(Integer.ToString(UserList[i]),com2d.x,com2d.y) ;
} } } }
void drawSkeleton (int userId) {}
pour obtenir les données 3d mixtes / * 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 (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 (nom d’utilisateur, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND) ;
context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO) ;
context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT) ;
context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE) ; context.drawLimb (nom d’utilisateur, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT) ; }
}
// ----------------------------------------------------------------- // SimpleOpenNI events
void onNewUser (SimpleOpenNI curContext, userId int) {//println ("onNewUser - nom d’utilisateur:" + userId) ; println ("\tstart suivi le squelette") ; curContext.startTrackingSkeleton(userId) ; }
void onLostUser (SimpleOpenNI curContext, userId int) {//println ("onLostUser - nom d’utilisateur:" + userId);}
void onVisibleUser (SimpleOpenNI curContext, userId int) {///println ("onVisibleUser - nom d’utilisateur:" + userId);}