Presentando Stereogranimator

GIF made with the NYPL Labs Stereogranimator
Publico esta foto hecha con el Stereogranimator como abrebocas para un post que publicaré más adelante sobre mi trabajo en la Biblioteca Pública de New York.
Body Type
Update: I have released most of the code for this project so that you can take a look. Send any improvements! ;)
A typeface is an environment for someone’s expression: using typefaces we write documents, create posters and subtitle movies. We follow the type creator’s restrictions and design decisions (kerning, spacing, proportion) when using her fonts. Good typefaces are created by highly-skilled people and can take several years to create. Body Type aims to allow anyone to create a highly expressive and personal typeface using only their body and hand gestures.
Body Type is an excercise on freestyle computing and was built using OpenFrameworks, the Microsoft Kinect sensor, OpenNI, FontForge, Potrace, ImageMagick, PHP, TouchOSC and the Apple iPhone.
Background
This project builds on a previous exercise on generative art that made use of the Kinect OpenNI skeleton system to create letterforms. I decided to take the idea further and create a self-contained application that would allow anyone to create a TrueType font using their body and gestures. The software should allow people to create type using their body in a way evocative of light painting photography:
Technical information
Body Type was created using the Microsoft Kinect sensor which was controlled by a C++ application created using openFrameworks and its OpenNI extension. This allowed for the 3D input received from the sensor to be converted into variable-width outlines and skeletons. The next issue was creating a TrueType font (.TTF file) from these silhouettes. The font-generation process goes through several stages in order to achieve this:
- Using openFrameworks to generate a black and white bitmap representation of each letter.
- ImageMagick is used to convert the image to a format compatible with FontForge.
- FontForge makes use of Potrace to vectorize the bitmap and then generates the final letterform and font.
- Since Body Type was displayed in the STUDIO for Creative Inquiry as part of an exhibition, web functionality was added so that font-creators could send themselves the resulting files. PHP was used to create a compressed ZIP file of all image and TTF files and send it to the specified email address.
The created font has six different possible parameters to determine a letterform’s visual attributes: skeleton lines, skeleton dots, line width, upper body, lower body and hand trails. Since controlling these parameters would be quite complicated to do by using gestures or on-screen menus, a TouchOSC iOS overlay was created to allow remote control via Open Sound Control:
Results
During the STUDIO exhibition dozens of fonts were created. Below are samples of some of them.

By Terry Irwin

By Shawn Sims

By Heather Knight (dingbats)

By Cong Ma (chinese characters)

By Haakon Faste
Creating the font is just part of the process. A font is made to be used. This project acknowledges the limitations of the fonts created both technically (since they lack proper letter spacing) and alphabetically (since they contain only representations for letters A to Z and numbers 0 to 9). However, these fonts allow for “freestyle” graphic experimentation:

By Paulo Pinto
Further work can be explored creating complete characters sets.
This project was done as part of the requirements to complete the Spring 2011 Interactive Art and Computational Design course with Professor Golan Levin in Carnegie Mellon University.
Body Type
UPDATE: “Light painting” test:
NUEVO: Prueba con “dibujo con luz”:
–
Body Type is a body-based font generator using OpenFrameworks, OpenNI and the Kinect sensor.
Project for the Spring 2011 Interactive Art & Computational Design course in Carnegie Mellon University
golancourses.net/2011spring/
–
Body Type es un generador de tipografías basadas en el cuerpo que usa OpenFrameworks, OpenNI y el Kinect.
Proyecto para el curso Interactive Art & Computational Design en Carnegie Mellon University
golancourses.net/?2011spring/
2D <3 3D
–Texto en inglés como parte de mi estudio en Carnegie Mellon University. Eventualmente haré una versión en español.–
2D <3 3D is a Kinect-based online multiuser interactive environment. The project is still under development and currently allows multiple web-based users to interact with and augment the physical space of the Kinect participants with virtual objects.
Background
3D is the talk of the hour. From cinema to the living room, 3D is becoming simultaneously a selling and a divisive point. The point of this project is to mesh both points of view and make a commentary about the banality of this “issue”. The project is inspired by many previous works including:

The Bauhaus school of art, architecture and design also explored theatre. I was mostly interested in its highly geometric and formal qualities.

