Der Exif Check dei­ner Bil­der für die Ver­wen­dung von dyna­mi­schen Play­lis­ten

-

Du woll­test schon immer die Mög­lich­keit haben, die Bil­der auf dei­nem Foto­rah­men ein­fach nach Datum fil­tern zu kön­nen?

Du kommst gera­de aus dem Urlaub zurück und willst jetzt erst­mal die Bil­der der letz­ten drei Wochen sehen, um noch etwas in Feri­en­stim­mung zu schwel­gen?

Dein Nach­wuchs wird heu­te 10 Jah­re alt, und du möch­test nur die Bil­der im Wohn­zim­mer anzei­gen, die jeweils an sei­nen Geburts­ta­gen gemacht wur­den?

Die Infor­ma­ti­on, wann ein Bild auf­ge­nom­men wur­de ver­steckt sich in den Exif Meta­da­ten einer JPG Datei. In die­sem Arti­kel stel­le ich dir ein Python 3 Skript vor, was dei­ne Foto­samm­lung auf die Voll­stän­dig­keit der Exif Datums­an­ga­ben prüft, damit du sie spä­ter für Fil­ter­funk­tio­nen nut­zen kannst.

Der digi­ta­le Fuß­ab­druck dei­ner Bil­der

Die älte­ren Semes­ter erin­nern sich viel­leicht noch an frü­he­re Kame­ras, die einen Datums­stem­pel auf den Bil­dern hin­ter­lie­ßen. Ich fand damals, dass das ein Bild so ziem­lich rui­niert, aber eini­ge Mar­ke­­ting-Chefs in Japan waren da wohl ande­rer Mei­nung.

Glück­li­cher­wei­se ist das in der digi­ta­len Zeit kein The­ma mehr, da wir heu­te die Daten spei­chern kön­nen, ohne dass sie auf dem Bild auf­tau­chen.

Bei jeder Auf­nah­me mit einer Digi­tal­ka­me­ra oder Han­dy, wer­den, neben den Bild­da­ten, eine Rei­he von Infor­ma­tio­nen gespei­chert. Das sind unter ande­rem die Exif Daten, die Anga­ben wie Datum, Seri­en­num­mern der Kame­ra und des Objek­tivs, Blen­den, Ver­schluss­zei­ten oder die Art des Weiß­ab­gleichs ent­hal­ten.

Nur ein Teil der Exif Daten eines digi­ta­len Fotos

Dane­ben gibt es GPS Orts­da­ten und IPTC Meta­da­ten, die Infor­ma­tio­nen wie Copy­right und Schlag­wör­ter ent­hal­ten, die ent­we­der manu­ell in Ado­be Ligh­troom oder auto­ma­tisch wie z.B. durch Gesichts­er­ken­nung des Han­dys hin­zu­ge­fügt wer­den.

IPTC Daten mit Schlag­wör­tern, Urhe­ber- und Orts­an­ga­ben

Gera­de beim Arbei­ten mit vie­len tau­send Bil­dern hel­fen die­se Infor­ma­ti­on unge­mein, den Über­blick zu bewah­ren.

Aber man kann damit auch smar­te, oder wie es auch heißt, dyna­mi­sche Play­lis­ten erstel­len, die Bil­der nach gewis­sen Kri­te­ri­en fil­tern.

Smar­te Play­lis­ten

Bei einem digi­ta­len Bil­der­rah­men bie­ten sich Fil­ter auf Datum, Per­so­nen, Orte und ande­re Schlag­wör­ter an.

Die Exif Infor­ma­ti­on geht manch­mal wäh­rend der Bild­be­ar­bei­tung ver­lo­ren.

Das geschieht oft aus Grün­den der Platz­ein­spa­rung, auch wenn der Unter­schied nur bei rund einem Pro­zent liegt und damit nicht ins Gewicht fällt.

In einem für Ende Som­mer 2019 kom­men­den Update für den von mir gelieb­ten Pi3D Bild­be­trach­ter (der mit den wun­der­schö­nen Kreuz­über­blen­dun­gen), wird es die Mög­lich­keit geben, Bil­der nach dem Auf­nah­me­da­tum oder nach Zeit­räu­men ein­zu­gren­zen.

