vrijdag 7 augustus 2015

Exif data extraheren en omvormen naar XML

In een collectieregistratiesysteem worden digitale bestanden (scans, foto’s e.d.) van objecten en de metadata (informatie over deze objecten) opgeslagen en aan elkaar gekoppeld.

Niet alle heemkundekringen beschikken al over een collectieregistratiesysteem en proberen hiervoor creatieve oplossingen te vinden. Een van deze oplossingen is om gegevens over objecten op te slaag in de exif-data van scans of foto’s die van deze objecten zijn gemaakt. Een voordeel hiervan is dat de gegevens altijd samen met het digitale bestand bewaard blijven. Maar dit heeft ook als nadeel dat deze informatie niet makkelijk op te vragen, te bewerken en te kopiĆ«ren is.

Voor een Heemkundekring die hun digitale bestanden en de gegevens die hiervan in deze bestanden zijn vastgelegd willen importeren naar een collectieregistratiesysteem hebben wij een oplossing proberen te zoeken.

Doel

Het achterhalen van  alle door de heemkundkring aan afbeeldingen toegevoegde metadata en deze geschikt maken om in een collectieregistratiesysteem te importeren.

Stappenplan

  • Verzamelen alle digitale bestanden in een map
  • Extraheren van de exif-data van alle afbeeldingen in een specifieke map en deze opslaan in een txt-bestand
  • Omvormen van de data in het txt-bestand naar een standaard (CSV of XML) bestand

Toepassingen

Voor het uitvoeren van deze stappen hebben wij de volgende programma's geinstalleerd op een van onze Apple macs met OSX 10.9.5
  • Exiftools
    Een applicatie waarmee de metadata van verschillende bestandstypes gelezen, beschreven en aangepast kunnen worden 
  • Bbedit
    Een teksteditor waarbinnen gebruik gemaakt kan worden van Regular Expressions om teksten aan te passen.

Werkwijze

Nadat wij alle bestanden in een map (map1) hebben verzameld hebben, is in de terminal van OSX het volgende commando gebruikt om alle EXIF data, uit alle bestanden in map1 en op te slaan in een txt document met de naam metadata.txt.
exiftool -a /Users/jeroenvanbeijnen/Downloads/Nieuwe\ map\ met\ inhoud/EXIFData/map1 > metadata.txt
Het resultaat is een tekstbestand waarin alle Exif data van alle bestanden op de volgende wijze is beschreven.
======== /Users/jeroenvanbeijnen/Downloads/Nieuwe map met inhoud/EXIFData/map1/hkk20001.jpg
ExifTool Version Number         : 9.99
File Name                       : hkk20001.jpg
Directory                       : /Users/jeroenvanbeijnen/Downloads/Nieuwe map met inhoud/EXIFData/map1

...

Image Size                      : 522x745
Megapixels                      : 0.389
Thumbnail Image                 : (Binary data 2935 bytes, use -b option to extract)
======== /Users/jeroenvanbeijnen/Downloads/Nieuwe map met inhoud/EXIFData/map1/hkk20002.jpg
ExifTool Version Number         : 9.99
File Name                       : hkk20002.jpg

Als wij dit bestand openen in BBedit, kunnen wij het met de volgende Regular Expression opdrachten in het zoeken en vervangen venster het tekstbestand bewerken.
find:  File Name                       : (.*)
replace: <image>\1</image>
find: ^.*(MIME|JFIF|Resolution Unit|X Resolution|Y Resolution| etc...).*$
replace:
Sommige opdrachten moeten meerdere keren herhaald worden, en uiteraard zal de XML tag toegevoegd moeten worden, maar het idee is duidelijk. Uiteindelijk hebben wij hetvolgende XML bestand
<?xml version="1.0" encoding="utf-8"?>
<record>
  <image>hkk20001.jpg</image>
  <title>Piet van Adrichem</title>
  <description>pater Piet van Adrichem, geb. 4-9-1909, overl. 27-6-1990. Lid van de Congregatie van de H. Geest, foto van bidprentje,</description>
  <subject>geestelijke</subject>
  <type>portret</type>
</record>
<record>
<image>hkk20002.jpg</image>XP Title : Martinus Cornelis Aarts
<description>Missionaris Martinus Cornelis Aarts, geb. 15-9-1910, overl. 30-5-1995. Congregatie van de H. Geest. foto van bidprentje.</description>
<subject>geestelijke</subject>
<type>portret</type></record>
<record>
Vermoedelijk kunnen wij een hierin een hoop stappen vervangen door binnen exiftool alleen die velden op te vragen die wij echt nodig hebben. Dit moeten wij op een later moment nog een keer verder uitproberen.