Archives par mot-clé : videosurveillance

Système de vidéosurveillance

Ça va finir par devenir une obsession, mais après le post de découverte de Frigate et Frigate+, celui de présentation du système de notification sur un groupe Signal et le dernier concernant la mise en place d’un serveur dédié à base de N150, voilà un post et une image qui résume à lui tout seul mon système complet de vidéosurveillance basé sur Frigate et Frigate+ qui arrive à peu près à maturité.

Frigate tourne sur un mini PC dédié accessible d’internet avec connexion chiffrée via un certificat Let’s Encrypt le tout géré par traefik qui gère également l’authentification, les deux tournent sous l’outil de conteneurisation docker. Localement ce mini PC se nomme Cerbere, il est assisté d’un poste secondaire nommé Ultra qui sert à gérer une caméra bas coût dont l’adresse RTSP fluctue régulièrement et sur lequel tourne également un serveur apache httpd. Cerbere utilise une clé Google Coral TPU pour accélérer l’exploitation des modèles d’apprentissage. Six caméras IP sont connectées au total réparties en extérieur, 4 sont en connexion ethernet POE (alimentation par le câble ethernet), 3 utilisent les fonctions PTZ et sont mobiles. Dans les caméras on trouve un visiophone qui est piloté d’un écran lui même connecté en intérieur en ethernet POE, on trouve également une caméra bas coût connecté via un répéteur WIFI qui se trouve dans un local extérieur électrifié.
Physiquement mon système est réparti sur plusieurs zones :

  • extérieur : localisation des caméras, qui toutes supportent très bien les intempéries et le cagnard du sud.
  • garage : localisation de mon serveur Cerbere et de toutes les arrivées réseau de la maison avec un switch classique sur lequel est brassé les câbles RJ45 qui desservent les différentes pièces de la maison (et qui ont remplacé les câbles téléphoniques) et un switch POE pour les caméras.
  • mezzanine : localisation de ma box, de mon routeur et de mon autre serveur Ultra.
  • local extérieur : localisation d’un répéteur WIFI pour étendre la portée d’une caméra.
  • cuisine : localisation de l’écran du visiophone dont la caméra est intégrée au système.

Il y a pléthore de caméras IP sur le marché, les moins chères sont souvent des modèles chinois liées à une application qui fonctionne sous Android et à la sécurité plus que douteuse. Les critères de choix sont :

  • caméras qui génèrent un flux vidéo RTSP avec une adresse fixe et qui vont s’intégrer très facilement à ZoneMinder ou Frigate. Des sites comme ipcamlive ou ispyconnect recensent les caméras par marque ayant une adresse RTSP fixe. Malgré ça, comme je n’avais pas intégré ce critère initialement, j’ai une caméra dont l’adresse RSTP change régulièrement, ce n’est pas insurmontable mais ça complexifie l’installation car il faudra mettre en place des scripts qui vont rendre l’adresse fixe pour ZoneMinder ou Frigate.
  • caméras configurables en se connectant en indiquant leur adresse IP dans un navigateur sans avoir à passer par une application. Pour les caméras bas coût, j’ai dû néanmoins passer par l’application Android pour pouvoir les paramétrer.
  • paramètres d’administration qui permettent de changer les paramètres réseau pour les connecter à un réseau local, les caméras ne doivent pas directement accessibles sur internet mais uniquement via Frigate ou ZoneMinder
  • ce n’est pas strictement obligatoire, mais c’est mieux que la caméra puisse se connecter en ethernet POE ça permet d’avoir un seul fil (pas de câble d’alimentation, tout passe par le câble ethernet), sur de longues distances, (mon câble le plus long fait 30m)avec une connexion fiable et de bonne qualité. J’ai néanmoins deux caméras bas coût qui ne sont pas POE et qui sont alimentées avec un câble d’alimentation en plus d’être connectées par ethernet de manière classique, l’une d’entre elle est à plus d’une cinquantaine de mètre, elle est connectée à un répéteur WIFI dont le choix a été délicat car il me fallait un modèle totalement paramétrable pour les paramètres réseau.


