afficher les flux vidéo sur une page web servie par le Raspberry Pi
Mon objectif est maintenant de transformer le Raspberry Pi qui gère les caméras avec motion en un serveur web qui publie une page web contenant les flux vidéos. (suite…)
Mon objectif est maintenant de transformer le Raspberry Pi qui gère les caméras avec motion en un serveur web qui publie une page web contenant les flux vidéos. (suite…)
Dans cet article de la série Caméra de surveillance et Raspberry Pi, nous allons transformer une vieille tablette android en caméra IP dont le flux sera suivi par un Raspberry Pi, avec motion. Nous verrons aussi comment configurer motion pour qu’il suive deux caméras.
Ma tablette est une Samsung Galaxy tab 7.7 (GT-P6210) équipée d’android 4.0.4. Elle n’est plus utilisable comme tablette car sa batterie ne tient plus. Je l’ai changé mais la nouvelle batterie n’a pas duré longtemps. Je vais donc alimenter en permanence cette tablette, l’accrocher à un mur d’où elle filmera le couloir. La détection de présence sera assurée par motion, sur le Raspberry Pi qui gère déjà le flux d’une caméra IP extérieure.
J’ai essayé de mettre une version plus récente d’android sur la tablette mais je n’ai pas réussi. Je reste donc en version 4.0.4.
Pour transformer la tablette en caméra IP, c’est très simple :

Quand les réglages sont faits, tout en bas : Service Control / start server : lance le serveur de la caméra IP.
Et voilà, maintenant si je tape « http://192.168.1.17:8090/video » dans un navigateur, j’ai accès au flux vidéo de la tablette. Et avec « http://192.168.1.17:8090 « , je vois un écran de réglage.
J’ai trouvé la solution ici (en anglais).
Appuyer sur le réseau wifi auquel on est connecté puis choisir « avancé ». Si l’on règle sur IP statique au lieu de DHCP, on peut entrer l’adresse fixe (pour moi 192.168.1.202).
Selon cette page (en anglais), “Network Prefix length” correspond au « Masque de sous-réseau IP » de notre routeur. « 255.255.255.0 » est entré comme « 24 ». « 255.255.0.0 » comme « 16 ». Pour moi c’est bien 24 qui doit figurer dans cette case.

On vérifie : « http://192.168.1.202:8090/video » permet bien de visualiser le flux vidéo de notre tablette.
NOTA : pour que le flux vidéo ait la bonne adresse, il faut redémarrer la tablette une fois.
La configuration de motion est faite avec etc/motion/motion.conf lorsqu’il y a une seule caméra. Mais lorsqu’il y en a plusieurs, il faut créer plusieurs configurations. Le principe général (cf wiki de motion) est de laisser motion.conf avec les réglages communs à toutes les caméras et créer des fichiers distincts, nommés threadX.conf , pour chaque caméra (X est le numéro de caméra).
thread /etc/motion/thread0.conf thread /etc/motion/thread1.conf ; thread /etc/motion/thread2.conf
Mon fichier thread1.conf contient :
# caméra galaxy tab 7.7 GT-P6210 # thread1.conf videodevice /dev/video1 netcam_url http://192.168.1.202:8090/video ############################################################ threshold 3000 threshold_tune off noise_level 32 noise_tune off despeckle_filter EedDl smart_mask_speed 10 lightswitch 25 minimum_motion_frames 3 ############################################################ # Target base directory for pictures and films target_dir /home/jf/motion/galaxy snapshot_filename g-%v-%Y%m%d%H%M%S-snapshot picture_filename g-%v-%Y%m%d%H%M%S-%q movie_filename g-%v-%Y%m%d%H%M%S timelapse_filename g-%Y%m%d-timelapse ############################################################ stream_port 8082 webcontrol_port 8086
Le fichier thread0.conf contient les mêmes lignes avec les paramètres que j’avais réglé dans les articles précédents de cette série Caméra de surveillance et Raspberry Pi. Evidemment stream_port et webcontrol_port sont différents (respectivement 8081 et 8085).
Redémarrer le service motion avec
service motion restart
Et maintenant les deux adresses http://nautilus:8082/?action=stream et http://nautilus:8081/?action=stream affichent le flux capturé de chacune des deux caméras par le Pi nautilus.
La caméra de la vieille tablette détecte bien les mouvements et stocke les fichiers générés dans le répertoire /home/jf/motion/galaxy . Idem pour la caméra 0 (foscam extérieure).
Maintenant au lieux de supprimer les vieux fichiers de /home/jf/motion, il faut supprimer dans /home/jf/motion/foscam et /home/jf/motion/galaxy.
Je modifie donc /home/jf/exec/camera–delete–cron.sh qui contient maintenant :
#!/bin/bash
# efface les fichiers avi et jpg de plus de deux jours
find /home/jf/motion/foscam -maxdepth 1 -name '*.avi' -type f -mtime +2 -exec rm {} \;
find /home/jf/motion/foscam -maxdepth 1 -name '*.jpg' -type f -mtime +2 -exec rm {} \;
find /home/jf/motion/galaxy -maxdepth 1 -name '*.avi' -type f -mtime +2 -exec rm {} \;
find /home/jf/motion/galaxy -maxdepth 1 -name '*.jpg' -type f -mtime +2 -exec rm {} \;
La tablette se met en veille (l’écran est noir). Mais si les réglages de gestion d’énergie de l’application IP Webcam sont comme sur la copie d’écran ci-dessous (aucune option n’est cochée), la caméra va continuer à travailler même si l’écran est noir.

