Archives par étiquette : mencoder

7 – La capture d’image

Bien que la qualité des images soit moindre par rapport à un véritable appareil photo, j’ai opté pour une webcam. Bien supportée par le Raspberry Pi d’après le site eLinux.org et ne nécessitant pas d’alimentation auxiliaire, la Logitech Logitech C525 s’est imposé d’elle même.

IMG_4468

Voici les caractéristiques principales de la caméra, directement reprises du site de Logitech :

  • Capture vidéo HD: jusqu’à 1 280 x 720 pixels
  • Technologie Logitech Fluid Crystal™
  • Mise au point automatique
  • Photos: jusqu’à 8 mégapixels (avec interpolation logicielle)

Test de capture

Pour se rendre compte de la qualité des photos prises en extérieur, voici quelques exemples (Photos prises depuis mon balcon, en utilisant la commande streamer) :

streamer -f jpeg -s 1280x720 -j 100 -o webcam_`date "+%s"`.jpeg

webcam_1363424816_05

Chaque image prise en qualité 100% pèse environ 380 kB. Avec une image toutes les 10 minutes, de 8h à 18h soit 60 images par jour, on arrive à un peu plus de 22 Mo par jour. La carte mémoire de 32Go suffira largement 🙂

En revanche je suis assez déçu de la qualité de la photo. J’ai l’impression que l’image n’est pas nette… J’ai testé sans la compression jpeg, et le résultat est le même.

En intérieur, le résultat n’est pas mieux :

webcam_1363425719_14

Je pense qu’avec une webcam, on ne peut pas s’attendre à des miracles. Au pire, il suffira d’en changer pour un modèle plus performant.

Le script de capture

Etant donné l’espace mémoire dont je dispose (32Go), je vais prendre les images directement en ppm. Ce qui permettra également de soulager le CPU du Pi qui n’aura pas à compresser les images en JPEG. Il faut alors compter 2,8 Mo par photo, soit environ 168 Mo par jour.

Afin d’être certain que la caméra s’adaptera aux conditions de luminosité ambiante et puisse ajuster le focus, il convient de prendre une rafale d’une dizaine d’images. Heureusement, streamer permet de définir un nombre d’images à capturer et une fréquence. Après quelques tests, 20 images en 2 secondes est un bon compromis.

Il est inutil de conserver toutes les images, on peut supprimer les 15 premières, et conserver les 5 autres pour faire une sélection plus tard lors du montage du time-lapse.

Voici un premier script bash qui permet de réaliser cela en quelques lignes :

#!/bin/bash

output_dir=/root/timelapse

# -f ppm (format ppm)
# -s 1280x720 (résolution de l'image largeur x hauteur)
# -t 20 (capturer 10 images)
# -r 5 (capturer 5 images par seconde)
# -o nom_du_fichier_de_sortie.ppm

streamer -f ppm -s 1280x720 -t 20 -r 5 -o $output_dir/timelapse_`date "+%F_%H-%M"`_00.ppm

# supprime les 15 premières images de chaque série

for i in `seq 0 14` ; do
  if [ $i -lt 10 ] ; then
    j="0$i"
  else
    j=$i
  fi
  rm $output_dir/*_$j.ppm
done

Premier test de TimeLapse

Il est temps de faire un premier test. Une simple tâche CRON programmée toutes les 10 minutes, appel le script. Je mets la webcam à la fenêtre et je laisser tourner jusqu’à demain 🙂

Créer la vidéo à partir des images

Pour rassembler les images et en faire une vidéo, j’utilise mencoder :

mencoder mf://*.jpg -mf fps=5:type=jpeg -ovc lavc -lavcopts vcodec=mjpeg -o timelapse.avi

Voici le résultat d’un premier test :