[geloest] CLI Tool um JPEG IPTC Keywords zu setzen

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

[geloest] CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von C_A » 18.08.2008 13:54:36

Ich suche ein commandline Tool mit dem ich IPTC Stichwoerter/Keywords von jpeg Bildern setzen kann.
Als erstes hab ich dafuer mal die diesbezueglichen Funktionen von ImageMagick angesehen, dies ist aber laut Aussagen [1] auf der Mailinglist nicht dazu gemacht diese Arbeit auszufuehren.

[1] http://www.imagemagick.org/pipermail/ma ... 04575.html
http://www.imagemagick.org/pipermail/ma ... 18178.html

Als weitere Idee haette ich noch ein Python Modul [2] gefunden das IPTC Daten von Bildern veraendern kann.

[2] http://pypi.python.org/pypi/IPTCInfo/

Falls sich nichts anderes finden laesst werde ich wohl dieses Python Modul verwenden, wuerde mich aber ueber weitere Tools/Ideen von euch freuen bevor ich mich entscheide.

Hintergrund:
Bisher wurden alle Informationen/Stichwoerter der Bilder im Dateinamen festgehalten, Beispiel:
DeutschlandMuseumArchaeologieKunstDedorf.jpg
Die Suchfunktionen der Bildverwaltungsprogramme [3] scheinen aber nicht gut genug zu sein um jetzt zB alle Bilder mit Bedorf und Museum im Dateinamen zu finden. Wuerde dies als IPTC Daten festgehalten worden sein koennte man dies leichter finden.

[3] getestet: picasa
ACDSee
xnview

Es sollen dann damit ~50.000 Dateien mit IPTC Stichwoerter aufgrund Ihrer Dateinamen versehen werden, wobei ein Stichwort soweit geht bis das naechste Wort beginnt (CamelCase) da man ansonst an das 64 Zeichen Limit von IPTC Keywoerter stoesst. Die oben genannte Datei sollte also mit den 5 Keywords Deutschland, Museum, Archaeologie, Kunst und Dedorf versehen werden. Im Normalfall handelt es sich hier eingentlich um ein Windows System, die Bilder werde ich allerdings unter Linux mit IPTC Daten betanken da ich mich damit besser auskenne (obwohl Python wuerde es auch fuer win geben)

danke
C_A
Zuletzt geändert von C_A am 19.08.2008 21:19:03, insgesamt 1-mal geändert.

joachimj
Beiträge: 10
Registriert: 17.08.2008 20:40:13

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von joachimj » 18.08.2008 15:01:20

Hi!

Hast Du dir schon *exiftool* angesehen?
http://www.sno.phy.queensu.ca/~phil/exiftool/

Ist im Prinzip ein Perl-Modul, wird aber auch als fertiges Script installiert und ist als Package unter Debian verfügbar.
Es gibt aber auch eine Standalone-Exe Version für Windows.

Gruß,
Joachim.

Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von C_A » 18.08.2008 15:34:38

Damit kann man IPTC Keywords setzen die laenger als 64 Zeichen sind - ob da nicht irgendwo ein Programm abstuerzt...

Code: Alles auswählen

exiftool -IPTC:Keywords=Cah2aiQuo8Ud4yohchoe2bue8ieso8iejibahlik5la7teiQuu8EiBew3aem1ieXo bcf.jpg

Auch komisch: Die manpage sagt

Code: Alles auswählen

-1IPTC:Keywords
funktionieren tuts aber nur mit

Code: Alles auswählen

-IPTC:Keywords

joachimj
Beiträge: 10
Registriert: 17.08.2008 20:40:13

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von joachimj » 18.08.2008 15:56:12

Na ja, falls ein Programm keinen Rangecheck machen sollte...

Aber wer weiß.

Die Manpage habe ich jetzt leider nicht im Zugriff. Aber lt. Doku der Homepage funktioniert es mit "-IPTC:"

Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von C_A » 18.08.2008 16:09:47

Ja weiter unten in der manpage stehts dann nochmal ohne der 1.

Fragt sich nur noch wie man in der bash aus einem langen CamelCase Wort die einzelnen Woerter raussplitted, bei dem Gedanken denke ich auch gern daran das ganze in Python zu machen *g

btw: gibts in Python dafuer schon eine Funktion um aus CamelCase ein Array ['Camel', 'Case'] zu machen? :)

joachimj
Beiträge: 10
Registriert: 17.08.2008 20:40:13

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von joachimj » 18.08.2008 16:43:40

Python ist jetzt nicht so mein Ding. Aber eine Funktion in Perl würd mir auch nicht einfallen...

