Mad Lips
I recreated the Mad Libs from my youth for the video age, which I titled Mad Lips.
… Continue Reading
I recreated the Mad Libs from my youth for the video age, which I titled Mad Lips.
… Continue Reading
Using the Kinect to paint was a fun exercise to start out with. I also enjoyed playing around with the brightest pixel.
For this assignment, I took some raw footage of the Egypt protests and ran it through a Processing sketch using the OpenCV face detection library to extract as many faces as possible. Next I blew up the faces until they were almost pixelated, then added back the sound.
Code:
import hypermedia.video.*;
import java.awt.Rectangle;
float last = millis();
float interval = 100;
int startTime;
int noFaces = 0;
int noFacesPrev = 0;
int dx = 0;
int dy = 0;
int dwidth = 400;
int dheight = 400;
OpenCV opencv;
// contrast/brightness values
int contrast_value = 0;
int brightness_value = 0;
void setup() {
size( 800,800 );
opencv = new OpenCV( this );
opencv.movie( "egypt.mov", 320, 240 ); // load movie file
opencv.cascade( OpenCV.CASCADE_FRONTALFACE_ALT ); // load detection description, here-> front face detection : "haarcascade_frontalface_alt.xml"
// print usage
println( "Drag mouse on X-axis inside this sketch window to change contrast" );
println( "Drag mouse on Y-axis inside this sketch window to change brightness" );
}
void stop() {
opencv.stop();
super.stop();
}
void draw() {
// grab a new frame
opencv.read();
opencv.contrast( contrast_value );
opencv.brightness( brightness_value );
// proceed detection
Rectangle[] faces = opencv.detect( 1.2, 2, OpenCV.HAAR_DO_CANNY_PRUNING, 40, 40 ); // 40,40 is the smallest size its looking for
// draw face area(s)
noFaces = faces.length;
if (faces.length >=1 && noFaces > noFacesPrev) {
startTime = millis();
println(startTime);
println(noFaces);
println(noFacesPrev);
noFacesPrev = noFaces;
}
if (faces.length == 0) { // if there is no face, start over
println("no face");
startTime = 0;
noFacesPrev = 0;
}
if (startTime > 0) {
println("started");
if(millis() - startTime >interval && (faces.length >=1)) {
for ( int i = 0; i= 800){
dy = dy+400;
dx = 0;
}
if (dy >= 800){
dy = 0;
dx = 0;
}
}
startTime=0;
println ("clock reset");
noFacesPrev=0;
}
}
}
// Changes contrast/brigthness values
void mouseDragged() {
contrast_value = (int) map( mouseX, 0, width, -128, 128 );
brightness_value = (int) map( mouseY, 0, width, -128, 128 );
}
void keyPressed()
{
if (key == 's') {
opencv.stop();
super.stop();
}
}
All My Life is an interactive data visualization that shares moments from the archives of my online life in the context of what else was going on in the world during the same time. First exhibited at the NYU ITP Winter Show, December 2010.
Social network updates are about sharing what’s current. What am I thinking NOW? What’s important to me NOW? But how will we feel looking back at all these brief moments we shared in a year, or five…or ten? Might it trigger the same feelings of nostalgia we used to encounter by looking through an old yearbook?
For this project, I’ve built an archival database sucking in feeds from 22 of my social destinations (Facebook, Foursquare, Twitter, Goodreads). In this data visualization, I re-visit shared moments from my past and attempt to contextualize them by referencing the music that was popular at the time and news headlines so as to try and trigger feelings of nostalgia by connecting real and virtual world events.
Since 1996, I have shared my thoughts, ideas, images and videos on a variety of social networks. Much of that is now lost. Some companies have gone bust and taken my activity on their site with them and there are other sites in which I’m no longer active (i.e. Jaiku). And although we are told that what we publish on the Internet lives on forever, it does not mean that we (the content creators) will always have access to it.
This project began as an effort to create an archive of my online activities and blossomed into a data visualization that tries to connect my personal musings to a larger societal context through music and news.
Each day we reveal special and ordinary moments in our lives with different groups of “friends.” Sometimes it’s a brief status update on Facebook, others it’s a link on Twitter, a picture on Flickr, or a place we’ve visited on Foursquare.
But these moments are ephemeral and – once shared – often forgotten.
And when these moments pass, they are difficult to re-visit. Some sites allow the user to view his or her history, but it is only accessible in a linear fashion or by keyword search. And for these systems, it can be hard to contextualize the memory.
My goal was to create a unique, comprehensive visualization to revisit these shared moments.
While this project is a particularly personal one, it brings up issues about privacy, data portability and online communications. My hope is that by seeing how I have chosen to archive my online life, others will follow suit.
This project was built using a MySQL database to archive all of my online activity as well as assorted PHP scripts, APIs for Billboard Magazine, Last.FM and TIME magazine. The program was written in Processing. Each time it runs, it selects a random 5% of updates stored in the database to display.
Special thanks to ITP professors Dan O’Sullivan, Dan Maynes Aminzade (aka Monzy) and resident researcher Craig Kapp for their incredible patience and support in bringing this project to fruition. Also to designer Noah Bell for guidance and inspiration in developing the visualization.
For this week’s assignment, we explored the information we create and edit with our keyboard through some basic keystroke logging and visualizations.
As anticipated, I learned a lot about what words I use the most often, which you can see on the left. The Processing sketch had some difficulty parsing a bunch of my text, which is why this list is so short. I tracked all my keystrokes for five days, and in that time I did a lot of coding. Most of the coding language doesn’t appear here because it wasn’t read by the program. I seem to use the word “I” a ton, so now I’m conscious of it. Thanks. There’s also a lot of “to” being thrown around, so I’m going to be more conscious of that as well.
After generating a list of words, I filtered them by selecting only those that appeared 10 or more times, which I then placed into a Processing visualization that you can see on the left. The actual sketch uses the Peasy cam library to create a 3D node of the words I used which can then be viewed from any angle. It’s a modified version of this sketch by Tiemen Rapati.
What’s cool about this to me is that I’m able to interact with my conscious self (i.e. the person who created the text) in a totally different way. The node illustration feels like a new way of searching through my brain and an opportunity to revisit a previous version of my thoughts. In the next iteration, I’d like to change the size of the node based on the number of times the word appears.
But more interesting to me is how LITTLE I type. I tend to use a lot of keyboard shortcuts and I tend to click around around opening programs and surfing websites, as illustrated in this generated sketch:
![]()
This sketch represents the movement of my mouse over a 7.5 hour period. I actually did this seven times in 7.5 hour intervals to compare how much time I spend in front of the computer and what I do during that time. The larger black circles represent periods of time when my mouse was at rest, which means I was either away from the computer or I was (more likely) watching a TV show or YouTube video. I’m not really sure what I learned from this, except that there was a lot more activity with my mouse than with my keyboard. However, the patterns that were created in each of these sketches, while very cool to look at, don’t really provide me with as much useful data as the key logging.

