Blog/Pi zero, timeleaps.md

Pi zero, timeleaps.md

Télécharger

Rechercher

Je me suis offert un raspberry pi zero, avec le module caméra, pour observer mon chaton. C'est pas super puissant, mais ça suffit pour beaucoup d'usages...

$ cat /proc/cpuinfo processor : 0 model name : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 997.08

coté mémoire, on est un peu léger par contre :

Mem: 369M

Et c'est dommage puisque je compte utiliser la ram pour monter un système de fichiers temporaire pour des captures d'images, histoire de libérer la carte SD.

J'ai mis un fichier dans /var/www/cam.sh :

#!/bin/bash
p=/var/www/html/ram

mkdir $p
mount -t tmpfs -o size=32m tmpfs $p

while true ; do
    d=`date +%D_%R | sed -e s/\\\\//-/g`
    for i in {001..060}; do
        raspistill -q 100 -w 640 -h 480 -o "$p/image$i.jpg"
        sleep 10
    done
    convert -delay 0.25 -loop 0 "$p/*.jpg" "$p/timeleaps.gif"
    scp  "$p/timeleaps.gif" "maxime@192.168.1.30:timeleaps_$d.gif"
done

La ligne pour le SCP, c'est pour sauvegarder les timeleaps sur une autre machine, histoire de : libérer le tmpfs, et sauver ça sur une machine dédiée au stockage. La ligne pour convert crée le timeleaps avec imagemagick (à installer si besoin). C'est une commande gourmande en ram, la limite sur la profondeur de la timeline se trouve ici...

Ensuite dans /etc/systemd/system/cam.service

Unit] Description=webcam photo service After=network.target StartLimitIntervalSec=0

[Service] Type=idle KillMode=process Restart=always RestartSec=1 User=root ExecStart=/bin/bash /var/www/cam.sh

[Install] WantedBy=multi-user.target

il ne nous reste plus qu'a

systemctl enable cam

pour activer le service, et c'est parti, on a une timeleaps de la caméra dans www :)

Une meilleur version du script consiste à attendre qu'imagemagick nous donne une différence avant de commencer la capture.

                                          
#!/bin/bash
p=/var/www/html/ram

mkdir -p "$p"
mount -t tmpfs -o size=32m tmpfs "$p"
while : ; do
    raspistill -q 100 -w 320 -h 200 -o "$p/image_start.jpg" -n
    while : ; do
        sleep 1
        raspistill -q 100 -w 320 -h 200 -o "$p/image_end.jpg" -n
        score=$((compare -metric RMSE "$p/image_start.jpg"  "$p/image_end.jpg" NULL) 2>&1 | cut -d ' ' -f 1)
        #echo "score=$score"                                                                                         
        st=`echo "$score < 1000" | bc`
        if [ $st -eq 0 ]; then
            break;
        fi
    done
    unlink "$p/image_start.jpg"
    unlink "$p/image_end.jpg"
    d=`date +%D_%R | sed -e s/\\//-/g`
    for i in {001..020}; do
        raspistill -q 100 -w 640 -h 480 -o "$p/image$i.jpg" -n
        sleep 0.1
    done
    convert -delay 0.25 -loop 0 "$p/*.jpg" "$p/timeleaps.gif"
    scp  "$p/timeleaps.gif" "maxime@192.168.1.30:timeleaps_$d.gif"
done