Il existe également un autre acteur qui m’a donné beaucoup de fil à retordre, il s’agit du firewall shorewall. Il faut qu’il soit à la fois très restrictif pour interdire tout accès aux caméras directement via internet mais également qu’il puisse ouvrir les routes au juste besoin pour que Frigate soit accessible en sécurité d’un mobile sur internet via traefik, qui assure la connexion chiffrée avec un certificat validé par let’s encrypt et puisse communiquer avec les bases de données Frigate+. Et je dois avouer que je n’y serais pas arrivé sans l’aide de gemini enfin du moins pas aussi rapidement.

Les pages dédiées sur mon site funix.org :

  • La page sur l’installation du hardware, gestion des caméras et de la clé Google Coral TPU
  • La page sur l’installation et la configuration de Frigate et Frigate+

Serveur dédié de videosurveillance Frigate+

J’ai mis à jour le système de vidéosurveillance Frigate vers la dernière version 0.17, celle-ci intègre des instructions AVX qui deviennent nécessaires pour l’apprentissage de modèles ou bénéficier de certaines fonctionnalités. Il est inutile de faire évoluer le noyau linux, c’est en hard dans le processeur ou le GPU. Je me suis résolu à acheter un nouveau serveur dédié plus moderne sur un célèbre site vente chinois pour la modique somme de 155€.

Ninkear N10 Pro

C’est un Ninkear n10 Pro basé sur un processeur N150 Twin Lake-N avec 16Go de RAM DDR4 et un disque SSD interne de 1To. Il est évidemment neuf et pour ce prix là difficile de faire mieux, les Raspberry n’ont qu’à se rhabiller.

De fait ça a compliqué ma configuration réseau, car j’utilise toujours mon autre mini PC Lenovo ThinkCenter M92p pour faire tourner mes autres services réseau dont certains sont accessibles sur internet (webmail via roundcubemail via un serveur httpd apache).

Lenovo ThinkCenter M92p avec une clé Google Coral

Il a fallu revoir mes tables de routage entre ma box SFR et mon routeur interne TP-Link Archer C6 qui fait l’interface avec le réseau local. Par ailleurs mon serveur actuel dispose d’un certificat Let’s Encrypt avec une URL accessible par internet géré par no-ip. Pour que frigate soit accessible d’un mobile sur internet, j’ai donc créé une deuxième URL avec no-ip spécifique comme ma box SFR ne gère qu’une adresse dynamique, c’est mon routeur interne qui se charge de mettre à jour cette adresse régulièrement.

Continuer la lecture de Serveur dédié de videosurveillance Frigate+

Recevoir des alertes Frigate avec Signal via MQTT

Grâce à l’aide de ChatGPT en mode itératif, j’ai construit un script qui me permet d’envoyer les alertes Frigate de détection de personnes et de voitures sur la messagerie Signal sur mon mobile. Il se base sur MQTT (Message Queuing Telemetry Transport) qui est un protocole de messagerie qui fonctionne sur le principe de souscription / publication, c’est à dire qu’un serveur (ou broker) peut publier des notifications sur un canal et des clients peuvent souscrire pour visualiser les notifications.

Cela donne quelque chose comme cela :

Pour MQTT j’ai utilisé Mosquitto qu’il faudra lancer en tant que service systemd. Frigate génére un certain nombre de messages MQTT comme on peut le voir ici. On utilisera Frigate/events qui est diffusé sur un canal MQTT, un script s’abonnera à ce canal et déclenchera l’envoi de mail et un message Signal dès déclenchement d’une alerte avec détection de personnes ou de voitures.

La suite détaillée c’est par ici.

Système de vidéosurveillance Frigate+

Finalement après avoir testé le système de vidéosurveillance Frigate depuis quelques semaines, je suis conquis, ça me change de ZoneMinder qu est vraiment une usine à gaz que j’avais le plus grand mal à régler. Je suis donc naturellement passé à la version payante Frigate+, qui pour un abonnement modique de 50$ annuel (payable via paypal) permet de pouvoir bénéficier d’un modèle personnalisé pour la détection des objets. Il se base sur les modèles partagés par la communauté et accessibles avec l’abonnement et on peut l’enrichir par apprentissage en l’alimentant en validant les vrais positifs, en créant des objets non détectés ou en invalidant des faux positifs.

