Acties:
  • 0 Henk 'm!

  • Marcel-Jan
  • Registratie: Juni 2010
  • Laatst online: 17-08 08:19
Ik heb het plan opgevat om een Python 2.7 script te maken dat (als het runt) van een specifieke directory alle foto's met een rating (waardering) van 4 sterren of hoger te uploaden naar Google Photo. Het leek zo'n eenvoudige klus, maar wat blijkt: ik kan de plek niet vinden waar de rating wordt opgeslagen.

Nu zul je misschien zeggen: dat vind je in de Exif 2. Dat heb ik bekeken. Ik heb de Exif 2 met Python geëxporteerd en minutieus door de data gegaan. Ik kan het daar gewoon niet in vinden. (Ik kan een voorbeeld uploaden. Even geduld)

Nu zijn er sites online waar wordt gezegd dat de rating een Windows iets is en dat het daarom niet in de Exif 2 zit. Ik kan me dat bijna niet voorstellen. Ik heb de ratings gegeven via Adobe Bridge (CS5) en het lijkt me sterk dat dit niet bestaat op een Mac bijvoorbeeld.

Mijn camera is een Canon EOS 60D met de meest recente (maar ook al weer oude) firmware.
Iemand een idee?

Acties:
  • 0 Henk 'm!

  • Nic
  • Registratie: April 2005
  • Laatst online: 11-09 23:07

Nic

Vrij

Exiftool kan ratings lezen ($rating), en in het forum aldaar die ik ook wat voorbeelden staan.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:43

Ventieldopje

I'm not your pal, mate!

Marcel-Jan schreef op maandag 2 januari 2017 @ 17:43:
Ik heb het plan opgevat om een Python 2.7 script te maken dat (als het runt) van een specifieke directory alle foto's met een rating (waardering) van 4 sterren of hoger te uploaden naar Google Photo. Het leek zo'n eenvoudige klus, maar wat blijkt: ik kan de plek niet vinden waar de rating wordt opgeslagen.

Nu zul je misschien zeggen: dat vind je in de Exif 2. Dat heb ik bekeken. Ik heb de Exif 2 met Python geëxporteerd en minutieus door de data gegaan. Ik kan het daar gewoon niet in vinden. (Ik kan een voorbeeld uploaden. Even geduld)

Nu zijn er sites online waar wordt gezegd dat de rating een Windows iets is en dat het daarom niet in de Exif 2 zit. Ik kan me dat bijna niet voorstellen. Ik heb de ratings gegeven via Adobe Bridge (CS5) en het lijkt me sterk dat dit niet bestaat op een Mac bijvoorbeeld.

Mijn camera is een Canon EOS 60D met de meest recente (maar ook al weer oude) firmware.
Iemand een idee?
In de embedded metadata (exif) of XMP Sidecar (los xmp bestand met de zelfde naam als de foto). Dit laatste is bij RAW bestanden van toepassing maar soms ook bij jpg als je tools als Lightroom gebruikt.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb het even anders opgepakt. Stom dat ik er niet eerder aan dacht: ik heb de dump van de exif gemaakt van een JPG die ik in Adobe Bridge beoordeeld heb met 4 sterren en van exact dezelfde foto, maar dan met een beoordeling van 5 sterren. (Beide bestanden hebben geen .xmp file ernaast.) Dit vergeleken in Beyond Compare 4. Resultaat: geen verschil, behalve de bestandsnaam.

Op een zeker moment heb ik de rating aangepast met Windows Explorer. En dan zie je opeens twee extra regels:
Section: [ EXIF] Size: 17764
<--- TIFF Ifd start --->
Camera Make Canon
Camera Model Canon EOS 60D
Orientation of image 8
X Resolution 72 / 1
Y Resolution 72 / 1
Unit of X and Y resolution 2
File change data and time 2016:03:29 03:45:53
Artist Marcel-Jan Krijgsman
Y and C positioning 2
0x4746 5
0x4749 99

