import processing.video.*; Capture iSight; int savedFrames = 0; int sequenceLength = 3; int currentSet = 0; int[] lastFrame; int MAX_FRAMES = 7; int sensitivity = 950000; float percentChange = 0.052; String exportPath; boolean doSave = false; void setup() { size( 640, 480, P3D ); iSight = new Capture(this, width, height, 24); lastFrame = new int[ width*height ]; frameRate(24); do exportPath = selectFolder("Select export folder"); while( exportPath == null ); fill(0,1); noStroke(); } void captureEvent( Capture cam ) { cam.read(); } void draw() { if( !doSave ) { if( countDifferences( iSight.pixels, lastFrame ) > width*height*percentChange ) { doSave = true; } rect(0,0,width,height); } if( doSave ) { image( iSight, 0, 0); save( exportPath+"/sequence-"+ nf(currentSet, 4 ) +"-"+ nf(savedFrames, 3) +".png" ); savedFrames++; if( countDifferences( iSight.pixels, lastFrame ) < width*height*percentChange || savedFrames == MAX_FRAMES ) { doSave = false; currentSet++; savedFrames = 0; } } for( int i = 0; i != lastFrame.length; i++ ) { lastFrame[i] = iSight.pixels[i]; } } int countDifferences( int[] p1, int[] p2 ) { if( p1.length != p2.length ) return -1; int ret = 0; for( int i = 0; i != p1.length; i++ ) { if( abs( abs( p1[i] ) - abs ( p2[i] ) ) > sensitivity ) ret++; } return ret; } void keyPressed() { if( key == ' ' ) { doSave = true; savedFrames = 0; } if( key == UP ) { percentChange += 0.01; percentChange = min( percentChange, 1.0f); } else if ( key == DOWN ) { percentChange -= 0.01; percentChange = max( percentChange, 0.0f); } if( key == RIGHT ) { sensitivity += 1000; sensitivity = min( sensitivity, 1100000); } else if ( key == LEFT ) { sensitivity -= 1000; sensitivity = max( sensitivity, 10000); } }