TimeLapse automatisé

Résumé

L’idée en 2 mots.
On dispose d’un Raspberry Pi qui, grâce à un script python, va faire une photo toutes les X secondes/minutes.
Dans un second temps, avec un PC, on récupère les images et on encode directement les photos en une vidéo au format mp4 ; juste en lançant un script bash.

Oui, le scripting est l’outil des fainéant(e)s (ou des partisan(e)s de l’optimisation).

Sommaire

Cet article va comporter 2 parties majeures :

  1. Le script python qui permet au raspberry Pi de prendre des photos.
  2. Récupération des images et génération du TimeLapse par script bash.

Mais comme souvent (toujours ???), la Alban, il va causer un peu …

Donc

  • Sommaire
  • Préambule
  • Surveillance vidéo (les photos)
  • Génération du TimeLapse
  • Conclusion

Préambule

(vous pouvez ne pas lire)
Restez assis ; ça va faire drôle !!!

Épisode 1

Mon four a cramé il y a quelques années.
Changement pour un Rosière (je voulais un Made in France).
Panne durant la période de garantie.
Le technicien dit à mon épouse que la carte mère a grillé. Il parle d’insecte.
Hum … Bizarre … On en reste là.

Épisode 2

Fin août 2022, alors que j’étais en télétravail, les enfants m’appellent car le four « fait une crise d’épilepsie« .
Effectivement, il clignote (au niveau de l’afficheur de l’heure) de façon anarchique … puis « Pchiiiittt » et odeur d’électronique qui prend un coup de chaud.
Je fais sauter la prise spécialisée au compteur + le débranche du mur et je retourne bosser.
Démontage du four le soir ; carte mère cramée avec un truc comme un bout de plastique fondu. Je pense à une sorte de composant isolé par une gaine plastique.

Déclaration à l’assurance et réparation demandée (ça me coûte 76€ de franchise).
Pas de four durant plus d’un mois cause difficulté à avoir la carte mère.
Récupération du four un mardi soir.
Utilisation le mercredi (une famille de 6 ; ça utilise son four !!!).

Épisode 3

Dans la nuit du mercredi au jeudi, on entend un bruit dans la nuit (04h15).
Plus de lumière dans le salon/cuisine.
C’était le disjoncteur de tête de la rangée 3 qui avait sauté
Je remets ; ça re-disjoncte.
Après avoir baissé tous les « fusibles », je remets la ligne = OK.
Je remets tout sauf le four = OK.
Après avoir réenclenché le four, une sorte de « Biiip » se fait entendre et, le temps que j’arrive au four, odeur de cramé … Pas cool …

Je sors le four (oui, à 04h15 du mat’ …) et démonte son chapeau.
Carte mère grillée avec un truc qui ressemble plus à une limace miniature qu’à un bout de plastique 😮
Serait-ce donc ça ???
Du coup … je m’interroge.

Durant l’absence du four, j’ai régulièrement regardé derrière le meuble (sans four, c’est plus facile).
Un matin (je me lève à 06h45), après une nuit de pluie, j’ai vu 2 mini limaces (des trucs vraiment réduits).
Sans blague ?!?!

Surveillance vidéo (les photos)

Du coup, j’ai décidé de me servir de mon intelligence et de mon Raspberry Pi Zero Wifi.
Les limaces sont des animaux plutôt nocturnes donc pouf, je colle une caméra nocturne et je surveille.

L’idée est simple :
Le raspberry Pi tourne sous RasbperryPiOS Lite. Il démarre quand on le branche.
Immédiatement, il réalise une photo puis opère une pause et recommence (oui, on appelle ça une boucle sans fin).
Un petit script fait l’affaire aisément (voir ci-dessous).
Et pour vérifier que ça fonctionne, on colle les images dans un dossier au nom du jour et on diffuse cela dans une galerie en générant un point d’accès.
Cela permet de contrôler le bon positionnement de la caméra.

Petit plus :
La boucle tourne tant que (while) rien ne l’arrête.
J’ai prévu que si un fichier STOP existe dans le dossier « photos », le script s’arrête.
Un simple touch /var/www/html/photos/TOUCH permet de stopper la prise de photos.

#!/usr/bin/python3
# -*- coding: utf-8 -*

import os
import time
from datetime import datetime

CurrentWorkingDir= "/var/www/html"
archiveDir       = "photos"

def photo():
    fileName = time.strftime("%Y-%m-%d_%Hh%Mm%S")+".jpg"
    os.system('raspistill -w 1296 -h 972 -o '+DossierPhotos+'/'+fileName+'')

DirName = time.strftime("%Y-%m-%d")

DossierPhotos = ""+CurrentWorkingDir+"/photos/"+DirName+""