<--- Extended EXIF start --->
Exposure Time 1 / 400
etc...

Op zich wel interessant. Dus ik dacht "het moet toch ergens zitten". Dus heb ik de JPGs maar eens in Beyond Compare gezet. En dan blijkt de tweede, die ik in Adobe Bridge heb aangepast deze regels te bevatten:

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c007 1.136881, 2010/06/10-18:11:35 ">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:aux="http://ns.adobe.com/exif/1.0/aux/"
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
xmp:Rating="5"
enz..

Exiftool ziet het ook. In de tweede JPG:
[..]
Rating : 5
Metadata Date : 2017:01:02 23:29:17+01:00
[..]

Ik zie dat er ook een Python wrapper voor Exiftool is. Dus binnenkort zal ik een nieuwe poging wagen.

Bedankt voor het meedenken!

Acties:
  • +1 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:43

Ventieldopje

I'm not your pal, mate!

Bash:
1
pip install -U pyexifinfo

Python:
1
2
3
4
5
6
7
8
9
import pyexifinfo as exif

files = ["a.jpg", "b.png", "c.tif"]
picked = []

for f in files:
    metadata = exif.get_json(f)
    if metadata["xmp:Rating"] >= 4:
        picked.append(f)


.. of iets dergelijk :) Daarna alleen nog de lijst met bestanden in "picked" uploaden naar Google oid ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Marcel-Jan
  • Registratie: Juni 2010
  • Laatst online: 17-08 08:19
Gelukt! Het ging niet van een leien dakje, maar ik heb de ratings te pakken.

Ik run Python op Windows, dus toen ik "pip install pyexifinfo" deed, klaagde hij meteen dat hij niet bij een file kon. Welke? Vermoedelijk exiftool, maar waar die te plaatsen? Ik besloot hem te hernoemen naar exiftool.exe, hem een plekje (directory) te geven en ernaar te verwijzen met de PATH Windows environment variabele. Zo kan hij in ieder geval overal gevonden worden zonder dir op te geven.

(Dit na nog wat uitstapjes met het gebruik van andere xmp lezende libraries, zoals python-xmp-toolkit (moest eerst exampi compileren en had Visual Studio nodig) en pyavm (toont heeel weinig xmp info)

Afijn, de installatie ging nu goed. En het lukt nu om de rating te tonen. Even voor de Python liefhebber: pyexifinfo zet je metadata in een list, met als elk list item een dictionary. (Ik heb net de Coursera Python cursus van Rice University gedaan, dus dit is een goede training met het gebruik van lists en dictionaries)


Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import os, sys, glob
import pyexifinfo as exif

# Open a file
path = r"D:\bestanden\incoming\Python\jpgsync_test"
# Pick only jpgs
filelist = glob.glob( path + "\*.JPG" )

# This would print all the files and directories
for file in filelist:
   # Toon de file waar je mee bezig bent
   print file
   
   # Haal metadata op uit jpg
   metadata = exif.get_json(file)
   
   for met in metadata:
       # Indien er een key is met naam XMP:Rating, toon deze dan
       if 'XMP:Rating' in met.keys():
           print met["XMP:Rating"]


>>> execfile('jpgs_to_be_synced3.py')
D:\bestanden\incoming\Python\jpgsync_test\IMG_0000.JPG
4
D:\bestanden\incoming\Python\jpgsync_test\IMG_0001.JPG
5
D:\bestanden\incoming\Python\jpgsync_test\IMG_2971.JPG
0


Daar kan ik wat mee.

[ Voor 3% gewijzigd door Marcel-Jan op 03-01-2017 22:57 ]


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 10:43

Ventieldopje

I'm not your pal, mate!

Het is veelal linux/mac georiënteerd inderdaad. Windows is een draak om op te ontwikkelen vind ik, tenzij je puur Windows applicaties schrijft met VS.

Goed om te zien dat het gelukt is!

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8

Pagina: 1