Drawing Hats on Monkeys with Mechanical Turk

Amazon Mechanical Turk is a crowd-sourcing platform that lets employers post tiny jobs which workers can do for tiny pay. It’s main use is tasks that cannot be automated well and require a wee bit of human effort. Standard examples include looking up addresses for businesses, categorizing images, and transcribing audio. Awesome examples include drawing sheep, outsourcing birthday well-wishes for a loved one, describing images for the blind, and falsifying one’s diary.

I’d had a few ideas kicking around in my head for awhile, so I figured I’d finally give it a go. My intended pilot project was a simple one: Provided a picture of a monkey, draw a hat on it. It turned out to be more involved that initially presumed (as all projects are), but I’d call it a success. I paid 25 people ten cents each for a total of $2.75, with Amazon’s fee, and it was finished in about six hours. I upped the price to twenty cents and got 25 more. This bought me the following:

The full result set can be found here. I gave out a few bucks total in bonuses, too. People put more effort into it than I had anticipated, and seemed to genuinely enjoy the task, saying things like:

  • :) cool job
  • Excellent HIT, thank you.
  • its interesting one… really i enjoy while drawing the hat to that monkey
  • NICE EXPERIENCE
  • it’s amassing.
  • it is very funny task. i am very happy..thank you very much
  • my monkey is drinking beer from a beer hat. Silly monkey!

I won’t go into major technical details, but here are some links that helped me out. Hosted on my site was a page containing a simple, awesome jQuery paint utility called wPaint. This sat on top of the capuchin photo by Flickr user jurvetson. When the user clicked to submit, some jQuery copied the contents of the drawing widget into a variable. This variable was passed along as the value of a hidden form element called entry_1:

var imageData = $('#wPaint').wPaint('image');
$('input#entry_1').val(imageData);

The form and its inputs, like entry_1 above, were all set up to mirror a Google Docs Spreadsheet input form, as per the great instructions here and also here. That way, when the user submitted, the image they drew was stored in the spreadsheet as a base64-encoded PNG. The JavaScript interpreter balked when I needed to submit a form value named “submit,” which Google Docs wanted. This Stack Overflow answer helped me over that major hurdle.

Once it was up and running as a stand-alone page, I turned my attention to getting it to work with the Mechanical Turk system. Essentially I followed the example on this blog post, by Andrew Long of Georgetown University. The workerId was passed to my page via GET. I always forget how to get GET variables with JavaScript; this page was a nice reminder.

In conclusion, Mechanical Turk holds much promise for stupid art projects. I’m sure I’ll be wasting time (and small amounts of money) on it in the future. Thank you to all the artists!

Leave a Reply to Jess Mizerak Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>