Code: Alles auswählen

sub camel_case_split;

my $string = 'CamelCaseHagenDortmundBonn';

for (camel_case_split($string)) {
        print $_ . "\n";
}

#-----

sub camel_case_split {
        my @a = split /([A-Z])/, shift;
        my $i = 0;
        my @words;
        while ($i < @a) {
                if ($a[$i] =~ /.+/) {
                        push @words, $a[$i] . $a[++$i];
                }
                $i+=1;
        }
        @words;
}
gibt's aber bestimmt auch eleganter...

Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von C_A » 18.08.2008 17:14:10

Hab nach langem suchen doch noch was gefunden:

Code: Alles auswählen

def split_uppercase(string):
    return re.sub(r'([a-z])([A-Z])', r'\1 \2', string)
Fehlen noch die Zahlen..
Wie man exiftool so aufruft dass er in einem Schlag mehrere Keywords hinzufuegt hab ich auch noch nicht entdeckt.

Code: Alles auswählen

 exiftool -IPTC:Keywords="bla, blue" a.jpg
und

Code: Alles auswählen

exiftool -IPTC:Keywords='bla, blue' a.jpg
funktioniert zwar aber dann interpretiert er es als ein Stichwort und nicht zwei. Ansonsten bleibt mir nur das wiederholte aufrufen mit += anstatt nur = das ist bei vielen Dateien zeitaufwaendig.

joachimj
Beiträge: 10
Registriert: 17.08.2008 20:40:13

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von joachimj » 18.08.2008 18:35:26

:D gefällt mir. denn das Gute liegt so nah :D
(und ist manchmal so einfach)

Code: Alles auswählen

sub camel_case_split {
         $_[0] =~ s/([a-z])([A-Z])/$1 $2/g;
         split / /, $_[0];   # fuers array
}
Gruß,
Joachim.

Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von C_A » 19.08.2008 12:52:56

Optimal ist diese Splitfunktion noch nicht, ich hab noch ein paar replaces von _-,+ reingepackt.
Sachen wie "GROSSESHaus" zu spliten bleibt noch ungeloest damit kann ich aber leben da die Suche in IPTC Stichwoertern wie grep zu funktionieren scheint.

Die bisher funktionierende Version sieht so aus:
http://nopaste.debianforum.de/10460
btw: die nopaste Seite ist fast nicht lesbar - sorry

Jetzt moechte ich es - da ich schon python verwende - ganz OS unabhaengig machen.
Dazu muesste ich die Verwendung von 'find' (Zeile 35) durch eine python Funktion ersetzen und anstatt exiftools das IPTCinfo Modul [1] verwenden und hoffe dadurch auch eine Geschwindigkeitssteigerung zu erziehlen. Weiss aber nicht in wieweit ich dem IPTCInfo Modul vertrauen soll wenn es sich erst in '3 - Alpha' Entwicklungsstatus befindet.

[1] http://pypi.python.org/pypi/IPTCInfo/

Falls also jemand eine Funktion in python kennt die mir bei der Ersetzung des 'find /dir -type f -name "*.jpg"' helfen kann waere das super. :)

[edit]
bzgl. rekursive Suche mit Pattern hab ich was gefunden:
http://code.activestate.com/recipes/499305/

Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

Re: CLI Tool um JPEG IPTC Keywords zu setzen

Beitrag von C_A » 19.08.2008 20:01:40

Jetzt hab ich mal eine grundlegend funktionierende Vorabversion [1] mit den Aenderungen die ich machen wollte (find und exiftools ersetzt). Und von der Geschwindigkeit kommt es mir jetzt auch schneller vor.

[1] http://nopaste.debianforum.de/10468

Ich habe aber noch Probleme mit Woerter die Umlaute beinhalten, denn diese werden dann nicht richtig angezeigt. Manuelles setzen von Stichwoertern mit Umlauten in XnView ist aber ohne Fehler moeglich, es muss also an meinem Python Script liegen.

http://nopaste.debianforum.de/10470

Zeile 2 zeigt wie es sein sollte (ueber XnView gesetzt), Zeile 6 zeigt wie es ist (ueber Python gesetzt).
Ich wollte mir die auf der Modulseite [2] erwaehnten Variablen IPTCInfo.in_charset bzw out_charset ansehen, mit print kann man die jedenfalls nicht ausgeben :)

[2] http://pypi.python.org/pypi/IPTCInfo/

Wenn jemand einen Tipp zu dieses Zeichensatzproblem hat waer das super

[edit]

Code: Alles auswählen

info.out_charset=info.inp_charset
war des Raetzels Loesung :)

Antworten