Uploaded on

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 …

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.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • pictagger.js is an automated photo tagging tool written in javascript. It uses existing photo metadata (exif, iptc, geocoding, face detection) as a source for generating descriptive tags. the goal is to free the user from automatable tagging tasks (e.g. assigning holiday or location names) and establish tag consistency.
    Are you sure you want to
    Your message goes here
    Be the first to like this
No Downloads

Views

Total Views
1,016
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
8
Comments
1
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Franz Buchinger, fbuchinger@gmail.com https://github.com/fbuchinger/pictagger.js
  • 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
    • 4. keyword tags are the simplest and most portable approach to implement this (-> IPTC Keyword Tag)
  • 5. Tagging Pitfalls
    • ignoring it (95% of all flickr images are untagged)
    • 6. aspect inconsistency
    • 7. term inconsistency/synonyms
  • 8. Aspect Inconsistency
  • 9. Aspect Inconsistency (perspective, country, datecode) ↔ (continent)
  • 10. Term Inconsistency
  • 11. Term Inconsistency („mountains“) ↔ („mountain“)
  • 12. Tagging conveniences
    • face detection (automatic, but only considers faces)
    • 13. drag'n drop tag lists (consistent terms, still requires manual assignment)
    • 14. --> wanted: automatic tagging system with aspect/term consistency
  • 15. pictagger.js
    • Uses existing photo metadata as „seed“ for keyword generation
    • 16. Frees the user from automatable tagging tasks
    • 17. 100% Javascript
    • 18. Tag generation happens in configurable plugin scripts (" taggers ")
    • 19. works with local and (soon) flickr/picasa-hosted photos
  • 20. taggers
    • request certain metadata/or image data, calculate tags and emit them
    • 21. taggers only run if the required metadata can be retrieved
    • 22. configurable: whole tagger or generation of individual tags can be turned on/off
  • 23. DateTime tagger {'Photo.Exif.DateTime': "2010:12:21 18:43:00"} [ 'year:2010', 'season:winter', 'calweek:50', 'yearday:345', 'month:december', 'day:tuesday', 'daytime:evening' ] DateTime Tagger
  • 24. 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 });
  • 25. … 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' );
  • 26. Tagger Parade I – Time Based Example Input Tagger Example Output {Photo.Exif.DateTime': "2010:04:02 18:43:00"} Holiday ['holiday:easter', 'holiday:goodfriday'] {Photo.Exif.DateTime': "2010:04:02 18:43:00", 'User.Profile.Birthdate': "1979:03:23" } Day of my life ['dayofmylife:11843'] {'Photo.Exif.DateTime': "2010:12:21 18:43:00"} DateTime [ 'year:2010', 'season:winter', 'calweek:50', 'yearday:345', 'month:december', 'day:tuesday', 'daytime:evening' ]
  • 27. Tagger Parade II – Location Example Input Tagger Example Output {'Photo.Exif.Location': {lon: 48.0191752, lat:16.2949365}, 'User.Profile.Location': {lon: 48.3069400, lat: 14.2858300}} } FromHome ['kmfromhome:00150', 'homebearing:east'] {Photo.Exif.Location': {lon: 48.0191752 lat:16.2949365}} Geohash ['geohash:u2e94v9egx1'] {Photo.Exif.Location': {lon: 48.0191752 lat:16.2949365}} GeoCode ['city:vienna', 'province: vienna', 'district:margarethen', 'street:margarethenstrasse']
  • 28. Tagger Parade III – Shooting Properties Example Input Tagger Example Output {'Photo.Exif.Make': 'Apple', 'Photo.Exif.Model': 'iPhone 3GS' } CamType ['camtype:mobile', 'make':'apple','model':'iphone3gs'] {Photo.Exif.Orientation': 7} Orientation ['orientation:portrait'] {Photo.Exif.ExposureTime': 0.4} Exposure ['exposure:long']
  • 29. Innerds of pictagger.js
    • Javascript EXIF Parser (Seidelin 2008), enhanced for HTML 5 File API
    • 30. Backbone.js/underscore.js
    • 31. jQuery
  • 32. Outlook & Questions