I was able to get the Logomatic to start writing to the file, which was very exciting. It now creates a text file with values ranging from 0-1023. Next, I wanted to attach two sensors: a GSR and a temperature sensor.
The temperature sensor was pretty easy. After testing it on the breadboard, I soldered it on to the perf board and then tested it on one of the pins. It worked the first time and was able to record data. However, the GSR gave me a lot of trouble.
GSR Sensor
I decided to skip pennies and go straight for the good stuff: electrodes.

This is what they look like:

The problem is that you can’t just connect them to the breadboard or the logomatic. You have to first use hot glue or electrical tape to keep the wires from coming out of the plugs. I spent a few hours experimenting with many different methods, and I couldn’t get any to stay in place. When I tried sewing the electrodes into a sweatshirt so that I could wear them surreptitiously, the slightest pull yanked them from their connection points. I went back and bought this connector:

In theory, the connection would now be more secure because the red and black male headers fit directly into the electrode female headers. But of course, nothing is so simple. I then had to cut off the opposite end and solder the wires to create my circuit. Luckily Mustafa had a set he had soldered for me to use as an example:

I settled for attaching one sensor and going mobile for proof of concept. The device is pretty small and it collects a ton of data. After recording for only an hour, I had a text file that was pretty large to parse. Here’s what the final mobile unit looks like:

No ghosts were found this week!
With Halloween only a few weeks away, I started thinking about ghosts and how people can “sense” their presence even though they are invisible. So I decided that for my mobile data logging project this week, I would try and predict the presence of paranormal activity by evaluating the environmental conditions in my locale. I decided to build a ghost detector.
I started off by doing some research into how people detect the presence of a ghost. There are a few factors that are consistent across a broad spectrum of ghost hunters and people that claim to have witnessed a ghost in their proximity: a rapid change in room temperature, increases in heart rate and breathing, strange sounds and visuals. All these things can be sensed with the tools we have available to us. In addition, I looked into getting a Geiger counter which is used by many ghost hunters to detect abnormal electromagnetic fields (EMF).
The first part of the week I spent trying to get the Logomatic V2 datalogger I purchased from SparkFun to read/write (i.e. log data) as described on the product page. Despite close to 10 hours of experimenting with different settings on the config file, a few trips to Radio Shack, extensive forum research and two hours with the resident researchers, the thing just won’t work. It’s possible that I need a 1GB microSD card instead of a 2GB, but those are hard to find. Otherwise, I’m not sure what else it could be at this point. I’ll spend some more time on it next week, but the time suck forced me to reexamine my objectives.
Next I decided to use my Arduino and carry around two sensors with my netbook in my backpack as a proof of concept. I used a LM34 to sense environmental temperature and two electrodes sewed into my sweatshirt to measure GSR:

I tested the code in both Arduino and Processing, but when I returned after several hours of data logging, I discovered that I was getting an error in the Processing sketch and that the GSR sensors weren’t feeding me data. This could have happened when I was sewing the electrodes into the hoodie or it could have been as a result of shuffling around in the backpack.
While the outcome wasn’t exactly as I had hoped, it did encourage me to move forward on this project. I think that if I can get the Logomatic working or find an alternative, lightweight and easy to use datalogger in its place, I should be able to construct a working prototype for next week.
My week 3 assignment can be found here.