Table des matières:

Intégration de Raspberry Pi Linux Motion Google Photos : 5 étapes
Intégration de Raspberry Pi Linux Motion Google Photos : 5 étapes

Vidéo: Intégration de Raspberry Pi Linux Motion Google Photos : 5 étapes

Vidéo: Intégration de Raspberry Pi Linux Motion Google Photos : 5 étapes
Vidéo: Golang vs Python #shorts tiktok hackmymozg 2024, Novembre
Anonim
Intégration de Raspberry Pi Linux Motion Google Photos
Intégration de Raspberry Pi Linux Motion Google Photos

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

Configurer l'API Google Photos pour Python
Configurer l'API Google Photos pour Python
Configurer l'API Google Photos pour Python
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

Facultatif: configurer l'accès Web à la caméra de diffusion en temps réel
Facultatif: configurer l'accès Web à la caméra de diffusion en temps réel
Facultatif: configurer l'accès Web à la caméra de diffusion en temps réel
Facultatif: configurer l'accès Web à la caméra de diffusion en temps réel
Facultatif: configurer l'accès Web à la caméra de diffusion en temps réel
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é: