15
juin 2014

Créer une Time Lapse box à partir d'un Raspberry

Pour un projet photo avec deux artistes et une cavalière j'ai eu envie de créer un « making off » pour montrer comment nous avons travaillé, j'aurais pu faire simple et poser une caméra mais non c'est moins fun. Donc je me suis orienté vers le time lapse, c'est une technique qui consiste à prendre des photos à intervalle régulier qui seront ensuite montées comme une vidéo.

Pour réaliser cet effet il faut un peu de matériel :

  • un trépied 
  • un appareil photo 
  • un intervalomètre ou un ordinateur pour piloter l'appareil photo.

Le problème est que je possède qu'un seul appareil photo que je vais utiliser pendant la séance de travail. Soit j'achète un nouvel appareil photo soit je me bricole une TlBox à base d'un Raspberry et de la PiCamera. Le second choix est bien sûr celui que j'ai choisi, c'est pas forcement le moins cher mais c'est bien plus intéressant à bricoler.

Matériel :

  • 1 Raspberry model B 
  • 1 PiCamera 
  • 1 Carte SD 
  • 1 alimentation (secteur pour les tests et une batterie pour les séances de travail) 
  • 1 dongle Wifi.

Je ne détaillerais pas l'installation du système et la configuration de la caméra. D'autres l'ont déjà fait mieux que moi : http://www.raspberrypi.org/documentation/usage/camera/. Sachez juste que je me suis basé sur RaspBian pour le système.

 

Ensuite j'ai eu à réfléchir de comment faire pour piloter ma TlBox lorsque je suis en séance :

  • depuis un ordinateur portable, connecter via le réseau : trop de matériel à déplacer.
  • depuis une série de bouton et un petit écran pour visualiser les photos : trop cher et compliqué à mettre en place 
  • depuis mon smartphone Android connecté en wifi : parfait, le téléphone je l'ai toujours avec moi en plus.

Me voila partie à la recherche de solution pour faire communiquer ma TlBox et mon téléphone, côté TlBox c'est facile en python mais côté Android c'est plus flou. Après avoir passé pas mal de temps et un peu découragé devant la masse de travail qu'allait représenter la création du programme sur Android je suis tombé sur BerryCam qui possède une app pour iOS et une version créé par Pi Supply pour Android. Bingo !

Les premiers essais me rassure et en plus ça marche du premier coups ! Mais bon tout n'est pas parfait, certaines fonctions ne sont pas gérées par le script python de Berrycam. Je plonge dans le code pour en faire ma version qui gère les iso et le time lapse correctement.

Mais assez de blabla on passe à l'installation. Je part du principe que vous savez utiliser la ligne de commande et git.

 

Sur votre TlBox  :

# cd ~

# git clone https://github.com/Philippe-M/tlbox.git

 

Le serveur utilise les modules python : SimpleHTTPServer, SocketServer, urlparse, os. Il a aussi besoin du programme raspistill.

 

Lancer le serveur :

# sudo python ~/tlbox/berrycam.py
B E R R Y C A M -- Listening on port 8000
Please ensure your BerryCam App is installed and running on your iOS Device

 

Sur votre téléphone installer l'app Pi Sight (https://play.google.com/store/apps/details?id=com.pisight), donner l'adresse ip de votre TlBox et le port d'écoute (par défaut c'est le 8000). Sans faire d'autres paramétrages lancer la prise d'une photo et regarder côté TlBox si ça bouge. Normalement vous devez avoir un affichage dans le genre

 

raspistill Camera App v1.3.7


Width 2592, Height 1944, quality 100, filename berrycam/pisight/IMG-20140615_085004.jpg
Time delay 5000, Raw no
Thumbnail enabled Yes, width 64, height 48, quality 35
Link to latest frame enabled no
Full resolution preview No
Capture method : Single capture

