Comandare una fotocamera Canon con Capture

In ambiente Linux se vogliamo pilotare da remoto una fotocamera possiamo utilizzare Gphoto2 oppure Digital Camera Remote Capture.
Con il primo, più generico, è possibile scaricare le foto dalla maggior parte delle fotocamere, tuttavia non tutte sono comandabili e su queste ultime non è detto che siano controllabili tutti gli aspetti.
Capture al contrario è scritto in modo specifico per la cattura remota delle immagini e funziona su un set abbastanza esteso di fotocamere Canon.
Non essendo integrato tra i pacchetti Ubuntu per provarlo occorre compilarlo.
Questi sono i passi che ho seguito sulla mia Linux Box.
Installare questi pacchetti:

sudo apt-get install libreadline-dev
sudo apt-get install libusb-dev
sudo apt-get install libgtk2.0-dev

Scaricare libptp2.
Una volta scaricato:

tar -xzvf libptp2-1.1.10.tar.gz
cd libptp2-1.1.10
./configure
make
sudo make install
sudo ldconfig

A questo punto dovremmo avere tutti i prerequisiti per compilare e installare capture.
Dopo aver scaricato capture

tar -xzvf capture-1.0.4-cvs-20071123.tar.gz
cd capture-1.0.4-cvs-20071123
make
sudo make install
sudo ldconfig

A questo punto se lanciate “capture” si aprirà uno shell interattivo tramite il quale è possibile comandare la fotocamera che avrete collegato al PC tramite cavetto USB.
Ricordate di dare il comando “start”, a questo punto potete controllare tutti gli aspetti della fotocamera e scattare delle foto con il comando “capture”.
Il comando “help” elenca tutti i comandi disponibili, “help <comando>” fornisce informazioni su quel comando.

capture> iso
iso info: Current value = "50".
capture> aperture
aperture info: Current value = "4.0".
capture> aperture 4.0
capture> aperture
aperture info: Current value = "4.0".
capture> 

Gli stessi comandi possono essere dati via shell script.
Sto utilizzando correntemente capture per scattare delle foto al cielo su Meteo Valle Muricana.
La fotocamera, una Canon PowerShot A520, viene pilotata da uno script che provvede anche ad adattare le impostazioni di scatto al giorno o alla notte.
Per sapere se è giorno o notte viene utilizzato un semplice script php che ho chiamato “dayornight.php“.

fabrizio@fabrizio-laptop:~/scripts/canon$ cat dayornight.php 
<?php
  date_default_timezone_set('Europe/Rome');
  $uT=time();
  $sun_info = date_sun_info($uT,  42.01,12.47); 
  $sunrise = $sun_info['civil_twilight_begin'];
  $sunset = $sun_info['civil_twilight_end'];
  if ($uT>$sunrise &&  $uT<$sunset) echo "Day"; else echo "Night";
?>

La scelta del php è dovuta al fatto che è presente già a costo 0 la funzione date_sun_info che, data la posizione geografica di una località ne calcola, oltre che l'alba e il tramonto, il crepuscolo civile, nautico ed astronomico.
Io ho usato gli orari di crepuscolo civile per cambiare la modalità di scatto.
Lo script si lancia con il comando:

php dayornight.php

Chiaramente occorre cambiare la latitudine e la longitudine mettendo quella del posto dove è installata la fotocamera che nel mio caso è Roma Nord.
Il prerequisito è l'aver installato php5-cli

sudo apt-get install php5-cli

A questo punto uno script in crontab provvede, ogni 5 minuti, a scattare la foto e a caricarla su un server.
Eccone una parte:

#/bin/bash

capture aperture
if [ $? != '0' ]; then
  rm -f cameradayornight.txt
  capture start
  if [ $? != '0' ]; then
    echo "capture failure"
    exit 1
  fi
  capture 'size large'
  capture 'zoom 0'
fi

dayornight=$(php dayornight.php)
  
if [ -e cameradayornight.txt ]; then
  cameradayornight=$(cat cameradayornight.txt) 
else
  cameradayornight='Undefined'  
fi

echo "DayOrNight: $dayornight"
echo "CameraDayOrNight: $cameradayornight"


if [ "$dayornight" != "$cameradayornight" ]; then
#switch mode
  if [ "$dayornight" = "Day" ]; then
    echo "Switching to day mode"
    capture 'qual fine'
    capture 'shutter 1/125'
    capture 'tv/av program'
  else
    echo "Switching to night mode"
    capture 'tv/av manual'
    capture 'shutter 15"'
    capture 'aperture 4.0'
    capture 'qual normal'
  fi
fi

echo -n $dayornight > cameradayornight.txt
#
# now capture the image
capture 'capture /home/helios/scripts/canon/latest.jpg'
if [ $? != '0' ]; then
  echo "capture failure"
  capture quit
  exit 1
fi
#
# do something with image ......

Di giorno si usa la modalità auto, di notte manuale, esposizione di 15 secondi e apertura f/4.0.

Riferimenti