Archives par mot-clé : frigate

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+

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