Caméra de sécurité open source basée sur Raspberry Pi
(github.com/TzuHuanTai)- Projet qui transforme un Raspberry Pi en caméra de sécurité domestique à faible latence
- Utilise l’encodeur matériel v4l2DMA et WebRTC
- Permet la lecture et le téléchargement de vidéos avec une caméra purement P2P, sans serveur multimédia
- Plusieurs utilisateurs peuvent regarder le flux en direct simultanément
- Le Raspberry Pi 5 et les autres SBC ne prennent pas en charge l’encodage matériel v4l2, ils doivent donc être utilisés en mode d’encodage logiciel
Mode d’emploi
- Télécharger le dernier fichier binaire depuis Releases
- Installer l’application Pi Camera et suivre les instructions
Exigences matérielles
- Raspberry Pi (Zero 2W ou supérieur)
- Module caméra CSI
- Carte micro SD d’au moins 4 Go
- Disque USB et adaptateur Micro-USB mâle vers USB-A femelle
Configuration de l’environnement
- Utiliser Raspberry Pi Imager pour écrire Lite OS (Bookworm 64-bit) sur la carte micro SD
- Installer les bibliothèques requises
sudo apt install libmosquitto1 pulseaudio libavformat59 libswscale6 - Activer le matériel Raspberry Pi en ajoutant le contenu ci-dessous à
/boot/firmware/config.txt
Définircamera_auto_detect=0 start_x=1 gpu_mem=16camera_auto_detect=0pour lire la caméra via v4l2 - Monter le disque USB [référence]
- Si vous ne souhaitez pas enregistrer les vidéos, ignorez cette étape et ne définissez pas l’option
record_pathau lancement - Lorsqu’un disque est détecté, il est automatiquement monté sur
/mnt/ext_disk
sudo apt-get install autofs echo '/- /etc/auto.usb --timeout=5' | sudo tee -a /etc/auto.master > /dev/null echo '/mnt/ext_disk -fstype=auto,nofail,nodev,nosuid,noatime,umask=000 :/dev/sda1' | sudo tee -a /etc/auto.usb > /dev/null sudo systemctl restart autofs - Si vous ne souhaitez pas enregistrer les vidéos, ignorez cette étape et ne définissez pas l’option
Exécution de l’application
- MQTT étant actuellement le seul mécanisme de signalisation utilisé, un serveur MQTT doit être prêt avant de démarrer l’application
- Si l’application n’est utilisée que sur le LAN, il est possible d’installer un serveur MQTT comme Mosquitto sur le même Pi
- Si un accès distant est nécessaire, il est recommandé d’utiliser un serveur MQTT basé dans le cloud (par ex. HiveMQ, EXMQ)
- Pour accéder à un serveur de signalisation distant via les données mobiles, il faut configurer le DDNS et le port forwarding
Exécution
- Vous pouvez lancer le binaire
pi_webrtcavec l’option-hpour voir toutes les options - Démarrer l’application avec la configuration appliquée
Astuce 1 : Le Pi 5 ne prend pas en charge l’encodage matériel, il faut donc supprimer l’optionpulseaudio --start /path/to/pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=hakunamatata --mqtt_password=Wonderful --uid=home-pi-zero2w --record_path=/mnt/ext_disk/video/--hw_accelet définir--v4l2_formatsurmjpeg. L’encodage vidéo est alors géré par OpenH264 Astuce 2 : Avec le réglage1920x1080, le firmware du décodeur matériel passe à1920x1088, mais comme l’isp/l’encodeur n’est pas ajusté, cela sort de la plage mémoire. En définissant1920x1088, il n’y a pas de problème
Exécution comme service Linux
1. Exécuter pulseaudio comme démon système global [référence]
- Créer le fichier
/etc/systemd/system/pulseaudio.service[Unit] Description= Pulseaudio Daemon After=rtkit-daemon.service systemd-udevd.service dbus.service [Service] Type=simple ExecStart=/usr/bin/pulseaudio --system --disallow-exit --disallow-module-loading Restart=always RestartSec=10 [Install] WantedBy=multi-user.target - Ajouter
autospawn = noà la configuration clientecho 'autospawn = no' | sudo tee -a /etc/pulse/client.conf > /dev/null - Ajouter root au groupe pulse
sudo adduser root pulse-access - Activer et démarrer le service
sudo systemctl daemon-reload sudo systemctl enable pulseaudio.service sudo systemctl start pulseaudio.service
2. Configurer l’exécution de pi_webrtc et son démarrage automatique au redémarrage
- Créer le fichier
/etc/systemd/system/pi-webrtc.service[Unit] Description= The p2p camera via webrtc. After=systemd-networkd.service [Service] Type=simple WorkingDirectory=/path/to ExecStart=/path/to/pi_webrtc --device=/dev/video0 --fps=30 --width=1280 --height=960 --v4l2_format=h264 --hw_accel --mqtt_host=example.s1.eu.hivemq.cloud --mqtt_port=8883 --mqtt_username=hakunamatata --mqtt_password=wonderful --record_path=/mnt/ext_disk/video/ Restart=always RestartSec=10 [Install] WantedBy=multi-user.target - Activer et démarrer le service
sudo systemctl daemon-reload sudo systemctl enable pi-webrtc.service sudo systemctl start pi-webrtc.service
Configuration avancée
- Il faut ajouter un microphone et un haut-parleur pour la communication bidirectionnelle
Microphone
- Voir le lien pour les instructions de câblage et de test du microphone
Haut-parleur
- Voir le lien pour les instructions de configuration du haut-parleur
Licence
- Ce projet est distribué sous licence Apache License, Version 2.0. Voir le fichier LICENSE pour plus de détails
Résumé de GN⁺
- Ce projet montre comment transformer un Raspberry Pi en caméra de sécurité domestique à faible latence
- Il fonctionne en mode purement P2P sans serveur multimédia grâce à l’encodeur matériel v4l2DMA et à WebRTC
- Plusieurs utilisateurs peuvent regarder simultanément le flux en direct, ce qui le rend utile comme caméra de sécurité domestique
- Son mécanisme de signalisation basé sur MQTT permet aussi bien l’accès sur le LAN que l’accès distant
- Parmi les autres projets offrant des fonctions similaires, on trouve MotionEye et ZoneMinder
1 commentaires
Avis Hacker News
Un utilisateur a expliqué qu'en rénovant sa maison, il avait voulu installer un système de sécurité pour une surveillance à distance, avant de découvrir que la plupart des fonctionnalités nécessitaient un accès Internet haut débit
Un autre utilisateur vivait en appartement pendant la construction de sa maison et voulait créer une vidéo en time-lapse tout en vérifiant l'avancement des travaux via Internet
Un autre encore envisageait le projet mediamtx avec un Raspberry Pi Zero WH
Un utilisateur s'est demandé pourquoi le Raspberry Pi 5 ne prenait pas en charge l'encodage matériel v4l2
Un autre essayait de faire de la détection de personnes en temps réel avec le modèle yolov3-tiny
Un autre utilisateur a atteint un objectif similaire avec Sentry-Picam, en le synchronisant avec trois autres appareils via Syncthing et en y branchant un script de notifications push basé sur sendxmpp
Un utilisateur a mené un projet similaire avec Nvidia Jetson et s'intéresse désormais à reCamera
Un autre cherchait une carte utilisant un firmware open source
Enfin, un utilisateur se demandait si WebRTC était une bonne solution pour n'enregistrer que le son