Digitalkamera unter Linux
Willemers Informatik-Ecke
Für die Experimente habe ich eine Nikon D3300 verwendet und später noch eine Canon EOS 700D verwendet.

Auslesen der Bilder

An die Bilder einer Digitalkamera kommt man wohl am einfachsten, indem man die Speicherkarte aus der Kamera herausnimmt und ggf. über einen Adapter in den Computer einführt. Dort taucht die Karte als externes Laufwerk auf und kann entsprechend bearbeitet werden.

Die Digitalkameras haben in der Regel einen USB-Anschluss. Damit arbeiten sie als Adapter für ihre Speicherkarten. Die Kamera taucht also auch als externes Laufwerk auf. Allerdings kann der USB-Port bei einigen Kameras noch etwas mehr.

Mit dem Befehl lsusb kann eine Liste aller USB-Geräte angezeigt werden. Taucht die Kamera dort nicht auf, ist Anschluss oder Kabel defekt oder die Kamera schlicht nicht eingeschaltet.

Bus 002 Device 004: ID 08ff:2683 AuthenTec, Inc. 
Bus 002 Device 006: ID 0b97:7772 O2 Micro, Inc. OZ776 CCID Smartcard Reader
Bus 002 Device 003: ID 0b97:7761 O2 Micro, Inc. Oz776 1.1 Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 056a:0101 Wacom Co., Ltd 
Bus und Device geben den USB-Port auf dem Computer an. Die ID ist für ein angeschlossenes Gerät eindeutig. Sollte ein Treiber benötigt werden, dann ist diese Hexnummer eine gute Hilfe für die Suchmaschine.

Ganz rechts taucht der Name des Geräts auf. Dieser Name wird einfach übertragen. Das Auftauchen des Namens bedeutet nicht, dass das Gerät in seiner Funktionalität erkannt wird.

gphoto2

Das Programm gphoto2 wird über den folgenden Befehl als root installiert:
apt install gphoto2
Der Befehl gphoto2 --abilities ergibt bei der Nikon D3300 folgende Ausgabe:

$ gphoto2 --abilities
Fähigkeiten für Kamera           : Nikon DSC D3300                             
Unterstützung für seriellen Port : Nein
USB-Unterstützung                : Ja
Aufnahme machen (Auswahl)        :
                                 : Bild
                                 : Bildvorschau
                                 : Trigger Capture
Konfigurationsunterstützung      : Ja
Unterstützung für das Löschen einzelner Bilder: Ja
Unterstützung für das Löschen aller Bilder   : Nein
Unterstützung für Bildvorschau   : Ja
Unterstützung für Bildhochladen  : Ja
Der Zugriff ist dann nicht möglich, wenn sich bereits ein anderes Programm wie digicam oder der Datei-Manager die Kamera geschnappt hat. Dann muss sie ggf. wieder "ausgeworfen" werden.

Bilder fernauslösen

Mit dem folgenden Befehl lässt sich ein Foto vom Computer aus auslösen:
gphoto2 --capture-image
Der folgende Befehl löst aus und lädt das Bild auf den Computer. Dort ist in der Regel mehr Platz, die Übertragung dauert allerdings einen Moment.
gphoto2 --capture-image-and-download
gphoto2 -I 10 -F 5 --capture-image-and-download
oder auch
gphoto2 --interval 10 --frames 5 --capture-image-and-download
Dieser Befehl schießt also fünf Fotos im Abstand von je 10 Sekunden und lädt diese in das aktuelle Verzeichnis.

Die Digitalkamera als Webcam

Eine Webcam mit 640x480 Pixeln hat jeder. Aber eine Digitalkamera-Kamera als Webcam einzusetzen, das hat Stil und gibt ein besseres Bild. Was benötigen wir?

Mit gphoto werden wir die Liveview per USB aus der Kamera herausholen und an ein Device /dev/video1 binden, damit es von Skype bis vokoscreen jedes Programm verwenden kann.

Der folgende Befehl leitet den LiveView der Kamera direkt in den VLC:

gphoto2 --capture-movie --stdout | vlc -

v4l2loopback

Das Paket v4l2looback-utils enthält das Modul für v4l2loopback.
sudo apt install v4l2loopback-utils v4l2loopback-dkms
Dieses kann von Hand eingetragen werden:
sudo modprobe v4l2loopback
Nach einem Reboot ist dieses Modul nicht mehr verfügbar und muss für den dauerhaften Genuss in der Datei /etc/modules hinterlegt werden.
v4l2loopback

Umleiten der Digitalkamera auf /dev/video1

Zunächst muss ffmpeg installiert werden. Der folgende Befehl sorgt dafür:

apt install ffmpeg
Die von gphoto2 gelieferte Lifeview wird mit ffmpeg ausgelesen und per v4l2 auf das Video-Device /dev/video1 umlegt.
gphoto2 --stdout --capture-movie | \
   ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -threads 0 \
      -f v4l2 /dev/video1

Mit einer Nokia 3300 funktioniert dies wunderbar. Der Befehl liefert eine Framerate von 35 bis 50 fps. Mit einer Canon EOS 700D gibt es allerdings nur eine sehr langsame Übertragung von 7,1 fps. Das sieht ein wenig aus wie alte Charlie-Chaplin-Filme, nur in Farbe.

Das Device /dev/video1 kann anschließend von allen üblichen Tools, die eine Webcam unterstützen, auch eingebunden werden.

Links

HDMI-Abnahme

Die Kameras Nikon D3300 und Canon EOS 700D haben einen Mini-HDMI-Port. Der Stecker ist ein wenig kleiner als der Standard-HDMI-Stecker, aber größer als der Micro-Stecker. Ein passendes Kabel habe ich auf Amazon gefunden.

Warnung

Damit hat die Kamera einen HDMI-Ausgang, den man natürlich NICHT in den HDMI-Ausgang einer Grafikkarte oder eines Laptops stecken kann, weil auch das ein Ausgang ist.

Um diesen HDMI-Ausgang der Kamera in einen Computer zu bekommen, benötigt man eine Video Capture Card. Ein solches Gerät wird vom Computer als Videoeingang erkannt und kann über ein Video-Device (beispielsweise /dev/video3) angesprochen werden.

Anschließend können über die Abspielfunktionen der Kamera die aufgenommenen Fotos und Vidos auf dem Computer abgespielt werden. Dazu öffnet man das Programm VLC und ruft aus dem Menü Media den Punkt Capture Device. Unter Video device name kann man die Liste aller Devices anwählen.

Wird kein Foto oder Video gestartet, zeigt der HDMI-Ausgang typischerweise das, was auf dem LiveView-Bildschirm der Kamera zu sehen ist. Da dort auch die Anzeigen für die Kamerabedienung erscheinen, ist dies nicht einfach so als Webcam zu verwenden.