User:Chen Junyu/Prototyping/Lens based/Trim2/KINECT: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
No edit summary
Line 7: Line 7:
[[File:Time0000.jpg|800px|thumb|center|alt text]]
[[File:Time0000.jpg|800px|thumb|center|alt text]]
[[File:Time0043.jpg|800px|thumb|center|alt text]]
[[File:Time0043.jpg|800px|thumb|center|alt text]]
*Video
*Code
*Code
The code controls kinect to play certain photo by the distance between the position people stand to the camera.  
The code controls kinect to play certain photo by the distance between the position people stand to the camera.  
 
<code>
import SimpleOpenNI.*;
import SimpleOpenNI.*;
import java.awt.Color;
import java.awt.Color;
Line 21: Line 23:


float comZ; // Center of Mass Z
float comZ; // Center of Mass Z
//ARTYOM, change the values below according to the distance you want to use
//CHENJUNYU, change the values below according to the distance you want to use
float minZ = 100;
float minZ = 100;
float maxZ = 2500;
float maxZ = 2500;


//ARTYOM, change the value below depending on how many image files you have
//CHENJUNYU, change the value below depending on how many image files you have
int numImages = 30; // total number of images
int numImages = 44; // total number of images


PImage[] images = new PImage[numImages]; // the images will be stored in this list
PImage[] images = new PImage[numImages]; // the images will be stored in this list
Line 36: Line 38:
   //size(400,400);// use size "(displayWidth, displayHeight)" for fullscreen   
   //size(400,400);// use size "(displayWidth, displayHeight)" for fullscreen   
   //size(displayWidth, displayHeight);
   //size(displayWidth, displayHeight);
   size(256,256);//ARTYOM, change the values here too. Don't use values that are too big or you'll have performance issues. You can also try using size(displayWidth, displayHeight); (just uncomment the line above and comment this one)
   size(256,256);//CHENJUNYU, change the values here too. Don't use values that are too big or you'll have performance issues. You can also try using size(displayWidth, displayHeight); (just uncomment the line above and comment this one)


   // set frame background to black (this is the background you'll see in Present Mode)
   // set frame background to black (this is the background you'll see in Present Mode)
Line 85: Line 87:


   for (int i = 0; i < numImages; i++) {
   for (int i = 0; i < numImages; i++) {
//ARTYOM, change the filename according to the ones you have. I put my files inside folder data/export.
//CHENJUNYU, change the filename according to the ones you have. I put my files inside folder data/export.
     filename = "headtrack/" +nf(i, 3) + ".jpg";   
     filename = "headtrack/" +nf(i, 3) + ".jpg";   
     images[i] = loadImage(filename);
     images[i] = loadImage(filename);
Line 108: Line 110:
   kinect.deRegisterUser(curContext, userId);
   kinect.deRegisterUser(curContext, userId);
}
}
<code>

Revision as of 20:38, 13 April 2014

"Grandma"

  • SUMMARY

The first idea of the kinect project is to get photos of Chinese women born in the same year -1929 in different age as resource to make sequence scrubber . There are two reasons why I choose this year : one is that it was the year which my grandma born, and she passed away in the beginning of this year, therefore I took her photo as the last one in the sequence-which means the end of their generation ; another reason is as women born in late 20s, they have totally different experience as ours -- the Republic of China era to the People's Republic of China era, the the Great Leap Forward and 10-year cultural revolution ,most of them suffered at the first half of their life. To get these photos , I use Wiki Category to trace people born in the certain year . But there is a problem , the women I found from wiki , most of them are celebrities who live in the upper class . Since their face reflects their state of mind and events they encountered, the samples I got probably are too invariable. I would like to get more multifarious samples ,so I tried another way to search. By using Flickr as the target resource website, I got women's photos in different ages by keywords [ ages , grandma ] such as (30s, grandma) . The results I got here are much meaningful than using Wiki Category.

  • DISADVANTAGE

The results I got from Flickr were not so precise-their birth years were uncern , probably from 1910s to 1950s. The bigger time span lead the topic of this project to a more vague situation.

alt text
alt text
  • Video
  • Code

The code controls kinect to play certain photo by the distance between the position people stand to the camera. import SimpleOpenNI.*; import java.awt.Color; import java.util.Iterator;

SingleUserKinect kinect;

PVector userPosRealWorld = new PVector(); // 3d user position boolean USE_KINECT = false;


float comZ; // Center of Mass Z //CHENJUNYU, change the values below according to the distance you want to use float minZ = 100; float maxZ = 2500;

//CHENJUNYU, change the value below depending on how many image files you have int numImages = 44; // total number of images

PImage[] images = new PImage[numImages]; // the images will be stored in this list

// setup is executed once, when the program started void setup() {

 // size of the window
 //size(400,400);// use size "(displayWidth, displayHeight)" for fullscreen  
 //size(displayWidth, displayHeight);
 size(256,256);//CHENJUNYU, change the values here too. Don't use values that are too big or you'll have performance issues. You can also try using size(displayWidth, displayHeight); (just uncomment the line above and comment this one)
 // set frame background to black (this is the background you'll see in Present Mode)
 frame.setBackground(new Color(0, 0, 0));
 // load the image sequence
 loadImageSequence();
 // user SingleUserKinect for tracking.
 kinect = new SingleUserKinect(this);

}

// draw is repeatedly executed, as fast as possible, or according to frameRate setting void draw() {

 // update user position
 kinect.update();
 // set center of mass to the maximum value
 float comZ = maxZ;
 // if we are tracking a user, get the position of his Center of Mass  
 if (kinect.trackedUserId != 0) { 
   kinect.getCoM(userPosRealWorld);    
   comZ = userPosRealWorld.z;
   if (comZ > maxZ) {
     comZ = maxZ;
   }
   else if (comZ < minZ) {
     comZ = minZ;
   }
 }


 // map x position to an image in the sequence
 float maxRange = maxZ - minZ; // total range
 int slice_size = (int)maxRange/images.length; //1000 / 100 = 10
 float z = map(comZ, minZ, maxZ, 0, maxRange); // map center of mass to a positive range
 int slice = (int)(z / slice_size); //0 / 10 = 0
 if (slice >= numImages) slice = numImages-1;
 println("slice " + slice);
 // draw the image
 image(images[slice], 0, 0, width, height);

}

// load the image sequence void loadImageSequence() {

 String filename = "";
 for (int i = 0; i < numImages; i++) {

//CHENJUNYU, change the filename according to the ones you have. I put my files inside folder data/export.

   filename = "headtrack/" +nf(i, 3) + ".jpg";   
   images[i] = loadImage(filename);
 }

}


// ----------------------------------------------------------------- // SimpleOpenNI user events // ----------------------------------------------------------------- // onNewUser is triggered when the kinect registers a new user void onNewUser(SimpleOpenNI curContext, int userId) {

 // let our SingleUserKinect Class take care of this
 kinect.registerNewUser(curContext, userId);

}

// onLostUser is triggered when the kinect deregisters a user void onLostUser(SimpleOpenNI curContext, int userId) {

 // let our SingleUserKinect Class take care of this
 kinect.deRegisterUser(curContext, userId);

}