Pictagger

1,392 views

Published 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 free the user from automatable tagging tasks and establish tag consistency.

Published in: Art & Photos, Technology
1 Comment
0 Likes
Statistics
Notes
  • 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.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
1,392
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Pictagger

  1. 1. Franz Buchinger, fbuchinger@gmail.com https://github.com/fbuchinger/pictagger.js
  2. 2. Why tagging matters (not only) for photos <ul><li>photo collections usually live in a file/folder system with a one-dimensional index </li></ul>
  3. 3. Why tagging matters (not only) for photos <ul><li>... but a multi-dimensional index is needed for better retrieveability
  4. 4. keyword tags are the simplest and most portable approach to implement this (-> IPTC Keyword Tag) </li></ul>
  5. 5. Tagging Pitfalls <ul><li>ignoring it (95% of all flickr images are untagged)
  6. 6. aspect inconsistency
  7. 7. term inconsistency/synonyms </li></ul>
  8. 8. Aspect Inconsistency
  9. 9. Aspect Inconsistency (perspective, country, datecode) ↔ (continent)
  10. 10. Term Inconsistency
  11. 11. Term Inconsistency („mountains“) ↔ („mountain“)
  12. 12. Tagging conveniences <ul><li>face detection (automatic, but only considers faces)
  13. 13. drag'n drop tag lists (consistent terms, still requires manual assignment)
  14. 14. --> wanted: automatic tagging system with aspect/term consistency </li></ul>
  15. 15. pictagger.js <ul><li>Uses existing photo metadata as „seed“ for keyword generation
  16. 16. Frees the user from automatable tagging tasks
  17. 17. 100% Javascript
  18. 18. Tag generation happens in configurable plugin scripts (&quot; taggers &quot;)
  19. 19. works with local and (soon) flickr/picasa-hosted photos </li></ul>
  20. 20. taggers <ul><li>request certain metadata/or image data, calculate tags and emit them
  21. 21. taggers only run if the required metadata can be retrieved
  22. 22. configurable: whole tagger or generation of individual tags can be turned on/off </li></ul>
  23. 23. DateTime tagger {'Photo.Exif.DateTime': &quot;2010:12:21 18:43:00&quot;} [ 'year:2010', 'season:winter', 'calweek:50', 'yearday:345', 'month:december', 'day:tuesday', 'daytime:evening' ] DateTime Tagger
  24. 24. The hello world dayofmylife tagger PicTagger.App.addTagger({ namespace: 'doml', requires : ['Photo.Exif.Datetime', 'User.Profile.Birthdate'], desires : [], emits: [ {predicate: &quot;dayofmylife&quot;, label:&quot;day of my life&quot;, description:&quot;the day of your life the picture was taken&quot;, 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(&quot;doml.dayofmylife&quot;,doml); }, isActive: true });
  25. 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(&quot;doml.dayofmylife&quot;).toString(); same(taggerResult, 'dayofmylife:11513' );
  26. 26. Tagger Parade I – Time Based Example Input Tagger Example Output {Photo.Exif.DateTime': &quot;2010:04:02 18:43:00&quot;} Holiday ['holiday:easter', 'holiday:goodfriday'] {Photo.Exif.DateTime': &quot;2010:04:02 18:43:00&quot;, 'User.Profile.Birthdate': &quot;1979:03:23&quot; } Day of my life ['dayofmylife:11843'] {'Photo.Exif.DateTime': &quot;2010:12:21 18:43:00&quot;} DateTime [ 'year:2010', 'season:winter', 'calweek:50', 'yearday:345', 'month:december', 'day:tuesday', 'daytime:evening' ]
  27. 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. 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. 29. Innerds of pictagger.js <ul><li>Javascript EXIF Parser (Seidelin 2008), enhanced for HTML 5 File API
  30. 30. Backbone.js/underscore.js
  31. 31. jQuery </li></ul>
  32. 32. Outlook & Questions

×