/** * * Doing some stuff with video. */ // port forwarding if you need it: // ssh -L 3306:localhost:3306 rtwomey@192.168.0.183 import hypermedia.video.*; import java.awt.Rectangle; import de.bezier.data.sql.*; import processing.video.*; import codeanticode.gsvideo.*; GSMovie myMovie; Gaggle agents; // ---- face tracking stuff ---- PImage img; PImage frameimg; PFont font; int filenum=257; int facenum=0; int frame=0; int id=0; int startframe=0; float moviepos=519.8; float lasttime=0; boolean newframe=false; // ---- interactivity ---- // // timing int last=0; boolean paused=false; String DETECTION_CASCADE=OpenCV.CASCADE_FRONTALFACE_DEFAULT; //String DETECTION_CASCADE=OpenCV.CASCADE_FRONTALFACE_ALT_TREE; //String DETECTION_CASCADE=OpenCV.CASCADE_PROFILEFACE; //String inpath="/Volumes/external/tera/Assets/Memory/20080630 930pm - breaking up with nichol/"; String inpath="/Volumes/Reservoir/Assets/Video/"; String fname="jumprope 20050223.mov"; //String fname="MOV09976.MPG"; String outpath="/Volumes/external/Faces/"+fname+"_"+DETECTION_CASCADE; // ---- database for face information ---- // MySQL msql; String user="bob"; String pass="password"; String database="looking"; String table="faces"; int video_id=-1; void setup() { //size(1280, 720, P2D); size(screen.width, screen.height); background(0); strokeWeight(2); noFill(); // Font and text drawing setup font = loadFont("HelveticaNeue-48.vlw"); textAlign(LEFT); // textAlign(CENTER,CENTER); rectMode(CORNER); fill(255); textFont(font, 24); myMovie = new GSMovie(this, savePath(inpath+"/"+fname)); myMovie.play(); println("frames "+myMovie.length()); agents = new Gaggle(this, myMovie.width, myMovie.height ); last=-1000; // connect do db for face-tracking msql = new MySQL( this, "localhost", database, user, pass ); if ( !msql.connect() ) { // connection failed ! println("connection failed!"); exit(); } // check if file exists in database video_id=-1; msql.query("SELECT * FROM media WHERE fname=\""+fname+"\""); while (msql.next()) { video_id=msql.getInt("id"); println(" video already in media table as video_id "+video_id); } if(video_id==-1) { // add video file to media table msql.execute("INSERT INTO media (name, fname, path, filetype, extension) VALUES (\""+ fname+"\", \""+fname+"\", \""+inpath+"\", \"video\", \"\")"); // check if file exists msql.query("SELECT * FROM media WHERE fname=\""+fname+"\""); while(msql.next()) { video_id=msql.getInt("id"); println(" video inserted into media table as video_id "+video_id); } } println("face detection cascade "+DETECTION_CASCADE); } void doFaceTracking() { myMovie.loadPixels(); frameimg = new PImage(myMovie.getSourceWidth(), myMovie.getSourceHeight(), RGB); arraycopy(myMovie.pixels, frameimg.pixels); frameimg.updatePixels(); int count = agents.checkframe(frameimg); if(count>0) { println("frame: "+str(myMovie.frame())+", "+count+" faces"); } else { // println(" no faces in frame."); } } //void movieEvent(GSMovie myMovie) { // myMovie.read(); //} void draw() { if((1 < myMovie.getSourceWidth() && 1 < myMovie.getSourceHeight()) && (!paused)) { // erase image and put curr video frame if(myMovie.available()) { myMovie.read(); doFaceTracking(); frame+=2; } if(frame>=myMovie.length()) { exit(); } else { background(0); // image(myMovie, 0, 0); if(frameimg!=null) image(frameimg, 0, 0); fill(64, 64, 64); text(myMovie.time()+" s\n"+myMovie.frame()+"\n"+myMovie.length()+" frames\n"+DETECTION_CASCADE, 50, myMovie.height+50); int linepos=round(map(myMovie.frame(), 0, myMovie.length(), 0, width)); stroke(128); line(linepos, height-50, linepos, height); noFill(); newframe=false; println(frame+" "+myMovie.frame()); myMovie.play(); myMovie.jump(frame); myMovie.pause(); // delay(100); } agents.relax(); } else { } } void saveSnapShot() { //myMovie.save(savePath("/Users/rtwomey/Desktop/images/"+vidName)); save("snapshot_"+str(myMovie.time())); } void mousePressed() { int fnum=round(float(mouseX)/float(width)*myMovie.length()); println("jumping to frame "+fnum); myMovie.jump(fnum); } void keyPressed() { if(key==' ') paused = (paused == true) ? false : true; if(key=='s') saveSnapShot(); } public void stop() { agents.stop(); super.stop(); }