Kamera mit gphoto2 fernsteuern

gphoto2 ist ein mächtiges Tool, um unter Linux auf Digitalkameras (DSLR, aber auch andere) zuzugreifen. Die Funktionen reichen vom Auslesen von Parametern bis zur Fernsteuerung der Kamera. Mit ein paar Zeilen PHP-Code ist sogar eine Steuerung der Kamera über den Browser möglich.

Anwendungsszenarien

Es gibt viele Gründe, um eine Digitalkamera per USB über einen Rechner zu steuern. Die häufigsten sind:

  • das Auslesen von Kamera-Daten (Modell, Hersteller, Anzahl Aufnahmen/Shuttercount)
  • Fernsteuerung der Kamera: Auslösen oder Blende/Belichtungszeit/ISO anpassen, ggf. auch von einem anderen Ort aus (Fernzugriff über das Web)
  • Direkte Übertragung der Fotos und Beurteilen der Aufnahmen am Monitor
  • Serienaufnahmen, z.B. Zeitraffer, Belichtungsreihen, Bracketing
  • Zeitgesteuerte Aufnahmen
  • Automatisierte Aufnahmen über Skripte, z.B. Fotobox (Photobooth)

Prüfung: Wird meine Kamera unterstützt?

Auf der folgenden Webseite könnt ihr nachschauen, ob Eure Kamera grundsätzlich unterstützt wird und in welchem Umfang.

http://www.gphoto.org/proj/libgphoto2/support.php

Installation checken

Ich setze einfach mal Linux-Grundkenntnisse voraus. Das Paket gphoto2 sollte in allen Distributionen vorhanden und über die Paketmanager bzw. die Kommandozeile zu installieren sein.

Ob die Installation geklappt hat, kann über die Kommandozeile überprüft werden:

gphoto2 -v

Es sollten die Version und einige zusätzliche Infos angezeigt werden.

Kamera verbinden und Zugriff testen

Jetzt kann die Kamera per USB mit dem Rechner verbunden werden. Meist wird sie nach dem Einschalten als Laufwerk angezeigt, sodass man sofort auf die Speicherkarte zugreifen kann. Das ist aber bei unserem Vorhaben hinderlich. Also: Kamera aushängen!

Wichtig: Prüfen ob die Kamera das Laufwerk eingehängt ist.
Falls ja: Jetzt das Laufwerk aushängen!
Sonst kann gphoto2 nicht exklusiv auf die Kamera zugreifen

Mit folgendem Befehl testen wir, ob die Kamera erkannt wird:

gphoto2 --auto-detect

Hier sollte jetzt die angeschlossene Kamera aufgelistet werden.

Mehrere Kameras angeschlossen?

Bei den nachfolgenden Beispielen gehen wir davon aus, dass nur eine Kamera angeschlossen ist. Es ist dann nicht notwendig, gphoto2 den Namen der Kamera mitzuteilen. Sie wird immer automatisch gefunden.

Falls Ihr aber mehrere Kameras angeschlossen habt, dann müsst Ihr gphoto2 bei jedem Befehl mitteilen, welche Kamera gerade angesprochen werden soll. Einfach den Namen aus der Liste, die bei --auto-detect ausgegeben wurde, übergeben.

Beispiel:
gphoto2 --camera="Canon EOS 1000D" ... weitere Befehle ...

Blende, Belichtungszeit, ISO

Meist sind es die drei Komponenten des Belichtungsdreiecks, die angepasst werden sollen: Blende (aperture), Belichtungszeit (shutterspeed) und die Empfindlichkeit (iso). Bei gphoto2 gibt es hierzu folgende Befehle:

gphoto2 --set-config-value aperture=8Blende 8 einstellen (Canon)
gphoto2 --set-config-value f-number=8Blende 8 einstellen (Nikon, Sony u. a.)
gphoto2 --set-config-value shutterspeed=1/125Belichtungszeit 1/125 s einstellen
gphoto2 --set-config-value iso=200ISO auf 200 einstellen

Wenn man die möglichen Einstellwerte der Kamera nicht genau kennt, kann man sie sehr einfach abfragen. Dieser Befehl listet beispielsweise die möglichen ISO-Werte auf:

gphoto2 --get-config iso

