[Lua] Exif-Benutzer-Kommentar interaktiv in JPG einfügen

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Exif-Benutzer-Kommentar interaktiv in JPG einfügen

Beitragvon msl » 04.05.2012, 20:43

Hallo CHDK-Bastler,

bei Exif-Benutzer-Kommentar (User Comment) klingelt es bestimmt bei einigen. Richtig, da gab es schon das hervorragendes Projekt TagMe von stift.

Das eigentliche Hauptskript ist etwas in die Jahre gekommen und funktioniert auf neueren Kameras ohne Änderung nicht so richtig. Das Projekt TagMe enthält aber auch das geniale zeitlose Lua-Modul EXIFModule. Dieses ist universell einsetzbar.

Mit der neuen modularen CHDK-Version stehen uns nun einige interaktive Funktionen zur Verfügung. Diese ermöglichen neue Skriptkonzepte. So kann mit dem im Anhang befindlichen Skriptpaket ein Benutzerkommentar in die Exif-Daten geschrieben werden, um das Bildmaterial zu katalogisieren. Das ging prinzipiell auch schon mit dem Projekt TagMe. Neu ist, dass man mit Hilfe von CHDK eigene Kommentareinträge schreiben und in einer Liste speichern kann.

Skriptbenutzung:

Vorausetzung:

-modulare CHDK-Version
-Skriptdateien user_tag.lua und EXIFModule.lua im gleichen Verzeichnis auf der SD-Karte

Bedienung:

Als Skript-Parameter kann die Benutzersprache eingestellt werden. Zur Auswahl stehen Deutsch und Englisch. Voreingestellt ist Deutsch. Alles weitere erfolgt über ein Skript-Menü.

[hoch, runter] Tag - Auswahl der Benutzerkommentare aus einer Liste
[links] Add - Einfügen eines neuen Benutzerkommentars unter Verwendung der Textbox. Die Bedienung der Textbox ist im CHDK-Handbuch beschrieben.
[rechts] Pic - Auswahl der Bilddatei, die kommentiert werden soll.
[SET] Exif - Schreiben des Benutzerkommentars in ausgewählte Bilddatei
[MENU] END - Skript beenden

Bei Skriptstart überprüft das Skript, ob eine Datei tags.txt vorhanden ist. Wenn nicht, wird eine solche Datei erstellt. Diese Datei enthält eine Liste von Standardstichworten, die als Benutzerkommentare ausgewählt werden können. Über die Textbox erzeugte Stichworten werden automatisch in dieser Datei gespeichert und stehen bei einem erneuten Skriptstart sofort zur Verfügung.

Die Datei tags.txt kann auch am Rechner bearbeitet und ergänzt werden. Dabei ist zu beachten, das als Steuerzeichen am Zeilenende nur ein LF (Linefeed) stehen sollte. Ein CR (Carriage Return) erzeugt ein Sonderzeichen bei der Darstellung im CHDK-Skript. CR wird in der Windows-Welt durch Enter erzeugt, kann aber mit einem Editor wie Notepad++ entfernt werden.

Das Skript stellt einen ersten Entwurf dar, um die neuen Möglichkeiten der modularen CHDK-Version sinnvoll anzuwenden. Ideen und Vorschläge zur Skripterweiterung sind willkommen.

Gruß msl
Dateianhänge
user_tag.zip
user_tag.lua & EXIFModule.lua
(5.14 KiB) 945-mal heruntergeladen
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Exif-Benutzer-Kommentar interaktiv in JPG einfügen

Beitragvon Sinter » 07.05.2012, 13:02

Hallo Msl,

ja, das interessante TagMe von Stift habe ich auch öfter in Gedanken, habe es aber noch nie angewendet.

Schön wäre noch, wenn man den jeweils zu überwindenden Aufwand nochmals weiter absenken könnte. Für viele Anwedungen benötigt man eigentlich gar keine Interaktion, sondern es wäre hilfreich, wenn mittels einfachen Befehls alle notwendigen Prozesse unsichtbar und automatisiert im Hintergrund erledigt würden.

Die Situation für mich besteht aus zwei Aspekten, die ich in Lua zum Ausdruck bringen muss:
Erstens: Ich habe paar Daten zum Eintrag in die EXIF = "Text" (liegt vor)
Zweitens: Ich möchte diese einfach in die Exif werfen = entsprechender Lua-Befehl (den es aber noch nicht gibt)

Beides miteinander kombiniert soll dann bitte alles rundherum automatisch erledigen.

Insbesondere in normalen Lua-Skripten würde man gerne manche Info in den Exif mit hinterlegen. Vielleicht sogar einige Log-Daten, die sich innerhalb des Skripts (vor oder auch nach dem Shooting) ergeben. Ich habe mich aktuell noch nicht damit befasst, wie groß das Datenfeld "User-Comment" genutzt werden kann, und ob man vielleicht sogar Linefeeds eintragen kann um eine kleine Liste zu hinterlegen.

Jedenfalls wäre als "kleine" Lösung hilfreich, einfach einen Befehl

write_next_picture_exif_user_comment("Text")

sowie
write_last_picture_exif_user_comment("Text")

zur Verfügung zu haben. Ob als separater Lua-Befehl, oder als Lua-Function.

Dann könnte man bei
write_next_picture_exif_user_comment("Text")
beispielsweise zuerst eine Messung starten, und diese Messdaten dann beim eigentlichen Shooting des nächsten Fotos als Exif-Eintrag einspeisen.

Umgekehrt bei
write_last_picture_exif_user_comment("Text")
vielleicht auch nachträglich, falls man zuerst ein Foto machen muss, um dessen Bilddaten nachträglich zu analysieren und in die Exif des zuletzt gemachten Fotos nachzutragen, beispielsweise bei get_histo_range().