Invalidation d’un faux positif

A force d’apprentissage le modèle personnalisé deviendra de plus en plus précis et nécessitera de moins en moins de ressource. Au point qu’on peut abaisser les seuils de détection pour capter davantage d’objets.

Tant qu’à faire, par défaut Frigate génère un certificat auto signé pour utiliser le port 8971 ce qui génère un avertissement de sécurité dans le navigateur. Sous Firefox on peut accepter le risque pour pouvoir y accéder, mais ce n’est quand même pas terrible, d’autant plus si on accède à Frigate d’internet. J’ai donc utilisé Let’s Encrypt qui se repose sur mon serveur apache et non nginx comme c’est présenté un peu partout sur le net, tout simplement parce qu’apache tourne déjà sur mon serveur et il était inutile de faire tourner un serveur doublon. J’ai dû modifier également le chemin d’accès par défaut de Frigate car la place était déjà prise.

  • Pour la configuration de Frigate avec Let’s Encrypt c’est par ici
  • Pour la configuration et l’utilisation de Frigate+ c’est par

Intégration d’une clé USB accélérateur Google Coral sur ZoneMinder

J’ai investi dans une clé USB accélérateur Google Coral Edge TPU pour moins d’une centaine d’euros sur un célèbre site de vente en ligne. Cette clé est destinée à booster mon système personnel de vidéosurveillance aujourd’hui basé sur ZoneMinder.

Clé Google Coral branchée sur mon serveur basse consommation Lenovo ThinkCenter M92p

Jusqu’à présent dans le monde des processeurs on connaissait les CPU et les GPU, il existe maintenant aussi les TPU. TPU pour Tensor Processing Unit est une unité de calcul spécifique pour pouvoir exploiter la bibliothèque opensource TensorFlow qui est utilisée dans le monde de l’IA pour l’apprentissage automatique, les réseaux de neurones et les calculs numériques généraux sur CPU, GPU, cluster de GPU et TPU donc. Pour la petite histoire tensor, ou tenseur en français, est le nom générique pour les structures de données utilisées pour l’apprentissage automatique. Le tout est développé par Google au sein de la division dédiée à l’IA Google AI. TensorFlow n’est pas le seul moteur d’IA, pour s’en convaincre cette page recense les principaux moteurs, mais tous ne bénéficient d’une puce dédiée. L’avantage du TPU de Google est qu’il se base sur des bibliothèques libres qui ont favorisé son développement et l’ont popularisé, couplé à un coût abordable qui permet de booster un PC quelconque à moindre frais. En terme de performance, il faut savoir qu’un TPU peut être 15 à 20 fois plus performant qu’un CPU ou GPU pour des tâches d’apprentissage automatique (cf. réf).

L’installation est prévue pour les distributions Debian et Debian like comme Ubuntu comme on peut le voir sur la page officielle et il n’y a pas plus d’indications pour les autres distributions notamment celles basée sur RPM comme ma Mageia. Trois bibliothèques sont nécessaires à l’utilisation de la clé, TensorFlow évoquée plus haut, libedgetpu pour piloter les périphériques Coral et PyCoral, une bibliothèque API Python pour exploiter TensorFlow sur des périphériques Coral. A défaut de packages précompilés pour ma distribution, je suis parti dans la compilation des bibliothèques. Encore une fois je me suis fait assister par ChatGPT, mais alors qu’il m’a été d’un grand secours pour rédiger des scripts pour adresser une caméra IP dont l’adresse change régulièrement, il m’a totalement perdu. Il m’a envoyé sur un tas de chemins de traverse, souvent contradictoires entre eux, sur la base d’informations obsolètes, incomplètes voire fausses, sans prendre en compte forcément le travail déjà réalisé, il pouvait dire tout et son contraire en deux questions, pour prendre un exemple une fois il va me dire qu’il faut une version de Bazel supérieure à 8 et deux questions plus loin il faut une version inférieure à 7 ! Il y a souvent aucune logique dans l’enchaînement des réponses alors que j’avais l’impression de rester sur mon cheminement logique. Au final j’ai perdu un temps considérable à exploiter chacune des pistes, finalement j’ai arrêté les frais, pris du recul et j’y suis allé au feeling à l’ancienne, j’ai réussi à compiler TensorFlow et libedgetpu plus ou moins laborieusement car il est nécessaire de faire coïncider les versions pour que ça fonctionne et j’ai trouvé sur le net des packages fonctionnels pour PyCoral compatible avec Python 3.10 de ma distribution que quelqu’un a bien voulu partager. Tout cela est expliqué sur cette page.

Continuer la lecture de Intégration d’une clé USB accélérateur Google Coral sur ZoneMinder

L’IA devenue outil du quotidien

Je me rends compte que j’ai quasiment laissé tomber les moteurs de recherche, dont le premier d’entre eux et mon premier réflexe est maintenant d’abord de consulter chatgpt. Pourquoi chatgpt ? Simplement parce que je trouve encore les autres bien moins performants.

Je le consulte pour les petites problématiques du quotidien et du bricoleur du dimanche que je suis, quand je regarde mon historique de consultation, ça va aussi bien de la recherche d’une référence d’une pièce auto et la manière de l’installer, rattraper une anchoïade, installer un programmateur dans un tableau électrique, faire un joint d’étanchéité sous l’eau ou trouver le mode d’emploi d’un réfrigérateur ! Et dans le domaine informatique, ça couvre aussi bien des scripts bash pour divers usage et des problèmes variés rencontrés sur divers logiciels.

Tout n’est surtout pas à prendre au pied de la lettre, il y a parfois des erreurs grossières, des informations datées voire obsolètes, il lui arrive également de tourner en rond et de radoter sans avancer, mais le plus souvent il me donne les bonnes pistes et par itération successive, j’arrive très souvent à mes fins pour résoudre mon problème initial.

S’il fallait illustrer mes propos par un exemple concret, dans des précédents posts (ici, et ici encore) j’avais évoqué que j’avais déployé chez moi un système de vidéosurveillance basé sur zoneminder. J’avais acheté un ensemble de caméras adhoc dont certaines à bas coût d’une vingtaine d’euros dont les caractéristiques semblaient intéressantes pour l’usage que je voulais en faire.

Caméras low cost ieGeek ie60 et Annke Crater Pro

A vrai dire je n’ai jamais pu installer ces caméras bas coût car l’adresse du flux vidéo change régulièrement ce qui les rend inutilisables pour les logiciels comme zoneminder ou frigate qui ne gèrent que les adresses fixes, contraignant à utiliser l’application propriétaire Android fournie avec.

J’ai buté des mois sur ce problème en tentant vainement diverses solutions et en mettant au point sans succès très laborieusement un script python. Dernièrement j’ai fait appel à chatgpt et en 2h de temps tout était en place. Chatgpt m’a aidé à créer un script qui récupère à intervalle régulier l’adresse du stream vidéo, adresse qu’il enregistre ensuite dans le fichier de configuration de mediamtx, serveur de flux vidéo qui rediffuse le flux avec une adresse fixe accessible de zoneminder ou frigate.
Je ne suis pas sûr que j’y serais arrivé seul, ou alors au bout de je ne sais combien d’heure de vaines programmations. Je me rends compte que chatgpt a évolué également, car je lui avais posé la même question il y a plusieurs mois, il a été incapable d’y répondre et ne m’avait pas donné à l’époque de pistes sérieuses pour avancer.

Il en reste pas moins que ceux qui sont intéressés par ce sujet spécifique peuvent toujours consulter cette page de mon site Funix pour retrouver ces scripts python.

Une histoire de répéteur

Pour mon système de vidéosurveillance personnel j’ai une caméra extérieure connectée en WIFI à Zoneminder de type Annke WPT500 I51CP.

