Back in 1966, Ken Knowlton and Leon Harmon were experimenting with photomosaic, creating large prints from collections small symbols or images. In Studies in Perception I, they created an image of a reclining nude by scanning a photograph with a camera and converting the analog voltages to binary numbers which were assigned typographic symbols based on halftone densities. It was printed in The New York Times on 11 October 1967, and exhibited at one of the earliest computer art exhibitions The Machine as Seen at the End of the Mechanical Age, held Museum of Modern Art in NYC from November 25, 1968 through February 9, 1969.
He writes in his essay On The Frustrations Of Collaborating With Artists:
..I was developing experimental programming languages and methods — terms loosely defined, in those golden days of Bell Labs, and thus “artistic applications” was a plausible use of part of my time. I did not have to defend that interpretation in detail to my superiors, which was fortunate because I’m not sure that any of us really knew what we were doing, or why. As Yogi Berra (is reported to have) said: If you don’t know where you’re going, you’ll surely end up somewhere else. Yes, indeed, for better or worse. Anyway, from these experiences, I think the issues and caveats cited in my intro above have turned out to be more or less valid, for reasons that I would now say come from the nature of art and the nature of people.
Few years ago, Zach Lieberman met Ken Knowlton through a magician, Marc Settaducati, who is also a toy designer. The three of them, Marc, Ken and Zach decided to collaborate on bringing the idea of something magical to the masses inspired by Ken’s previous work.
This project was really about Ken, and Ken’s artwork. He’s been doing mosaic work since the 60s, when he came to Bell Labs and saw different ways of making images computationally Zach writes. Marc’s role was to turn those creative ideas into a toy. Zach’s job has been to push Ken’s algorithms, modernize his code, and to try to get the software to give the best possible results. The system was developed in openFrameworks to adjust and tweak the software. Team developed three different toys so far — a monochrome version of the Jigazo (which is out in Japan and now US/Canada), a color version which takes a images such as a painting and rearranges.
What it is really significant about JiGaZo puzzle (meaning “self portrait” in Japanese) is that you can realize almost any image, with the enclosed 300 pieces of puzzles. The puzzle uses rotating method to generate 4 different pixels out of each puzzle piece. So, for the first 2 pieces, the total number of pictures is given by 4 x 4 = 16. Now, if you do the same thing with the third piece, you would have made 4 x 4 x 4 = 64 different pictures. So if you keep multiplying that how big a number is 4^300? It is about equal to this number: 10^180 – or the number 1 followed by 180 zeros, larger than the number of protons in the entire known universe (source).
The projects began with code that Ken has written in C / Dos (16 bit variables, text mode, etc). Zach ported this code to OF, and expand on the algorithms with alternative approaches. The team use the ofxControlPanel gui, and did a lot of adjustment and tweaking. They also use a fair amount of opencv to process incoming images to make them work better in the system.
In Japan, that code is then made to work on a server, and all the interaction is through cell phones / email. You take a photo of your face – or whatever you want to make a puzzle of and send a blank email to firstname.lastname@example.org with the photo as an attachment. An email will arrive from email@example.com after about ten seconds. Open it, click the hyperlink in the email, and wait for your browser to navigate to the page where you can progress to the image with a 15-by-20 grid of symbols that correspond to the symbols printed on the pieces of the puzzle. Line up the pieces according to the grid on the page to recreate your photo.
In the hasbro version of the software, there’s a cd-rom with a flash port of the code, done using alchemy, which allows chunks of the algorithm to be written in native code.