Denn, auch wenn eine sta­ti­sche Play­lis­te für kom­mer­zi­el­le Anwen­dun­gen sinn­voll ist, hal­te ich sie für die Nut­zung zuhau­se für gänz­lich unge­eig­net.

Ein digi­ta­ler Foto­rah­men ist ja nicht dafür gemacht, dass man zehn Minu­ten davor steht und sich die Bil­der anschaut, son­dern eher wan­dert der Blick immer mal wie­der zufäl­lig dar­auf. Außer­dem wird es ja gera­de dadurch span­nend, wenn man nicht weiß, was als nächs­tes Bild erscheint und bei der lang­sa­men Über­blen­dung anfängt zu raten.

Außer­dem erfor­dern sta­ti­sche Play­lis­ten eine regel­mä­ßi­ge Pfle­ge, und das macht man in der Regel nicht.

Eine dyna­mi­sche Play­lis­te dage­gen aktua­li­siert sich von selbst, sobald neue Bil­der der Samm­lung hin­zu­ge­fügt wer­den.

Aber damit es so ein­fach gehen kann, müs­sen die Bild­da­tei­en die rich­ti­gen Daten ent­hal­ten.

Hier kommt das Python Skript ins Spiel. Um die Qua­li­tät der Exif Daten in dei­ner Foto­samm­lung zu über­prü­fen, habe ich ein Skript geschrie­ben, das in allen dei­nen Bil­dern, inklu­si­ve Unter­ver­zeich­nis­sen, prüft, ob ein gül­ti­ges Exif Datum vor­han­den ist.

Bei mei­ner Prü­fung führ­te das zur Fest­stel­lung, dass ich über drei Jah­re hin­weg, mei­ne Bil­der ohne Meta­da­ten aus Ligh­troom expor­tiert habe. War­um, weiß ich auch nicht mehr. Das führt aber eben dazu, dass sie von einem smar­ten Fil­ter nicht berück­sich­tigt wer­den.

Ich muss­te daher erst ein­mal einen neu­en Export aus Ligh­troom durch­füh­ren, bevor ich die Funk­tio­na­li­tät in einem aktua­li­sier­ten Pi3D Skript nut­zen konn­te. Durch das Skript konn­te ich sofort sehen, wel­che Ver­zeich­nis­se oder Ein­zel­bil­der betrof­fen waren und konn­te sie schnell fixen.

Wenn du also Ado­be Ligh­troom nut­zen soll­test, ach­te dar­auf, dass in den Export Ein­stel­lun­gen alle Meta­da­ten mit ein­ge­schlos­sen sind.

Beim Export in Ligh­troom muss "Alle Meta­da­ten" selek­tiert sein

Das Python 3 Skript zum Check des Exif Datums in dei­ner Foto­samm­lung

Die Ein­rich­tung ist sehr ein­fach.

Erstel­le eine neue Datei names "check_exif_date.py" und kopie­re den unten ste­hen­den Code hin­ein.

