Metadaten und Archäologie: Von Funden, Photos und QR Code | archaeometallurgie.de

Metadaten und Archäologie: Von Funden, Photos und QR Codes – Teil 2

Bastian Asmus

In diesem zweiten Teil dreht sich alles ums Automatisieren. Es geht es darum unseren Photos automatisch Metadaten hinzu zu fügen. Ich nutze derzeit darktable um meine Kamera vom Computer aus fern zu steuern, digikam um meine Photos zu verwalten, und zwei kleine Bash Skripte, die dafür sorgen, dass die QR Codes ausgelesen und in die Metadaten des Photos geschrieben werden. Die Software, die dafür benötigt wird lässt sich bei Ubuntu aus den Paketquellen installieren. Wir benötigen:

Da es nicht möglich die Metadaten direkt während des Photographierens zu schreiben, so wie das beispielsweise mit GPS Daten funktioniert, habe ich mich dazu entschieden die nächstbeste Variante zu nehmen: Die Metadaten werden geschrieben, wenn das Photo im Dateisystem erscheint. Wenn man das nicht möchte, kann man die Daten auch per Stapelverarbeitung auf Verzeichnisebene durchführen lassen, und die Daten nachträglich einlesen lassen. Um die QR Codes zu erzeugen kommt ebenfalls ein Skript zur Anwendung, welches die Metadaten aus einer CSV Datei liest. Ergebnis ist ein PDF Dokument mit ausdrukbaren Etiketten.

 Automatisiertes Erstellen von QR Codes: qrcodes.sh

Die Basisidee des Skripts stammt von hier. Das Skript liest eine CSV Datei ein. Die CSV Datei hat vier Spalten mit den Überschriften: Fundplatz, Fund Nr., Befund Nr. und Material, wobei diese Überschriften beliebig gewählt werden können. Die generierten QR Codes werden samt Beschreibung mit Latex in ein PDF Dokument gesetzt. Hierzu wird das Labels Paket genutzt.

#!/bin/bash
#qrcode.sh v0.4
#25.10.2014
#B. Asmus
#
#Dieses Skript erstellt Qr Codes aus einer CSV Datei, 
#wobei die ersten 4 Spalten genutzt werden:
#Funplatz, Fundnr, Befundnr, Material
#
#Es wird eine maschinenlesbare Variable erstellt ($qr),
#die zur Erstellung des QR Codes dient.
#Es wird eine weitere Variable erstellt, die für den Menschen
#lesbar ist ($des).
#Die erzeugte png Datei wird mittels LaTex (package: labels) 
#mehrspaltig gesetzt.
#Das Grundkonzept wurde von hier übernommen:
#http://forum.ubuntuusers.de/topic/viele-bilder-auf-jeweils-einer-dina4-seite-ano/
#
daten=$1
latex=""
fch=`csvtool sub 1 1 1 1 $daten` 	#fch, first column heading, usually "Site"
echo "fch: "$fch
if [ -z "$fch"]; then
fch1=$fch	
else
 fch1="$fch: "
fi 
fid=`csvtool sub 1 2 1 1 $daten | sed -e 's/ /\-/g'`	 #fid First ID, the more important ID, Find id
if [ -z "$fid"]; then
fid1=$fid	
else
 fid1="$fid: "
fi 
sid=`csvtool sub 1 3 1 1 $daten| sed -e 's/ /\-/g'` 	#sid secondary ID, some redundancy is good, e.g. Feature No...
if [ -z "$sid"]; then
sid1=$sid	
else
 sid1="$sid: "
fi 
mat=`csvtool sub 1 4 1 1 $daten| sed -e 's/ /\-/g'`	#mat, material, description, etc..
if [ -z "$mat"]; then
mat1=$mat	
else
 mat1="$mat: "
fi 
for i in $(seq 1 `wc -l $daten | cut -d" " -f1`) #lese die Daten aus der Csv Datei ein
do
qr=`csvtool sub $i 1 1 1 $daten | sed -e 's/ /\_/g'`" $fid "`csvtool sub $i 2 1 1 $daten`" $sid "`csvtool sub $i 3 1 1 $daten |sed -e 's/ /\_/g'`" Material "`csvtool sub $i 4 1 1 $daten | sed -e 's/Schlacke/slag/g' -e 's/Erz/ore/g' -e 's/Gangart/gangue/g'`         
des="$fch1"`csvtool sub $i 1 1 1 $daten`", $fid1"`csvtool sub $i 2 1 1 $daten`", $sid1"`csvtool sub $i 3 1 1 $daten`", $mat1"`csvtool sub $i 4 1 1 $daten`         
qrencode "$qr" --size=16 -o qr.png
convert -background white -pointsize 100 -fill black -size 1560 -gravity West caption:"$des" des.png 
montage -geometry +0+0 -density 300x300 -units PixelsPerInch qr.png des.png pic${i}.png 
latex=$latex"\\includegraphics[height=1.4cm]{pic${i}.png}

"
rm qr.png des.png
done