Il faudra que je règle la détection de mouvement de la tablette lorsque je l’aurai mise à sa place définitive. En attendant, elle a les mêmes réglages que ceux de la caméra extérieure. D’autres articles de la série Caméra de surveillance et Raspberry Pi sont également disponibles.
Enfin, si vous souhaitez visualiser le flux de la caméra de cette tablette, il suffit de taper http://nautilus:8082/?action=stream dans n’importe quel navigateur d’un appareil connecté au réseau local.
Moi, j’ai décidé de voir les deux caméras et d’autres informations sur une page « dashboard » et j’ai créé une application android qui permet de la visualiser et d’interdire l’extinction de l’écran de la tablette sur laquelle elle est utilisée. Si ça vous intéresse, c’est ici : Une application android pour afficher une page web d’un Raspberry Pi.
Dans le premier article de cette série, Caméra de surveillance et Raspberry Pi, nous avons lu le flux d’une caméra IP dans un Raspberry Pi. Dans cet article, nous allons voir comment supprimer automatiquement les fichiers, vidéos ou images, sauvegardés au fil du temps.
J’ai installé motion sur mon Raspberry Pi le 22 juin. On est le 1er juillet et le répertoire de stockage des images et vidéos représente déjà plus de 1 Go et 40 000 fichiers.
Il faut donc que j’automatise la suppression d’images de plus de deux jours (cet article) et aussi que je règle mieux motion pour qu’il ne stocke que les images et vidéos de véritables mouvements détectés (le prochain article de cette série, Caméra de surveillance et Raspberry Pi.
Dans les FAQ de motion, ici, on voit comment déclencher la suppression de fichiers en fonction de leur localisation, leur extension et leur date. Ainsi, la commande suivante trouve et supprime tous les fichiers en jpg vieux de plus de 1 jour :
find /home/jf/motion -maxdepth 1 -name '*.avi' -type f -mtime +2 -exec rm {} \;
Mais on ne veut pas aller taper cette commande tous les jours dans notre Pi. Il faut donc planifier la commande.
Comme indiqué dans Wikipedia, « cron est un programme qui permet aux utilisateurs des systèmes Unix d’exécuter automatiquement des scripts, des commandes ou des logiciels à une date et une heure spécifiées à l’avance, ou selon un cycle défini à l’avance. […] crontab est le nom du programme qui permet d’éditer des tables de configuration du programme cron. Ces tables spécifient les tâches à exécuter et leur horaire d’exécution avec éventuellement une périodicité. »
Ce qui suit provient aussi des FAQ de motion, ici :
#!/bin/bash
# /home/jf/motion/camera–delete–cron.sh
# connaître les variables d'environnement du cron, pour deboguer
# printenv ;
# me dit que HOME et PWD = /home/jf
# efface les fichiers avi et jpg de plus de 14 jours
find /home/jf/motion/foscam/ -name '*.avi' -type f -mtime +14 -exec rm {} \;
find /home/jf/motion/foscam/ -name '*.jpg' -type f -mtime +14 -exec rm {} \;
Le schéma ci-dessous traduit les instructions du site officiel du Pi.
# * * * * * commande à exécuter # ┬ ┬ ┬ ┬ ┬ # │ │ │ │ │ # │ │ │ │ │ # │ │ │ │ └───── jour de la semaine (0 - 7) (dimanche est 0 ou 7, lundi est 1) # │ │ │ └────────── mois (1 - 12) # │ │ └─────────────── jour du mois (1 - 31) # │ └──────────────────── heure (0 - 23) # └───────────────────────── minute (0 - 59) # └───────────────────────── /xx = toutes les xx minutes
J’ai créé le script bash ci-dessus et l’ai appelé camera-delete-cron.sh . Je lui ai donné les droits 764. Evidemment, ses fins de ligne doivent être au format unix.
Je vérifie qu’il fonctionne avec les commandes suivantes :
cd /home/jf/exec ./camera-delete-cron.sh
Je veux l’exécuter tous les jours à 1h00. J’ai utilisé le générateur de commande cron de ce site pour définir ma commande cron. En principe j’écrirai donc :
#env SHELL=/bin/bash HOME=/home/jf PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin * 1 * * * bash /home/jf/exec/camera-delete-cron.sh
Avant j’ai indiqué l’environnement d’exécution des commandes. Voir ci-dessous si vous devez adapter. Attention, il doit y avoir une ligne vide à la fin du crontab…
On édite crontab en tapant crontab -e dans la console. On y ajoute la ligne suivante (SHIFT + INSER pour coller). Attention, il doit obligatoirement y avoir une ligne vide à la fin du contenu de crontab.
Noter le « bash » devant le fichier à exécuter.
Le cron ne s’exécutera automatiquement qu’après un redémarrage du Pi. Donc
Ce n’est pas simple de déboguer si un cron ne s’éxécute pas correctement. Le plus probable est que l’environnement d’éxécution du cron n’est pas le même que celui de la ligne de commande.
Un cron job se déclenche dans un environnement différent de celui d’un lancement manuel !
Dans le script on peut ajouter printenv, qui affiche toutes les variables d’environnement. Un fichier log recueillerales données issues du cron job si la ligne est (ici exécution toutes les 10 minutes d’un script camera-test.sh et envoi des résultats dans un répertoire cron.log) :
*/10 * * * * bash /home/jf/exec/camera-test.sh OK > /home/jf/snd/cron.log 2>&1
Et le premier job envoie toutes les informations recueillies dans/home/jf/snd/cron.log, ce qui permet de voir ce qui se passe.
Le fichier /var/log/syslog contient également beaucoup d’informations sur ce qui se passe dans le pi.
Dans mon cas le cron fonctionne et efface tous les fichiers de plus de deux jours (c’est à dire 3 jours et plus).
Août 2022 : L'article ci-dessous est mis à jour sur la façon de sélectionner ce que l'on veut installer. J'ai également ajouté deux liens vers des articles qui exposent d'autres manière de faire fonctionner un raspberry Pi de manière "headless", sans y connecter de clavier, souris et ecran.
Pour pouvoir communiquer avec un Raspberry Pi sans avoir à le connecter à un clavier, une souris et un écran, le plus simple est d’utiliser une interface pour communiquer en « SSH » (Secure Shell – voir sur Wikipedia) depuis un ordinateur. Voici la méthode pour installer Cygwin sur un ordinateur Windows (7 à 10) et faire sa première connexion au Pi.
Télécharger setup.exe sur le site de Cygwin.
Exécuter setup.exe (en tant qu’administrateur) et suivre les instructions.
Pendant l’installation, on pourra s’aider de « setting up cygwin« . Voici les principaux choix que j’ai fait :
Local Package Directory : un répertoire distinct du répertoire d’installation. J’ai utilisé un sous-répertoire de « téléchargement ».
C’est au moment de choisir les paquets à installer que c’est assez difficile. Il ne faut choisir que ce dont on a besoin, dans chaque catégorie de paquets. Pour moi, c’est :
J’avoue que je ne suis pas certaine du rôle des deux premiers paquets. Le troisième permet d’utiliser des commandes SSH dans notre console Cygwin. Le quatrième permet d’afficher l’écran du Pi en mode graphique (voir détails ci-dessous).
MAJ d’août 2022 : Pour choisir il faut cliquer sur la flèche à droite des items à installer comme dans la copie d’écran dessous (ici pour l’ensemble des paquets relatifs à X11). Pour les éléments isolés, il faut choisir une version et pas « passe ».

Ensuite on clique sur « installer » et nous disposons d’une console pour commander le Pi directement dans notre ordinateur habituel.
Il suffit de taper la commande ssh pi@nautilus , puis le mot de passe correspondant pour se connecter :

La solution vient d’ici. Il suffit de taper ssh-keygen -R 192.168.1.8 dans l’invite de commande Cygwin. Ensuite, on peut de nouveau se connecter en ssh à l’adresse 192.168.1.8 avec ssh pi@192.168.1.8 et ça fonctionne de nouveau.
Voir l’article plus détaillé, en anglais, de La Noia di moo ».
Dans la console Cygwin classique :
cygstart xwin # will open another window for the graphic display # cygstart xwin -screen 0 1440x900@1 -wgl would open # a 1440x900 window wirh OpenGL accelerated graphics export DISPLAY=:0.0 # Cygwin is aware of the new remote display ssh -Y pi@address # SSH to your PI lxsession # start the windows manager. # it takes a few seconds, then you have the Pi GUI
On peut maintenant interagir avec le Pi en mode graphique :

Dans la copie d’écran ci-dessus, j’ai cliqué sur le bouton en bas à gauche pour pouvoir voir la liste des menus.
Et voilà !
Pour une formation en ligne, j’ai eu besoin de créer une présentation powerpoint (2010), d’enregistrer ma voix et de générer un minutage. Ensuite j’ai transformé cette présentation en vidéo. Je l’avais déjà fait voici quelques années mais j’ai mis beaucoup de temps à me rappeler comment faire. Voici donc un tutoriel détaillé.
On crée la présentation comme on la ferait normalement. On peut aussi mettre des animations qui se déclenchent au clic de la souris.
Une fois la présentation comme on la souhaite, on l’enregistre (format pptx).
Powerpoint permet d’enregistrer simultanément la narration et le minutage du diaporama. Je trouve très difficile de faire les deux à la fois. Je préfère donc enregistrer ma voix PUIS enregistrer le minutage, en fonction de ma voix.
Dans l’onglet diaporama, cliquer sur « enregistrer le diaporama » puis choisir « commencer l’enregistrement au début »

Enregistrer le texte, éventuellement avec le minutage (on pourra supprimer ou corriger l’un ou l’autre ensuite). Il faut laisser un petit blanc au moment de la transition vers la diapo suivante.
Pour voir le résultat, vérifier (1) que les cases « lire les narrations » et « utiliser le minutage » sont cochées. On peut donc démarrer le diaporama (2) pour voir et entendre le résultat.

Si besoin, on peut corriger la narration ou le minutage, pour chaque diapo ou pour l’ensemble.
Audacity est un logiciel libre d’enregistrement et édition de son. Le gros avantage d’un enregistrement via audacity est qu’on peut laisser des blancs qu’on corrigera ensuite à la souris.
On peut également lire à l’écran (les notes du powerpoint ou un fichier distinct) sans se préoccuper d’un minutage précis.
J’enregistre donc ma voix puis, toujours dans audacity, je choisis Fichier/exporter audio. J’ai d’abord essayé le format ‘flac’ mais il n’est pas accepté par Powerpoint. J’enregistre donc au format ‘wav’.

L’enregistrement est nettement meilleur car je suis moins stressée par l’interface !
Ensuite, il me suffit d’insérer le fichier audio ainsi créé dans la première diapo de la présentation :

Enfin, il faut que je cale le minutage sur ma voix enregistrée. Je procède comme précédemment (solution 1) mais je décoche « narration et pointeur laser » au moment de démarrer l’enregistrement.
Dans Fichier / ‘Enregistrer et envoyer’, choisir ‘créer une vidéo’.
Pour une vidéo qui sera ensuite mise en ligne, choisir ‘internet & DVD’ plutôt que ‘qualité HD et ordinateur’. Evidemment, il faut choisir ‘utiliser le minutage et les narrations enregistrés’.
Cliquer sur ‘créer la vidéo’. On ne peut enregistrer qu’au format wmv (windows media video).
A priori on ne peut pas mettre en ligne une vidéo au format wmv car personne ne pourra la lire dans son navigateur (sauf peut-être avec internet explorer ou edge).
Par ailleurs, il est déconseillé de charger une vidéo directement dans WordPress pour plusieurs raisons :
Il est donc préférable de placer la vidéo sur un site tiers comme Youtube, si on accepte que la vidéo soit publique. On préférera Wistia ou Vimeo si on veut limiter l’accès aux vidéos (solutions payantes). Dans nos pages ou articles WordPress, on incorporera la vidéo à partir de ces sites tiers.
Pour incorporer (embed) la vidéo, il suffit de coller le lien de la vidéo directement dans l’éditeur WordPress.
Dans un second article, j’ai écrit mon mode opératoire précis, visible ici : Mode opératoire pour créer des supports de cours en ligne.
Et voilà !
Commentaires récents