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'
]