une caméra IP avec une vieille tablette android ?

une caméra IP avec une vieille tablette android ?

Dans cet article de la série , 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.

transformer une tablette android en caméra IP

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 :

  • installer (via google play) l’application gratuite IP Webcam
  • Régler l’application :
    • Main camera : front camera
    • motion and sound detection : « disable » pour tout
    • connection settings : port 8090, login/password not set
    • cloud streaming : off

Application android IP webcam : réglages

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.

Donner une adresse IP fixe à la tablette

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.

Tablette android : mettre en IP fixe

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.

Réglage de motion sur le Raspberry Pi pour gérer deux caméras

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).

  • Créer les fichiers thread0.conf  et thread1.conf , avec droits 664.
  • A la fin de motion.conf, décommenter les lignes qui y font référence.
thread /etc/motion/thread0.conf
thread /etc/motion/thread1.conf
; thread /etc/motion/thread2.conf
  • dans motion.conf, identifier les lignes qui sont spécifiques à chaque caméra et les copier dans un éditeur de texte. On peut les laisser telles quelles puisqu’elles seront moins prioritaires que les instructions spécifiques des fichiers threadX.conf.
  • Dans chaque fichier threadX.conf, insérer les lignes spécifiques et faire les réglages.

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 . 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).

Modifier le cron de suppression de vieux fichiers

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/cameradeletecron.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 {} \;

Mise en veille de la tablette

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.

Réglage gestion d'énergie IP Webcam

Et maintenant ?

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 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.

Supprimer les fichiers vidéo et image de plus de deux jours

Supprimer les fichiers vidéo et image de plus de deux jours

Dans le premier article de cette série, , 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.

Il y a urgence !

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, .

Supprimer des fichiers manuellement

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.

Crontab pour planifier des actions

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 :

  • créer un script bash (/home/jf/exec/camera-delete-cron.sh) comme celui-ci (note du 25/01/2018, j’ai corrigé et ça fonctionne correctement maintenant) :
#!/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 {} \;

la ligne de commande dans crontab

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

Déboguer le cron si nécessaire

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).

Installer et utiliser Cygwin pour le ssh avec un Pi

Installer et utiliser Cygwin pour le ssh avec un Pi

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.

Installation de Cygwin

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 :

  • il vaut mieux installer pour « tous les utilisateurs » afin d’éviter d’éventuels problèmes, même si on est seul à utiliser cygwin.
  • install directory : c:/cygwin64
  • 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 :

  • Admin                        cygrunsrv
  • Admin                        shutdown
  • Net                              openSSH
  • X11                              tout

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 ».

Comment sélectionner des éléments à installer en plus de l'installation par défaut de cygwin.

Ensuite on clique sur « installer » et nous disposons d’une console pour commander le Pi directement dans notre ordinateur habituel.

Se connecter en ssh au Pi

Il suffit de taper la commande ssh pi@nautilus , puis le mot de passe correspondant pour se connecter :

Cygwin : connexion SSH au Raspberry Pi
Que faire en cas d’erreur @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!  ?

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.   

interface graphique avec Cygwin

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 :

CygwinGUI (interface graphique) du Raspberry Pi

Dans la copie d’écran ci-dessus, j’ai cliqué sur le bouton en bas à gauche pour pouvoir voir la liste des menus.

Autres méthodes « headless »

Et voilà !

créer une vidéo à partir d’un Powerpoint (2010)

créer une vidéo à partir d’un Powerpoint (2010)

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é.

étape 1 : créer la présentation

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).

étape 2 : enregistrer la narration

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. 

solution 1 : avec les outils de Powerpoint

Dans l’onglet diaporama, cliquer sur  « enregistrer le diaporama » puis choisir « commencer l’enregistrement au début »

powerpoint-video-1

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.

powerpoint-video-2

Si besoin, on peut corriger la narration ou le minutage, pour chaque diapo ou pour l’ensemble.

solution 2 : avec un logiciel externe (audacity)

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’.

audacity-enregistrement

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 :

  • Sur cette première diapo, dans l’onglet insertion, cliquer sur audio puis ‘audio à partir du fichier’.
  • Sélectionner le fichier à insérer. Un symbole « haut-parleur » apparaît sur la diapo.
  • cliquer une fois sur le symbole « haut-parleur » : dans le menu de powerpoint, deux nouveaux onglets apparaissent à droite : format et lecture.
  • Cliquer sur l’onglet ‘lecture’ puis régler le démarrage (1) sur ‘automatiquement’ si on a un fichier audio par diapo, ‘exécution sur l’ensemble des diapositives’ si on a un seul fichier (mon cas). Cocher aussi la case ‘masquer pendant la présentation’ pour que le symbole haut parleur ne soit pas visible.

powerpoint-video-3

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.

étape 3 : créer une vidéo à partir du diaporama

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).

étape 4 : mettre la vidéo en ligne

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 :

  • la vidéo consommera de la bande passante de mon site et ralentira le chargement ;
  • l’internaute ne pourra pas choisir la qualité vidéo à utiliser selon le débit dont il dispose ;
  • pour que tous puissent lire la vidéo, quel que soit le navigateur utilisé, il faudra charger au moins deux vidéos au lieu d’une (cf cet article) : une au format mp4 (MPEG H.264 AAC) et l’autre au format WebM (codec vidéo VP8 ou VP9 et le codec audio Vorbis ou Opus).

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à !