Die "nachträgliche" Lösung könnte allerdings etwas schwieriger sein, da es wohl nicht so einfach ist, das zuletzt gemachte Foto auf der SD-Karte zu bestimmen/suchen/finden. Schließlich gibt es auch den Überlauf bei der Nummerierung, falls man zufällig über Foto 9999 hinaus kommt.
Allerdings würde die "nachträgliche" Lösung zugleich abdecken, bereits vor dem Shooting gemachte Daten zu hinterlegen. Dann würde dieser eine Befehl sogar ausreichen, sofern der andere Befehl nicht vielleicht noch andere Vorteile hätte (z. B. weniger SD-Karten-Zugriffe).


Viele Grüße,
Sinter
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München

Re: Exif-Benutzer-Kommentar interaktiv in JPG einfügen

Beitragvon msl » 07.05.2012, 20:02

Hallo Sinter,

ich hatte das Skript eigentlich nicht für Analysezwecke entworfen. Dafür ist Interaktivität nicht unbedingt brauchbar. Da werden eher Automatismen gesucht.

Mein Anliegen war, eine einfache Möglichkeit zu schaffen, unterwegs direkt mit der Kamera Informationen in die Bilddatei zu schreiben. Dabei kann man sich mit einer vorbereiteten Stichwortliste behelfen. Besser ist aber die Möglichkeit, einen Text mit der Kamera zu schreiben. Dann kann ich auch auf Unvorhersehbares reagieren. Und da hilft die Texteingabebox der modularen CHDK-Version enorm.


zu den gewünschten Funktionen:

Beim Exif-Benutzer-Kommentar-Eintrag mit dem EXIF-Lua-Modul sind wohl bis zu 255 Zeichen möglich. Bei dieser Länge wären sicherlich auch diverse Logeinträge realisierbar. Die gewünschten Funktionen sollte per Lua realisierbar sein. Die Hauptarbeit ist durch das EXIF-Modul Dank stift schon erledigt. Da brauchen wir CHDK selbst nicht zu strapazieren.

Das Auffinden der letzten Datei ist schon etwas heikler, aber auch machbar. Die bisher angewandte Technik, alle Verzeichnisse und Dateien in Tables zu sammeln und nach der letzten Datei zu suchen, hat sich als Fehlerquelle herausgestellt, weil diese Methode speicherintensiv ist. Besser wäre, mit get_exp_count() zu arbeiten. Dieser Befehl gibt die vierstellige Nummer der letzten JPG-Datei zurück. Damit kann man den Dateinamen des letzten Bildes zusammenbauen und danach suchen.

Gruß msl
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4567
Bilder: 271
Registriert: 22.02.2008, 11:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a

Re: Exif-Benutzer-Kommentar interaktiv in JPG einfügen

Beitragvon Sinter » 09.05.2012, 11:58

Hallo Msl,

ja, ich verstehe, eine Stichwortliste ist durchaus interessant. Im Alltag meidet man gerne die Hürde einer Texteingabe. Die Vielfalt der Eingabemöglichkeiten schenkt dem User die Freiheit, über Details und Umfang der Einträge selbst zu entscheiden.

Ein Volumen von 255 Zeichen für das Datenfeld ist sehr hilfreich. Damit lassen sich viele Infos direkt in den Bildfile loggen.

Eine Erleichterung wäre es auf jeden Fall, wenn man einen einfachen „Befehl“ zur Verfügung hätte, um Infos in das Datenfeld zu werfen. Ein separates require davor kann ich auch noch locker akzeptieren. Aber falls wir den Befehl als Lua-Function realisieren, dann kann man ein require vielleicht sogar in die Function integrieren. Evtl. müssen wir vielleicht noch händeln, dass zweimalige require-Aufrufe innerhalb eines einzigen Skriptablaufs vielleicht nicht erlaubt oder nicht abgefangen sind.
Auch wäre zu klären, ob man Daten im Datenfeld anhängen kann, oder ob man stets sämtliche gewünschte Daten in einem Rutsch hineinschreiben muss.

get_exp_count() verwende ich ebenfalls schon in einigen Testskripten. Allerdings nicht zur Suche. Bei solch einer Suche nach Files könnte sich noch als Hürde erweisen, vielleicht mehrere verschiedene existierende Verzeichnisse nach dem letzten File absuchen zu müssen.
Zudem kann man get_exp_count() vielleicht nicht nach einem Neustart der Kamera sachgemäß anwenden. Beispielsweise hat Naddel die tolle Möglichkeit programmiert, (auch nach einem Neustart der Kamera) ohne direkt eine Aufnahme zu machen, das zuletzt gemachte Bild mittels Verlaufsfilter (oder früher ebenfalls Curve) neu zu entwickeln. Ob zur Suche des letzten Fotos die alternative Anwendung von get_exp_count() ein sachlich korrektes Ergebnis liefern würde, habe ich noch nicht ausprobiert. Vielleicht könnte das tatsächlich klappen, denn die Kamera merkt sich ja eigentlich auch beim Ausschalten (!) den laufenden Bildzähler nud macht dann beim nächsten Einschalten wieder mit dem Zähler weiter.

Viele Grüße,
Sinter
Ixus 60 (SD600) Firmware 1.00a
CHDK-DE aktuelle Version
Benutzeravatar
Sinter
CHDK-Begeisterter
CHDK-Begeisterter
 
Beiträge: 416
Bilder: 2
Registriert: 14.08.2009, 13:16
Wohnort: München


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 24 Gäste