Preview Yes, Full screen Yes
Preview window 0,0,1024,768
Opacity 255
Sharpness 0, Contrast 0, Brightness 60
Saturation 0, ISO 201, Video Stabilisation No, Exposure compensation 0
Exposure Mode 'auto', AWB Mode 'auto', Image Effect 'none'
Metering Mode 'average', Colour Effect Enabled No with U = 128, V = 128
Rotation 0, hflip No, vflip No
ROI x 0.000000, y 0.000000, w 1.000000 h 1.000000
Camera component done
Encoder component done
Starting component connection stage
Connecting camera preview port to video render.
Connecting camera stills port to encoder input port
Opening output file berrycam/pisight/IMG-20140615_085004.jpg
Enabling encoder output port
Starting capture 0
Finished capture 0
Closing down
Close down completed, all components disconnected, disabled and destroyed

192.168.XX.11 - - [15/Jun/2014 08:50:12] "GET /berrycam?ver=1&awb=auto&mm=average&ex=auto&ev=0&sh=0&br=60&co=0&sa=0&ifx=none&fquality=100&fwidth=2592&fheight=1944&ffolder=pisight&hf=0&vf=0&iso=201&vs=0&ss=10000&fseq=20140615_085004 HTTP/1.1" 200 -
192.168.XX.11 - - [15/Jun/2014 08:50:12] "GET /berrycam/pisight/IMG-20140615_085004.jpg HTTP/1.1" 200 -

 

Et sur votre téléphone la photo doit s'afficher.

Voila vous venez de faire votre première photo avec votre TlBox. Maintenant nous allons essayer un time lapse mais avant une petite explication sur la partie serveur. Par défaut les photos unitaires sont enregistrées dans le répertoire ~/tlbox/berrycam/pisight

 

# ls -l ~/tlbox/berrycam/pisight/
total 2180
-rw-r--r-- 1 root root 2231978 juin 15 08:50 IMG-20140615_085004.jpg

 

Vous pouvez personnaliser le répertoire "pisight" depuis l'app sur votre téléphone mais pour le moment il n'est pas possible d'enlever le répertoire berrycam car je n'ai pas accès aux sources de l'app Pi Sight. Dans mon utilisation ça ne me gène pas puisque je considère les photos unitaires comme des prévisualisations de contrôle pour le cadrage et la luminosité avant de lancer le time lapse. Pour le time lapse c'est un peu différent à cause de deux problèmes :

  • le nombre d'images va être important et du coups l'espace de stockage devrait être important 
  • la durée de vie en écriture d'une carte SD est plus réduite qu'un disque dur.

 

J'ai contourné le problème en modifiant la partie serveur :

# TimeLapse parameter

if "tl" in queryParsed:
    tl = queryParsed['tl'][0]
    t = queryParsed['t'][0]
    folder = "/media/usb/berrycam/timelapse/" + str(filefolder)
    if not os.path.exists(folder):
        os.makedirs(folder)
else:
    tl = ""
    folder = "berrycam/" + str(filefolder)
    if not os.path.exists(folder):
    os.makedirs(folder)

 

Pour faire simple, si l'app passe en paramètre une durée de time lapse (paramètre tl) alors j'utilise un répertoire différent qui dans mon cas est une clé usb monté dans le répertoire /media/usb (à terme ça sera un disque dur usb). Sinon c'est le répertoire par défaut qui est utilisé.

Voila vous avez la base pour vous monter votre propre TlBox. Certe le programme n'est pas parfait et puis il y a encore du boulot :

  • fabriquer un boitier pour le montage sur un trépied photo 
  • transformer la TlBox en point accès wifi pour vous connecter à celle-ci même si il n'y a pas de réseau en place 
  • protéger l'accès au serveur par un mot de passe 
  • lancer le programme serveur à l'allumage de la TlBox 
  • rédiger une vrai documentation 

 

Pour le matériel me restant à acheter je pense que je vais le commander chez Farnell (http://fr.farnell.com/) qui a un catalogue important et des prix qui me paraissent convenable.

 

ChangeLog :

15-06-2014 : première version de l'article.

Administrateur système de métier mais surtout curieux de découvrir de nouvelles technos très orientées DIY. A mes heures perdues je fais de la photo avec toujours une petite envie d'intégrer des DIY sous forme de timelaps à base de raspberry.

Écrire un commentaire

Quelle est la quatrième lettre du mot aqvli ? :

Créer une Time Lapse box à partir d'un Raspberry - Philippe Maladjian - Péripéties bucoliques d'un administrateur systèmes au royaume de la virtualisation, du stockage et accessoirement photographe à ses heures perdues