# PDF erstellen
echo "\\documentclass{article}
\\usepackage{labels}
\\usepackage{graphicx} 
\\begin{document}
\\LabelCols=3	% Number of columns of labels per page
\\LabelRows=10		% Number of rows of labels per page
\\LeftBorder=8mm	% Space added to left border of each label
\\RightBorder=8mm	% Space added to right border of each label
\\TopBorder=9mm		% Space to leave at top of sheet
\\BottomBorder=2mm	% Space to leave at bottom of sheet
\\LabelSetup% 
\\begin{labels}
$latex
\\end{labels}
\\end{document}" > Qr-Code-labels.tex
pdflatex Qr-Code-labels.tex
rm Qr-Code-labels.aux
rm Qr-Code-labels.log
exit

Die Teile die zur Erstellung des QR Codes benutzt werden, habe ich bereits im ersten Teil hinreichend beschrieben. Der PDF Teil ist einfach: Ein echo Befehl wird in eine Textdatei umgeleitet: QR-Code-labels.tex. Diese wird mittels pdflatex gesetzt. Danach werden die Protokoll- und Hilfsdateien gelöscht. Man hat die Möglichkeit das Layout zu verändern.

Die Größe des ausgedruckten Qr Codes lässt sich in dieser Zeile verändern:

latex=$latex"\\includegraphics[height=1.4cm]{pic${i}.png} "

Wenn man diese Zeile abändert kann man ein mehrspaltiges Dokument erzeugen.

\\LabelCols=3 % Number of columns of labels per page

Wenn man diese Zeile ändert lassen sich die Anzahl der Reihen verändern:

\\LabelRows=10 % Number of rows of labels per page

Weitere Änderungen lassen sich analog zu den obigen durchführen.

Die so erzeugte PDF Datei hat beispielsweise folgendes Aussehen:

pdfetiketten

DINA4 Ausdruck des vom qrscript.sh erzeugten Dokuments.

Diese Etiketten müssen ausgeschnitten und den Fundstücken beim Photographieren beigelegt werden. Mit dem nächsten Skript lesen wir dann die Information aus dem QR Code aus und schreiben diese in die Metadaten der Photos.

Schreiben der Metadaten: add_meta_data_from_qrcode.sh

Die Metadaten die in den Photos vorliegen, werden mit Hilfe dieses Skripts in die Photos geschrieben. Hierzu überwacht das kleine Programm inotiy das Dateisystem. Nachdem eine Datei in einem überwachten Verzeichnis udn Unterverzeichnis aufgetaucht ist, wird das Kommando zu Auslesen des QR Codes aufgerufen.. Die ausgelesenen Daten werden formatiert und mit Hilfe von exiftool in die Photos geschrieben.

#!/bin/bash
#add_meta_data_from_qrcode.sh v0.2
#
#Bastian Asmus 25. Oktober 2014
#Inotify wartet auf eine Datei die irgendwo unterhalb des 
#darktable Verzeichnisses erscheint, liest den QR code 
#aus und schreibt die Daten in den xmp-lr namespace  
#als hierarchical subject, denn dieses kann von digikam 
#unter Metadaten erneut eingelesen und direkt in 'Meine 
#Stichwörter' übernommen werden.
#Konventionen: CSV Spalte1: Fundplatz, Spalte 2: Fund Nr, 
#Spalte 3: Befundnr (o.ä.), Spalte 4: Material

inotifywait -m -r /Pfad/zu/Photos/von/darktable/ -e create |
    while read path action file; do
        echo "The file '$file' appeared in directory '$path' via '$action'"
	if [[ $file = *.jpg ]]
	then 
	wait
	# decode and escape space and insert space after commas
	tags=(`zbarimg --raw $path$file | sed -e 's/,/\\ /g'`)	
	exiftool -xmp-lr:HierarchicalSubject="${tags[0]/_/ }" -xmp-lr:HierarchicalSubject="${tags[0]/_/ }/${tags[1]} ${tags[2]}" -xmp-lr:HierarchicalSubject="${tags[5]}/${tags[6]}" -xmp-lr:HierarchicalSubject="${tags[5]}" -xmp-microsoft:LastKeywordXMP="${tags[*]}" -xmp:subject="${tags[*]}" \-xmp:creator="Dr. Bastian Asmus" $path$file
	
	echo "Dies ist der QR code der decodiert wurde: "$tags
	fi     
  done

Zur Anwendung muss das Skript add_meta_data_from_qrcode.sh im Terminal aufgerufen und ausgeführt werden. Dann startet inotify die Überwachung des Verzeichnisses, in dem die Photos auftauchen. Das Skript schriebt die Metadaten asl hierarchical subject in den lightroom namespace. Es kann auch jeder andere namespace adressiert werden. Der lr-namespace hat sich aber für digikam als nützlich erweisen. Man kann damit aif ganz leichte Weise die Metadaten in digikams Datenbak  einlesen (Bild -> Metadaten aus dem Bild neu einlesen). Auf diese Weise stehen diese dann als Schlüsselwörter zur Verfügung.

Dies ist nur eine einfache Anwendung, die sich mit der Bash und freien Werkzeugen erreichen lassen. Für die Dokumentation vieler Funde hat sich dieses System bereits sehr bewährt. Ich habe nun mehr Zeit für andere Dinge (:
Wenn euch gefallen hat, was ihr hier lest, könnt Ihr gerne einen Kommentar hinterlassen.


One Response to “Metadaten und Archäologie: Von Funden, Photos und QR Codes – Teil 2”

Leave a Reply