Peter Gabriel’s Sledgehammer video demonstrated an interesting optical phenomenon: human shapes may be inferred by the sole movement of points.

UYUYUY is a short film by Santiago Caicedo which, while designed to be watched with 3D glasses, is mostly composed of 2D elements.

The web has always been a medium of my interest. I try to include web-related functionality in my projects. The Red Agency website has an interesting chat functionality mixed with navigation and 2D parallax scrolling interface.
Technical exploration
I wanted to have a multiuser conversation between the physical and the virtual; 3D and 2D. This was my first C++ project so the learning curve was quite steep and full of obstacles. I started exploring the networking possibilities in openFrameworks including ofxOsc and ofxNetwork deciding upon the latter communicating with the web via a Java-based XMLSocket server (I know “basic” web sockets perform better but not enough time to explore that).
The project also uses ofxOpenNI for skeleton detection and ofxBox2d for physics/collision detection. An initial attempt was made to use ofxMSAPhysics but for some reason I could not make it work well with ofxOpenNI. The web interface uses Flash.
One challenge was how to visualize and represent the activity in either end (Flash being the 2D environment and openFrameworks the 3D). Further exploration must be made in order to have a more interesting visual representation in both ends.
Interdependence
The two main components of this project are mutually dependent: the 3D-interacting users require that web users are present and creating objects they can interact with. 2D web users require the “presence” of 3D skeletons for them to observe and affect. This “conversation” between 2D and 3D is the main element of the project.
Download the code (ZIP 20 MB) which is completely unsupported. Contains:
- Flash CS5 .FLA file (for the web-based interface)
- Eclipse Java project folder (for the socket server)
- openFrameworks project folder
Presentation (PDF 471 KB)
This project was done as part of the requirements to complete the Spring 2011 Interactive Art and Computational Design course with Professor Golan Levin in Carnegie Mellon University.
New Faces
–Texto en inglés como parte de mi estudio en Carnegie Mellon University. Eventualmente haré una versión en español.–

New Faces is a project that began in 2009 after I got fed up with Colombia’s online newspapers’ (one site, another site) high emphasis in sports and celebtrity-related news. I decided to take a screenshot of the offending website and remove this information (along with advertising) in order to see what was left.
Clearly sports, advertising and celebrity news have a relatively high importance for this colombian newspaper (at least in its online incarnation). This led me to wonder if this was the same across different countries. I decided to create a Python script that makes use of webkit2png-0.5 to take a screenshot of eleven news websites every night at 8pm. This script has been ran almost every night since November 8, 2009.
New faces
After seeing Rutherford Chang’s work with the New York Times where he blacks-out every element in the page except faces (no link available, sorry) I thought it would be an interesting idea to execute this same process in my dataset of more than 3,000 files and 10 GB.
I tested various technical solution for this process and decided upon using the OpenCV library for Processing.
After that it was a matter of applying it to my dataset and see if it worked. I tried several parameters for the detect() method since there were many false positives (text selected as face) and false negatives (face undetected when there should be) but could not get 100% accuracy. These errors provide an interesting outcome anyway.
The faces are extracted from the screenshots and saved as separate files along with their original location in x,y and number of total faces in the screenshot. There were 28,000+ faces deteced (less than 10 faces per screenshot).
With this new subset I then created a Flash interface to view the faces in their original x,y coordinates with buttons to toggle the visibility of individual news sites. Next to the buttons a blue line indicates average face area, a green line indicates how many screenshots (individual days captured) and a red line indicates total amount of faces in that site.
View the Flash interface online in your browser. F for fullscreen (click the interface to give it focus). CAUTION: ~30,000 images files loaded might clog up your browser (although they’re about 2kb each only). Interface is not optimized for low-end computers.
Future work
From this initial work some superficial conclusions could be made (see photo captions). Further analysis could provide some interesting information such as:
- dominant race or skin color
- gender distribution
- dominant face expression (sad, happy, angry, etc.)
- average face area
- preferred location in the page
- how the above change over time
The interface makes use of Bit-101?s Minimal Comps.
This project was done as part of the requirements to complete the Spring 2011 Interactive Art and Computational Design course with Professor Golan Levin in Carnegie Mellon University.