In Zei­le 48 spe­zi­fi­zierst du das Haupt­ver­zeich­nis, in dem gescannt wer­den soll. Ach­te auf die Groß- und Klein­schrei­bung dei­ner Pfad­an­ga­be.

  1. #!/usr/bin/env python3
  2.  
  3. """
  4. Script for scanning JPG's with invalid DATE in Exif
  5. Prerequisite: pip3 install exifread
  6. """
  7.  
  8. import os
  9. import exifread
  10.  
  11. def ScanInvalidExifDate(dirName):
  12.  
  13.     try:
  14.         #scan if current directory is accessible or not
  15.         #permission denied removal
  16.         CurrentDirectoryFiles = os.listdir(dirName)
  17.     except:
  18.         return
  19.  
  20.     #iterate over results of current direcotry files
  21.     for entry in CurrentDirectoryFiles:
  22.  
  23.         #create a full file path with dir + file name
  24.         filePath = os.path.join(dirName, entry)
  25.  
  26.         #check if full file path is another directory then recursively operate
  27.         if os.path.isdir(filePath):
  28.             ScanInvalidExifDate(filePath)
  29.  
  30.         #otherwise check if jpg and has valid exif date
  31.         else:
  32.             if (filePath.endswith(".jpg") or filePath.endswith(".jpeg")) and not (entry.startswith(".")) and not ".AppleDouble" in filePath:
  33.                 filePath= '/'.join(filePath.split('\\'))
  34.                 f = open(filePath, 'rb')
  35.                 tags = exifread.process_file(f)
  36.                 f.close()
  37.  
  38.                 #check if DATE exist in EXIF if not then print that file path
  39.                 try:
  40.                     tags['EXIF DateTimeOriginal']
  41.                 except:
  42.                     print(filePath)
  43.     return
  44.  
  45. if __name__=="__main__":
  46.     print("-------------------Invalid Valid Exif Date Finder-----------------------")
  47.     while True:
  48.         directoryStarting = "/home/pi/Pictures/your_photos/"
  49.         if os.path.exists(directoryStarting):
  50.             print("Directory Selected is :", directoryStarting)
  51.             print("---------Scanning-------------")
  52.             ScanInvalidExifDate(directoryStarting)
  53.             break
  54.         else:
  55.             print("Invalid Directory Entered")

Ver­schie­be die Datei in das Home Ver­zeich­nis dei­nes Rasp­berry Pi.

Bevor wir das Skript lau­fen las­sen kön­nen, müs­sen wir noch das exi­f­read Packa­ge instal­lie­ren.

Gib im Ter­mi­nal ein:

pip3 install exifread

Und um das Skript zu star­ten:

python3 exif_date_check.py

Das Ergeb­nis des Scans wird im Ter­mi­nal aus­ge­ge­ben. Damit kannst du dann die betrof­fe­nen Datei­en kor­ri­gie­ren und noch ein­mal frisch aus Ado­be Ligh­troom oder einem ande­ren Bild­be­ar­bei­tungs­pro­gramm raus­las­sen.

pi@pictureframe:~ $ python3 exif_date_check.py
-------------------Invalid Valid EXIF DATE Finder-----------------------
Directory Selected is : /home/pi/Pictures/Photos/
---------Scanning-------------
/home/pi/Pictures/Photos/2013/2013 Scotland/13W_6753.jpg
/home/pi/Pictures/Photos/2008/2008 South Africa/2008 South Africa - 0888.jpg
/home/pi/Pictures/Photos/2008/2008 South Africa/2008 South Africa - 1577.jpg
/home/pi/Pictures/Photos/2008/2008 South Africa/2008 South Africa - 0981.jpg
/home/pi/Pictures/Photos/2008/2008 South Africa/2008 South Africa - 1632.jpg

Was die Zukunft bringt

Die­ses Skript führt jetzt nur eine Prü­fung der Exif Daten dei­ner Bil­der­samm­lung durch. Das ist aber wich­tig, wenn du spä­ter Smart­lis­ten, die auf dem Datums-Tag basie­ren, nut­zen willst.

Es ist der ers­te Schritt eines grö­ße­ren Updates, das Pad­dy und ich mit dem Pi3D Bild­be­trach­ter vor­ha­ben.

Wir wol­len näm­lich zukünf­tig Smart­fil­ter auf Exif und IPTC Daten erlau­ben. Das wür­de dann einen Fil­ter auf Datum, Orte, Per­so­nen oder ande­re Schlüs­sel­wör­ter ermög­li­chen.

Und wenn man dann noch wei­ter geht, wür­de man all die­se Fil­ter ganz ein­fach über Ale­xa oder Google Home auf­ru­fen kön­nen. Wir sind ja faul und wol­len es ein­fach haben.

Eine auf­ge­räum­te und gepfleg­te Bil­der­samm­lung ist dafür aller­dings die Vor­aus­set­zung, und genau da setzt die­ses klei­ne Python Skript an.