if (os.path.isdir(""+DossierPhotos+"") == False):
    os.mkdir(""+DossierPhotos+"")
    os.chmod(""+DossierPhotos+"",0o777)

while True :
    photo()
    time.sleep(24)
    STOP=int(os.popen("ls /var/www/html/photos/ | grep STOP | wc -l").read())
    if STOP < 1 :
        continue
    else :
        break
#end

Génération du TimeLapse

Bon, on veut voir si des visiteurs nocturnes sont venus (et aussi « comment » ; « par où »).
Je me connecte sur le réseau du Raspberry Pi via son point d’accès.
Ensuite, je lance un simple script bash (oui, je ne bosse qu’en Linux).
Celui-ci me demande le dossier à récupérer.
Si je suis le 08/11/2022, je veux donc récupérer le dossier généré la veille; je tape donc « 2022-10-07 ».
Ensuite, vient la question du nombre d’images par seconde (pour le TimeLapse).
Suite à ces 2 questions, un dossier « 2022-10-07 » est créé sur mon PC puis un rsync est lancé pour copier toutes les images du dossier « 2022-10-07 » du Rpi dans le dossier « 2022-10-07 » du PC.
Une fois toutes les photos synchronisées, le script dit de se place dans le dossier qui a été créé et il lance l’encodage vidéo avec ffmpeg.

Le script tient en 13 lignes avec les interlignes donc en seulement 7 lignes.
Je vous l’offre :

#!/bin/bash

read -p "dossier au format AAAA-MM-JJ : " dossier &&

read -p "Tu veux combien d'images par secondes ? (2 ; 5 ; 10 ; 24 ???)' : " images &&

mkdir $dossier  && 

rsync -avz alban@192.168.80.10:/var/www/html/photos/$dossier/* /home/alban/$dossier/ &&

cd $dossier && 

ffmpeg -framerate $images -pattern_type glob -i '*.jpg' -c:v libx264 -pix_fmt yuv420p $dossier"_"$images.mp4

Conclusion

Bon, je sais … Tout le monde ne surveille pas des limaces, mais vous pouvez adapter à votre usage 😉

Oui, ma maison (neuve en 2008) a été très mal réalisée ; ce n’est pas un jugement de valeur, mais un fait puisque la preuve est posée par l’image : défaut majeur d’étanchéité.
Dommage que la décennale ne soit passée car, sinon, j’attaquais le constructeur (qui est aussi le promoteur).
Car maison qui ne respecte pas les règles + mise en danger (on aurait pu avoir 3 départs d’incendie d’origine électrique !)

Voici 2 vidéos réalisées après avoir bouché bien des trous laissés en place par le constructeur. J’ai coulé de la colle à carrelage à la seringue (avec bien des difficultés) + mis du ruban adhésif de travaux où je pouvais.

Mais elles sont revenues le 14/10/2022.

Vidéo du 14-10-2022. Allez directement à 00’45 ; impressionnant …

J’ai donc déplacé la caméra pour comprendre d’où elles sortaient … Et j’ai trouvé !

Vidéo du 15-10-2022. Allez directement à 01’10 puis à 02’34

Depuis, j’ai donc dû me résigner à fabriquer un coffre en MDF (de récup) et, compte tenu du nombre de tuyaux (posés n’importe comment en plus), à injecter de la mousse expansive (je voulais éviter car c’est de la saloperie chimique).

Depuis, plus une seule limace.

Comme quoi si XXXX avait fait son boulot comme il faut …

A propos de Alban

Papa de 4 enfants étant lui-même resté un enfant. Diététicien-Nutritionniste tombé par obligation dans l'informatique à 22 ans pour le boulot et s'étant "un peu" pris au jeu ... Pas un génie de l'informatique (loin de là), mais intéressé et carrément orienté Linux et entraide. Lassé de l'évolution du Monde de la Santé dans lequel les patients sont de plus en plus à traiter comme des clients (je suis un soignant !!!), j'ai opté pour une reconversion en repartant en Alternance... à... 44 ans D'abord dans le cadre d'un BTS SIO option SISR (Solutions d’Infrastructure, Systèmes et Réseaux) en Septembre 2019. Après l’obtention du BTS, j'ai décidé de poursuivre (toujours en alternance) en Bac+3 avec un Bachelor Concepteur de Systèmes d'Information. Depuis septembre 2022, je suis donc encore plus vieux, mais un jeune diplômé "Administrateur Systèmes et Réseaux". Citation personnelle : « Si la réussite facile flatte l’égo, C’est de la persévérance que nait le plaisir de la réussite. »

Une réponse à “TimeLapse automatisé”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.