Table des matières:
- Étape 1: Installer Linux Motion sur Raspberry
- Étape 2: Configurer l'API Google Photos pour Python
- Étape 3: Tester
- Étape 4: Facultatif: Configurer l'accès Web à la caméra de diffusion en temps réel
- Étape 5: Conseils
Vidéo: Intégration de Raspberry Pi Linux Motion Google Photos : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
L'idée est de télécharger des photos et des vidéos réalisées avec une caméra activée par le mouvement connectée à Raspberry Pi pour télécharger des fichiers sur un cloud. Le logiciel "Motion" prend en charge le téléchargement sur Google Drive via PyDrive. Dans cet article, "Motion" est utilisé pour télécharger sur Google Photos.
Matériel:
Framboise Pi 3B+
Webcam USB Logitech C920
La sélection du matériel n'a pas été déterminée, j'ai juste pris ce qui était à portée de main.
Conditions préalables:
Pour plus de commodité, Raspberry pi doit être dans votre réseau local - pour le contrôler sans moniteur/clavier et télécharger/télécharger des fichiers. Pour cela, vous devez avoir un agent ssh sur votre PC (par exemple, putty).
Un grand merci à ssandbac pour un excellent tutoriel. Si vous avez besoin de plus d'informations sur la configuration de l'environnement, consultez cet article. J'en ai emprunté les étapes d'installation et de configuration de mouvement et j'y ai ajouté quelques modifications. En particulier, au lieu d'envoyer des fichiers et des alertes par e-mail, cet exemple utilise le téléchargement vers l'album partagé Google Photos et reçoit des notifications de type « photos ajoutées » dans la barre de notification.
Voici les étapes:
Étape 1: Installer Linux Motion sur Raspberry
Particulièrement dans cet exemple a été utilisé motion v4.0.
1.1 Mettre à jour pi
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get upgrade
1.2 Télécharger le mouvement
pi@raspberrypi:~ $ sudo apt-get install motion
1.3 Maintenant, modifiez ce fichier avec les modifications suivantes
pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf
# Démarrez en mode démon (arrière-plan) et relâchez le terminal (par défaut: désactivé)
démon sur
# Utilisez un fichier pour enregistrer les messages des journaux, si non défini, stderr et syslog sont utilisés. (par défaut: non défini)
fichier journal /var/log/motion/motion.log
# Largeur de l'image (pixels). Plage valide: selon la caméra, par défaut: 352
largeur 1920
# Hauteur de l'image (pixels). Plage valide: dépendante de la caméra, par défaut: 288
hauteur 1080
# Nombre maximum d'images à capturer par seconde.
fréquence d'images 30
# Spécifie le nombre d'images pré-capturées (tamponnées) avant le mouvement
pré_capture 5
# Nombre d'images à capturer une fois que le mouvement n'est plus détecté
post_capture 5
# Affiche des images « normales » lorsqu'un mouvement est détecté (par défaut: activé)
output_pictures désactivé
# La qualité (en pourcentage) à utiliser par la compression jpeg
qualité 100
# Utilisez ffmpeg pour encoder des films en temps réel
ffmpeg_output_movies désactivé
# ou la plage 1 - 100 où 1 signifie la pire qualité et 100 est la meilleure.
ffmpeg_variable_bitrate 100
# Lors de la création de vidéos, les images doivent-elles être dupliquées dans l'ordre
ffmpeg_duplicate_frames faux
# Bool pour activer ou désactiver extpipe (par défaut: off)
use_extpipe sur
extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx%h -framerate %fps -i pipe:0 -vcodec libx264 -preset ultrafast -f mp4 %f.mp4
rép_cible /var/lib/motion
# Commande à exécuter lorsqu'un fichier vidéo
; on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
Laissez le dernier avec un point-virgule pour l'instant (commenté) pour décommenter après vous être assuré que l'enregistrement et le téléchargement vidéo fonctionnent.
1.4 Puis changez
pi@raspberrypi:~ $ sudo nano /etc/default/motion
pi@raspberrypi:~ $ start_motion_daemon=oui
Étape 2: Configurer l'API Google Photos pour Python
2.1 Recommandé de créer un nouveau compte à cet effet pour partager un album avec votre principal pour recevoir des notifications lorsque de nouveaux fichiers sont ajoutés, ainsi que plus d'espace de stockage. Activez l'API Google Photos pour le compte que vous allez utiliser pour le téléchargement.
Vous devriez avoir le fichier credentials.json après cela.
2.2 Configuration de l'environnement Python
Fondamentalement, la configuration de l'environnement est requise uniquement sur Raspberry. Mais cela nécessite une autorisation oauth, ce qui est plus pratique à réaliser sur PC. Pour ce faire sur raspberry, vous devez y connecter un moniteur/clavier ou configurer une interface utilisateur de bureau à distance. Je viens d'installer le même environnement sur Raspberry et PC. Donc les étapes 2.2.1.2.2.3 ont été faites sur PC, 2.2.1, 2.2.2, 2.2.5, 2.2.6 sur Rpi
2.2.1 installer Python 3
2.2.2 Installer les packages google api conformément au manuel * (voir 5.1)
Sur PC
pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Sur la framboise
pi@raspberrypi:~ $ sudo pip3 install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
2.2.3 Vérifiez le téléchargement du script sur Google Photos. Il est placé sur mon github. Mettez-le dans le même répertoire avec credentials.json.
2.2.4 Prendre une photo et tester le téléchargement
python3 photos.py image.jpg
Installez les dépendances manquantes s'il y en a et réessayez. En conséquence, vous devriez obtenir token.pickle dans le répertoire du script ainsi qu'un nouvel album partagé créé dans votre interface Web Google Photos avec image.jpg. Comme vous obtenez token.pickle, vous n'avez plus besoin de credentials.json pour photos.py dans le même répertoire.
2.2.5 Partagez l'album avec le compte sur ce que vous souhaitez recevoir des notifications sur les nouveaux médias ajoutés. Ajoutez ce compte à votre téléphone.
2.2.6 Mettez photos.py et token.pickle dans /var/lib/motion sur framboise. L'utilisateur 'pi' ne peut pas écrire dans le répertoire 'motion's donc téléchargez d'abord vers /home/pi
scp photos.py token.pickle pi@IP:/home/pi
Connectez-vous ensuite à raspberry et déplacez les fichiers sous sudo
ssh pi@IP
pi@raspberrypi:~ $ sudo mv photos.py token.pickle /var/lib/motion
2.2.7 Vérifiez comment le téléchargement fonctionne sur Raspberry. Prenez une photo avec fswebcam et essayez de la télécharger
pi@raspberrypi:~ $ sudo fswebcam /var/lib/motion/image.jpg
pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/image.jpg
Il devrait y avoir image-j.webp
Étape 3: Tester
3.1 Démarrer le service Motion
pi@raspberrypi:~ $ sudo service motion start
Vous pouvez changer la commande pour "arrêter" ou "redémarrer"
3.2 Activer les journaux de mouvement
pi@raspberrypi:~ $ tail -f /var/log/motion/motion.log
3.2 Afficher la sortie de la caméra sur un autre appareil connecté au même réseau local. Entrez dans le navigateur:
IP:8081
3.3 En regardant les journaux, attendez que le mouvement soit détecté et que le fichier NAME.mp4 soit écrit dans /var/lib/motion. Ensuite, lancez le script de téléchargement manuellement
pi@raspberrypi:~ $ sudo python3 /var/lib/motion/photos.py /var/lib/motion/NAME.mp4
Vérifiez les traces de python. Attendez que event_end apparaisse dans motion.log. Ensuite, allez dans l'album "helloworld" dans vos photos google et vérifiez s'il y a une vidéo téléchargée.
3.4 Si le téléchargement est réussi, décommentez dans /etc/motion.conf la ligne:
pi@raspberrypi:~ $ sudo nano /etc/motion.conf
# Commande à exécuter lorsqu'un fichier vidéo est prêt
on_movie_end sudo python3 /var/lib/motion/photos.py %f.mp4 &
pi@raspberrypi:~ $ sync
pi@raspberrypi:~ redémarrage du mouvement du service $ sudo
3.5 En regardant les journaux de mouvement et dans l'album, vérifiez si la vidéo a été téléchargée automatiquement.
3.6 Vous pouvez éventuellement partager l'album avec votre compte principal pour recevoir une notification lorsque la nouvelle vidéo ou photo est ajoutée.
Étape 4: Facultatif: Configurer l'accès Web à la caméra de diffusion en temps réel
Cette étape est basée sur le tutoriel Parreno de Michel. Je viens de choisir FreeDNS au lieu de NoIP comme recommandé ici.
4.1 Configurer l'accès autorisé au serveur de mouvement de streaming vidéo:
pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf
# Définir la méthode d'authentification (par défaut: 0)
# 0 = désactivé
#1 = Authentification de base
# 2 = MD5 digest (l'authentification la plus sûre)
stream_auth_method 2
# Authentification pour le flux. Syntaxe nom d'utilisateur: mot de passe
# Par défaut: non défini (Désactivé)
nom d'utilisateur webcontrol_authentication:mot de passe
# Fréquence d'images maximale pour les flux de flux (par défaut: 1)
stream_maxrate 30
# Restreindre les connexions de flux à localhost uniquement (par défaut: activé)
stream_localhost désactivé
Si vous n'utilisez pas l'interface de contrôle Web à partir d'un réseau externe, laissez-la désactivée (comme par défaut)
# Restreindre les connexions de contrôle à localhost uniquement (par défaut: activé)
webcontrol_localhost activé
De plus, depuis que raspberry est en ligne, je recommande de changer le mot de passe par défaut de raspberry
pi@raspberrypi:~ $ passwd
Bien que le port ssh 22 ne soit pas redirigé vers la framboise, toujours.
4.2 Aller sur le site FreeDNS
4.3 S'inscrire
4.4 Ajouter un sous-domaine (Pour les membres -> Sous-domaines)
4.5 Choisissez le client DNS à installer sur Raspberry (Pour les membres -> DNS dynamique -> Ressources DNS Synamic -> Clients DNS dynamiques)
J'ai choisi wget_script update.sh d'Adam Dean (en bas de page)
Il existe des espaces réservés _YOURAPIKEYHERE_ et _YOURDOMAINHERE_. Pour les obtenir, accédez à (Pour les membres -> DNS dynamique)
Et sur la page ci-dessous vous trouverez des exemples de scripts avec votre APIKEY et DOMAIN (celui ajouté en 4.4). J'ai pris ces valeurs de Wget Script et remplacé _YOURAPIKEYHERE_ et _YOURDOMAINHERE_ dans update.sh
4.6 Ensuite, exécutez update.sh sur framboise. Cela peut nécessiter dnsutils pour nslookup. Installez-le ensuite:
pi@raspberrypi:~ $ sudo apt-get dnsutils
4.7 Configurez ensuite votre routeur pour rediriger les requêtes du monde externe vers le port 8081 vers l'adresse IP de la framboise
4.8 Réservez l'adresse IP pour le MAC de votre framboise dans le paramètre DHCP afin que Rpi ait toujours la même adresse IP
4.9 Entrez ensuite dans le navigateur sur un appareil qui n'est pas connecté au réseau local:
votredomaine: 8081
Entrez vos informations d'identification que vous avez définies dans motion.conf.
Testez le fonctionnement de la vidéo.
4.10 afin de mettre à jour DDNS automatiquement configurer la tâche cron. Voir quick_cron_example sur (Pour les membres -> DNS dynamique)
Étape 5: Conseils
5.1 Soyez attentif à l'installation de packages python sur raspberry. J'ai passé une journée à déboguer cela - le problème était qu'à partir de la console, le script fonctionnait bien, mais pas le rappel d'événement de mouvement. Ce qui aggravait la situation, c'est que les traces du script n'étaient pas disponibles dans ce dernier cas.
La raison en était qu'en suivant le guide, j'ai installé les packages pour l'utilisateur 'pi' (qui se trouve par défaut dans le répertoire /home/pi et limité aux autres utilisateurs), mais pour exécuter le script en tant qu'enfant du service 'motion', les packages doivent être également disponible pour l'utilisateur 'motion'. Donc finalement je l'ai corrigé en installant les packages comme
sudo pip3 …
Ce n'est pas une bonne façon de travailler. L'installation sans sudo en tant que pip3 --system me donnait des erreurs pour une raison quelconque.
En conséquence, le script est également appelé sous sudo (voir motion.conf).
Au cours de ce dépannage, j'ai fait beaucoup de changements inutiles et je ne sais pas ce qui est nécessaire et maintenant trop paresseux pour les annuler progressivement et voir quand cela cessera de fonctionner. En particulier, les droits d'administrateur de mouvement sont accordés:
pi@raspberrypi:~ $ groupes de mouvement
motion: motion adm sudo audio vidéo utilisateurs netdev pi
pi@raspberrypi:~ $ sudo cat /etc/sudoers.d/010_pi-nopasswd
pi ALL=(ALL) NOPASSWD: ALL
mouvement ALL=(ALL) NOPASSWD: ALL
Modifiait également les propriétaires de fichiers et les autorisations similaires au téléchargement sur Google Drive. Cela peut probablement vous aider dans le cas où vous rencontrez un problème similaire.
5.2 L'API Google Photos permet d'ajouter des fichiers aux albums partagés uniquement afin que toute personne disposant du lien puisse y accéder. Ne le partagez pas par lien et supprimez les anciens films ou déplacez-les vers la corbeille ou depuis l'album. Dans ce dernier cas, ils restent dans le compte.
5.3 L'assistant Google Photos détecte les visages, ce qui est très utile si la qualité de l'appareil photo est bonne. En prime, il crée des compilations et des gifs multimédias sophistiqués, etc.
5.4 J'ai essayé d'utiliser un modem USB 4G LTE pour accéder à Internet et voici mes résultats.5.4.1 Huawei E3372h-153 fonctionne avec framboise sans problèmes et sans logiciel supplémentaire 5.4.2 Point d'accès également activé pour que Rasperry partage la connexion Internet via wifi. Il existe https://howtoraspberrypi.com/create-a-wi-fi-hotspot-in-less-than-10-minutes-with-pi-raspberry/ un guide très simple sur la façon de le faire avec RaspAP. 5.4.3 Le DNS dynamique ne fonctionnait pas dans le réseau 4G de ma carrie. Il y a une explication pourquoi
5.5 Après avoir utilisé ce système pendant quelques semaines, bien que les vidéos soient plus pratiques à visualiser et à télécharger, Google Photos fonctionne mieux avec les images. Par exemple, il permet de regrouper des objets/visages en analysant uniquement les images, et ensuite seulement de rechercher des visages/objets à partir des images dans les vidéos, mais pas l'inverse. Je vais donc tester des images en uploadant plutôt des vidéos.
Conseillé:
DIY Smart Doorbell : Code, configuration et intégration HA : 7 étapes (avec photos)
DIY Smart Doorbell : code, configuration et intégration HA : dans ce projet, je vais vous montrer comment transformer votre sonnette normale en une sonnette intelligente sans modifier aucune des fonctionnalités actuelles ni couper aucun fil. J'utiliserai une carte ESP8266 appelée Wemos D1 mini. Nouveau sur ESP8266 ? Regardez mon introduction
Système simple de statut et de réservation Kicker avec intégration Slack : 12 étapes (avec photos)
Système de statut et de réservation de kicker simple avec intégration Slack : Dans une entreprise où je travaille, il y a une table de kicker. L'entreprise occupe de nombreux étages et pour certains employés, il faut jusqu'à 3 minutes pour se rendre à table et… se rendre compte que la table est déjà occupée
Contrôle des stores avec ESP8266, intégration Google Home et Openhab et Webcontrol : 5 étapes (avec photos)
Contrôle des stores avec ESP8266, intégration Google Home et Openhab et contrôle Web : dans ce Instructable, je vous montre comment j'ai ajouté l'automatisation à mes stores. Je voulais pouvoir ajouter et supprimer l'automatisation, donc toute l'installation est clipsée. Les pièces principales sont : Moteur pas à pas Pilote pas à pas contrôlé bij ESP-01 Engrenage et montage
Capteur de porte à piles avec intégration domotique, WiFi et ESP-NOW : 5 étapes (avec photos)
Capteur de porte alimenté par batterie avec intégration domotique, WiFi et ESP-NOW : dans ce instructable, je vous montre comment j'ai fait un capteur de porte alimenté par batterie avec intégration domotique. J'ai vu d'autres capteurs et systèmes d'alarme sympas, mais je voulais en fabriquer un moi-même. Mes objectifs : Un capteur qui détecte et signale un doo
Bande LED 12v contrôlée par Wifi utilisant Raspberry Pi avec Tasker, intégration Ifttt.: 15 étapes (avec photos)
Bande LED 12v contrôlée par Wifi utilisant Raspberry Pi avec Tasker, intégration Ifttt.: Dans ce projet, je vais vous montrer comment contrôler une simple bande LED analogique 12v sur wifi à l'aide d'un Raspberry Pi. j'utilise un Raspberry Pi 1 modèle B+) 1x RGB 12v Le