Wichtig:
Natürlich können nicht in jedem Kamera-Modus alle Parameter verändert werden. Im halbautomatischen Modus Blendenprioritätenmodus („A“ oder „AV“) kann die Blende eingestellt werden, die Einstellung der Belichtungszeit erfolgt automatisch. Im Modus Verschlusspriorität („TV“ oder „S“I ist es genau umgekehrt.

Wenn der manuelle Modus („M“ oder „Manuell“) ausgewählt ist, können alle Parameter manuell eingestellt werden.

Weitere Einstellungen

Je nach Kameramodell gibt es noch unzählige weitere Einstellungsmöglichkeiten. Eine Übersicht darüber liefert folgender Befehl:

gphoto2 --auto-detect --list-config

Probiert einfach mal durch, welche Parameter in dieser Liste auftauchen, versucht mit --get-config die Einstellmöglichkeiten auszulesen und sie mit --set-config zu setzen. In vielen Fällen wird es funktionieren.

Foto aufnehmen und herunterladen

Wenn alles eingestellt ist, können wir uns an die erste Fernauslösung der Kamera heranwagen.

gphoto2 --capture-image-and-download

Es ist zu empfehlen, das Verzeichnis und einen eindeutigen Dateinamen zu übergeben. Eine gute Lösung ist es, wenn man das Datum und die Uhrzeit benutzt:

gphoto2 --capture-image-and-download --filename "/home/username/Fotos/%Y%m%d%H%M%S.JPG"

Soll das Foto in dem bereits in der Kamera ausgewählten Dateiformat (JPG oder RAW) gespeichert werden, dann als Dateiendung „.%C“ nutzen, also folgender Befehl:

gphoto2 --capture-image-and-download --filename "/home/username/Fotos/%Y%m%d%H%M%S.%C"

Ist in der Kamera „JPG+RAW“ ausgewählt, wird das Foto sogar in beiden Dateiformaten auf den Rechner übertragen bzw. auf die Speicherkarte geschrieben.

Befehle kombinieren

Statt zuerst die Blende, dann Belichtungszeit und ISO einzustellen und dann noch den Auslöser zu betätigen, kann man auch mehrere Befehle kombinieren. Das ist bequem und führt dazu, dass sie schneller abgearbeitet werden.

gphoto2 --set-config-value aperture=8 --set-config-value shutterspeed=1/125 --set-config-value iso=200 --capture-image-and-download --filename "/home/username/Fotos/%Y%m%d%H%M%S.JPG"

Serienaufnahmen

Auch eine Serie lässt sich mit diesem Befehl realsieren. Einfach die Anzahl der aufzunehmenden Fotos (-F) und Wartezeit zwischen den Aufnahmen (-I) in Sekunden hinzufügen:

gphoto2 --capture-image-and-download -F 3 -I 5 --filename "/home/username/Fotos/%Y%m%d%H%M%S.JPG"

Keine Lust auf Kommandozeile?

Wem das Tippen der einzelnen Befehle zu mühsam ist, der kann auch entsprechende grafische Benutzeroberflächen unter Linux finden. Viele basieren auf gphoto2, so z.B. Entangle.

Eigene Programme mit gphoto2

Man kann gphoto2 aber auch in eigenen Programmen nutzen. Selbst die Bedienung über den Browser (mit entsprechenden PHP-Skripten) funktioniert.

Voraussetzung dafür ist allerdings, dass PHP exec-Befehle ausführen darf. Normalerweise stellt das natürlich ein Sicherheitsrisiko dar. Unsere Kamera ist aber an einem Heimrechner angeschlossen und der Zugriff erfolgt in der Regel ja nur lokal. Hier kann man dies erlauben.

Hier ein Beispiel, wie man die möglichen Isowerte abfragen und ausgeben kann.

<?php
$check=shell_exec("gphoto2 --get-config iso");
echo "<pre>".print_r($check,true)."</pre>";
?>

Und so wird auf Tastendruck ein Foto geschossen und angezeigt:

<?php
echo "<p><a href=" . $_SERVER['PHP_SELF'] . "?do=1>Foto</a></p>";
if ($_GET['do']) {
    $foto_filename = time() . ".JPG";
    $check = shell_exec("gphoto2 --capture-image-and-download --filename \"" . $foto_filename . "\"");
    echo "<img width=640px src='" . $foto_filename . "'>";
    echo "<pre>" . print_r($check, true) . "</pre>";
}
?>

Ausblick:

Ich werde demnächst weitere Skripte hier veröffentlichen, u.a. eine komplexe Fernbedienung, die komplett im Webbrowser läuft.

Schreibe den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert