{"id":4,"date":"2004-12-19T09:31:48","date_gmt":"2004-12-19T14:31:48","guid":{"rendered":"http:\/\/crschmidt.net\/blog\/?p=3"},"modified":"2004-12-19T09:31:48","modified_gmt":"2004-12-19T14:31:48","slug":"image-description","status":"publish","type":"post","link":"https:\/\/crschmidt.net\/blog\/archives\/4\/image-description\/","title":{"rendered":"Image Description &#8211; What I want"},"content":{"rendered":"<p>I have about 1500 images that I&#8217;ve taken over the last 1.5 years since I got a digital camera. These photos vary wildly in what they contain, from parties with friends to buildings to family photos to stuff around the house. There is a variety of images depicting people from all walks of life, from my college friends to my family now.<\/p>\n<p>I want to search them.<\/p>\n<p>I&#8217;ve become very convinced that the best way to store the information about these photos is in RDF: It&#8217;s the only data description framework that lets me extend and expand my descriptions to include everything I need. (There&#8217;s also the fact that I&#8217;m an RDF nut, so everything is a case for RDF.) Once the data is created, adding it to an RDF store and asking that store questions will not be difficult; the main problem is to get the data created. <\/p>\n<p>There are some web based tools for photo\/image annotation: mortenf uses a <a href=\"http:\/\/www.wasab.dk\/morten\/2003\/11\/annotate\/\">tool he created<\/a> which spits out ntriples, and there is also the <a href=\"http:\/\/swordfish.rdfweb.org\/discovery\/2004\/03\/w3photo\/annotate.html\">java app<\/a> attached to the foaf codepiction project. However, neither one of these lets me describe my images very easily; There&#8217;s a lot of effort to go through for it.<\/p>\n<p>My ideal photo annotation tool works like this:<\/p>\n<ul>\n<li>Provide a URL to a photo.<\/li>\n<li>This photo may or may not have EXIF data included. If it  does, use the exif data to generate the appropriate RDF; something along the lines of the EXIF metadata created by <a href=\"http:\/\/www.kanzaki.com\/test\/exif2rdf\">Mashide&#8217;s exif2rdf web app<\/a> would be good.<\/li>\n<li>Allow me to describe the image with a title and description: dc:title and dc:description.<\/li>\n<li>Allow me to describe the person who took the photo: foaf:maker. This part can work from the existing triple store I have; Let me enter a name, and then use that name, along with an mbox_sha1sum, to describe the person.<\/li>\n<li>Offer me a license list: a list of CC licenses to choose from.<\/li>\n<li>Allow me to describe &#8220;things&#8221; that are included in the photo: entering a term and checking it against wordnet, then using the right sense of the word.<\/li>\n<li>Allow me to describe &#8220;people&#8221; in the photo: enter a name or nickname, and then present me a list of options from my triple store, or the option to describe a new person. Once I choose a person, a name + IFP should be included in the output so that I can smush the data together.<\/li>\n<\/ul>\n<p>I&#8217;d like for the entire interface to be text based. I don&#8217;t want a web or graphical app: with 1500 photos, that&#8217;s just too damn much. I want to be able to describe these things quickly and easily, so very little should get in the way, with as few keystrokes as possible. If I want to skip something, I can just hit enter to skip over it. <\/p>\n<p>I&#8217;m lucky in some respects, because some of the hard work of gathering information about people is already done for me: I have a large triple store at hand that can help me with this project. I also have some limited experience in working with the Redland framework, so I may even have the experience I need to make this work. So, here&#8217;s how I see it working on the inside:<\/p>\n<p>Create an interface along the lines of what Config::Tiny (in perl) does: Question [default] ? then allow for the user to either skip past (and use the default, which may be none in some cases) or to use their option: if their option, possibly provide a list of choices after that. For example, if I enter &#8220;Jessica&#8221; as a name, it should tell me &#8220;There is no name Jessica in the database: would you like to create a new user?&#8221; with a yes or no option; if no, it would go back to the previous step and let me enter a different name. Dump the data, as its created, to an in-memory Redland model.  Once the photo description is complete, serialize the model to a file, which can then be run through cwm to clean it up for more permanant storage.<\/p>\n<p>I&#8217;m probably going to actually get off my butt and write this pretty soon: I have a lot of interest in describing this data, in part because it&#8217;s another case where a nifty project can lead to a great demonstration of why and how RDF can work. I&#8217;m most interested in someone who may have suggestions on what kind of tools would be good for creating the interface: the last time I did any kind of user input other than command line was when I was working with cin>> statements in C++. I&#8217;m probably going to write it in Python (I feel that I really accomplish things much more quickly writing in that language than in either perl or PHP), so tips on how to create command line user interfaces in Python are appreciated.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rambling on what I&#8217;d like to see in an image annotation application; based on Redland, written in Python, and doing as much work as possible for me.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-4","post","type-post","status-publish","format-standard","hentry","category-image-description"],"_links":{"self":[{"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/posts\/4","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/comments?post=4"}],"version-history":[{"count":0,"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/posts\/4\/revisions"}],"wp:attachment":[{"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/media?parent=4"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/categories?post=4"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crschmidt.net\/blog\/wp-json\/wp\/v2\/tags?post=4"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}