pictagger.js is an automated photo tagging tool written in javascript. It uses existing photo metadata (exif, iptc, geocoding, face detection) as a seed for generating descriptive tags. the goal is to free the user from automatable tagging tasks and establish tag consistency.
2. Why tagging matters (not only) for photos
photo collections usually live in a file/folder system with a
one-dimensional index
3. Why tagging matters (not only) for photos
... but a multi-dimensional index is needed for better
retrieveability
keyword tags are the simplest and most portable approach
to implement this (-> IPTC Keyword Tag)
4. Tagging Pitfalls
ignoring it (95% of all flickr images are probably untagged)
aspect inconsistency
term inconsistency/synonyms
9. Tagging conveniences
face detection (automatic, but only considers
faces)
drag'n drop tag lists (consistent terms, still
requires manual assignment)
--> wanted: automatic tagging system with
aspect/term consistency
10. pictagger.js
Uses existing photo metadata as seed for keyword
generation
Frees the user from automatable tagging tasks
100% Javascript
Tag generation happens in configurable plugin scripts
("taggers")
works with local and (soon) flickr/picasa-hosted photos
11. taggers
request certain metadata/or image data, calculate tags and
emit them
taggers only run if the required metadata can be retrieved
configurable: whole tagger or generation of individual tags
can be turned on/off
13. The hello world dayofmylife tagger
PicTagger.App.addTagger({
namespace: 'doml',
requires : ['Photo.Exif.Datetime', 'User.Profile.Birthdate'],
desires : [],
emits: [
{predicate: "dayofmylife", label:"day of my life",
description:"the day of your life the picture was taken",
active: true}
],
run: function (required, desired){
var photo_taken = required[0].get('value');
var user_birthdate = required[1].get('value');
var ms2Day = 1000*3600*24;
var doml = Math.ceil((photo_taken - user_birthdate)/ms2Day);
this.setTag("doml.dayofmylife",doml);
},
isActive: true
});
14. testing it
domlRequired = [
new PicTagger.SourceTag({key: 'Photo.Exif.Datetime',
value: new Date(2011, 1, 1, 13, 49)}),
new PicTagger.SourceTag({key: 'User.Profile.Birthdate',
value: new Date(1979, 6, 27)})
];
domlTagger.run(domlRequired);
var taggerResult = domlTagger.getTag("doml.dayofmylife").toString();
same(taggerResult, 'dayofmylife:11513');
15. Tagger Parade I Time Based
Example Input Tagger Example Output
{Photo.Exif.DateTime': Holiday ['holiday:easter',
"2010:04:02 18:43:00"} 'holiday:goodfriday']
{Photo.Exif.DateTime': Day of my life ['dayofmylife:11843']
"2010:04:02 18:43:00",
'User.Profile.Birthdate':
"1979:03:23" }
{'Photo.Exif.DateTime': DateTime [
"2010:12:21 18:43:00"} 'year:2010',
'season:winter',
'calweek:50',
'yearday:345',
'month:december',
'day:tuesday',
'daytime:evening'
]