Le signal WIFI étant insuffisant j’ai installé un répéteur générique bas de gamme de ce type sur un célèbre site de vente en ligne. Je pensais naïvement que ce genre de matériel se contentait d’amplifier le signal et puis basta et là j’ai découvert que les répéteurs bas de gamme ont un fonctionnement bien particulier. En effet, ils clonent le réseau wifi sur 1 ou 2 fréquences (2,4 et 5Ghz) souvent avec des noms différents, font serveur DHCP et utilisent une classe d’adresse particulière pour les appareils qui s’y connectent, ils agissent comme un routeur. Résultat des courses, bien que les appareils concernés se connectent bien à internet, pas moyen de récupérer le flux RTSP de la caméra sur mon réseau local, et bien évidemment aucun moyen de pouvoir modifier cette fichue classe d’adresse.

Pour m’en sortir j’ai investi dans un répéteur de marque un TP-Link RE305 qui a l’avantage d’être entièrement configurable, j’ai pu indiquer les mêmes informations pour que les appareils connectés soient directement connectés à mon réseau local. J’ai veillé également à configurer les adresses du serveur DHCP pour qu’elles ne débordent pas sur celles de mon routeur.

Accessoirement ce répéteur est compatible Mesh ce qui n’est pas le cas des répéteurs bas de gamme. Un réseau WIFI Mesh ou maillé est constitué de plusieurs nœuds et permet de diffuser le signal WIFI sur une grande surface sur un même réseau unifié et homogène, pratique pour diffuser le signal de partout dans une maison. Le maillage créé s’adapte automatiquement aux flux de données pour garantir la stabilité et le débit maximal contrairement à un répéteur qui va mécaniquement diminuer la bande passante pour augmenter le signal. Les appareils se connectent automatiquement vers le nœud avec le meilleur signal sans déconnexion.

Pour ma part j’ai seulement deux nœuds WIFI, mon routeur TP-Link Archer C6 qui diffuse le signal WIFI initial et donc le répéteur de la même marque en mode Mesh. Du coup en activant le mode Mesh, ma caméra est facilement connectée et je peux visualiser mon flux RTSP.

Piloter zoneminder d’un mobile avec zmNinja

Il est possible d’accéder au système de vidéosurveillance zoneminder à partir d’un mobile dès lors que vous avez activé votre serveur httpd pour être visible sur internet. Pour cela j’ai ouvert une route sur ma box SFR et mon routeur en activant une connexion chiffrée SSL sur mon serveur LAMP. Je me suis abonné à No-IP qui me permet d’avoir une adresse fixe sur internet qui pointe sur l’adresse IP dynamique que m’attribue SFR. Bien sûr j’ai défini les règles qui vont bien avec shorewall.

L’affichage sur le mobile n’est pas formidable et pas très convivial comme on peut le voir ci-dessous:

Il se trouve qu’il existe une application adhoc qui s’appelle zmNinja. Alors certes cela coûte la modique somme de 4,69€ mais ça vaut le coup d’investir pour si peu pour avoir une visualisation confortable sur mobile.

Continuer la lecture de Piloter zoneminder d’un mobile avec zmNinja

Vidéosurveillance avec Zoneminder la suite

J’ai étoffé mon système de vidéosurveillance avec maintenant trois caméras extérieures au total, c’est ma configuration a priori définitive. Comme j’étais plutôt satisfait de la caméra Annke C500 I51DL avec une bonne compatibilité sous Linux j’en ai prise une deuxième, pour la dernière caméra c’est toujours une Annke, un modèle dôme commandable à distance WPT500 I51CP qui marche également parfaitement sous Linux.

Annke C500 I51DL
Annke WPT500 I51CP

Pour finaliser mon dispositif, je souhaite également placer une caméra à l’intérieur. Sans vouloir y mettre le prix j’ai testé une caméra Annke Crater Pro I81CG qui m’a coûté guère plus d’une vingtaine d’euros.

Annke Crater Pro
Continuer la lecture de Vidéosurveillance avec Zoneminder la suite