lundi 28 septembre 2015

Contrôler son appareil photo avec gphoto


Afin de photographier l'évolution d'une fresque, je me demandais s'il n'était pas possible de commander par usb mon appareil photo comme sur les soft canon sous windows.
Gphoto sous linux permet de faire un multitude d'opérations tel que prendre une photo, une vidéo et les transférer. Vous trouverez sur leur site une liste des appareils supportés (obtenable par un --list-cameras). (Attention si vous avec un montage automatique de l'appareil photo, il vous faudra le démonter pour utiliser gphoto). 

Pour identifier votre appareil vous pouvez utiliser l'option --auto-detect, gphoto gère l'usb et les ports série. Il suffira de précisez quel appareil vous utilisez avec les options --camera= et --port=usb:Bus:Device. Exemple : gphoto2 --camera="Canon PowerShot A520 (PTP mode)" --port="usb:001:004" --shell (gphoto nécessite les droits administrateur sous debian si vous voulez éviter cela allez voir ici). 

Vous pouvez également récupérer les infos Bus et Device à l'aide de lsusb. L'option --shell permet de lancer un shell pour utiliser gphoto et ses commandes directement.

Pour capturer une photo il faut utiliser l'option --capture-image, par défaut la photo est stockée dans l'appareil photo (ram ou carte mémoire). Si vous voulez directement récupérer la photo utilisez la commande --capture-image-and-download

Si vous voulez savoir quelles sont toutes les configuration possible de votre appareil photo vous pouvez utiliser ce petit script (que j'ai nommé RECUP_CONFIG.sh dans l'archive jointe) :

for i in `gphoto2 --list-config`;
 do echo $i >> options_appareil.txt gphoto2 --get-config $i >> options_appareil.txt 
done 

Vous pourrez voir toutes les configurations possibles dans le fichier options_appareil.txt. Pour modifier une configuration de l'appareil on utilise l'option --set-config conf=valeur. "conf" est soit le chemin soit le label. (Attention dans mon cas avec le PowerShot A520, il fallait que l'appareil photo soit déjà initialisé pour avoir accès aux configuration relatives à la photo prise, ie qu'il ait l'objectif ouvert, la seule solution que j'ai trouvé est de faire un "gphoto2 --capture image" auparavant). Voici le petit script utilisé pour photographier la fresque avec un PowerShot A520 : 

#!/bin/bash 

##################################################
#   Script de capture photo pour powershot A520  #
##################################################

#NB : gphoto2 détecte automatiquement l'appareil photo,
# pour éviter les conflits l'appareil est précisé. 

###Configuration###

CAMERA="Canon PowerShot A520 (PTP mode)"
ID="04a9:30c1"  #vendeur et ID du produit
PATHTOSCRIPT="/home/$USER/RMLL_Photo_script"
TIME=30  #à voir : --interval --count
PICTFOLD="Path/To/Capture/"
FILENAME="date +%Y-%m-%d_%H-%M-%S"
#FILENAME="+%Y-%m-%d_%Hh%M" pour la date de l'appareil photo 
#(synchronisable avec l'option --set-config "Set camera time to PC time")

###Détection du port usb###

LSUSB=`lsusb -d $ID`
BUS=`echo $LSUSB | cut -c 5-7`
DEVICE=`echo $LSUSB | cut -c 16-18`

###Prog###

if [ ! -d $PICTFOLD ]; then 
 mkdir $PICTFOLD
fi
cd $PICTFOLD
while true; do
 old_IFS=$IFS     # sauvegarde du séparateur de champ
 IFS=$'\n'    # nouveau séparateur de champ, le caractère fin de ligne
 #toutes les lignes non commentées
 for ligne in $(cat $PATHTOSCRIPT/current_options | grep --invert-match '#'); do
  if [ $ligne ]; then   #si elles ne sont pas vide
   gphoto2 --port "usb:$BUS,$DEVICE" --camera "$CAMERA" --set-config $ligne
  fi
 done
 IFS=$old_IFS     # rétablissement du séparateur de champ par défaut
 gphoto2 --port "usb:$BUS,$DEVICE" --camera "$CAMERA" \
 --capture-image-and-download --filename `$FILENAME`
 #ça prend 30 sec sur mon A520
 sleep $TIME
done


Avec le fichier de configuration current_options qui permet de changer les configurations pendant que le script est lancé : 

Voir le fichier options_appareil.txt pour plus de détails sur les valeurs des configs on peut utiliser les labels ou les chemins. 
  • L'appareil sauvegarde la valeur attribué à la config en ram. 
  • Si une ligne contient un commentaire, elle ne sera pas prise en compte
  • Si l'appareil n'est pas initialisé (pour l'instant je sais seulement le faire avec --capture-image) les options relative à la photo sont inutilisables. Chaque config est à séparer par un retour à la ligne. 
Exemple pour allumer le flash : 
  • Avec un label : Mode flash=2 
  • Avec le chemin : /main/capturesettings/canonflashmode=2  
Pour plus d'infos et d'options su gphoto allez voir le man :) Ci joint les sources :).

Aucun commentaire:

Enregistrer un commentaire