You are currently viewing Frigate : La vidéo surveillance booster par l’IA pour votre domotique

Frigate : La vidéo surveillance booster par l’IA pour votre domotique

  • Auteur/autrice de la publication :
  • Post category:Jeedom

tags : Frigate : la vidéosurveillance boostée par l’IA pour votre domotique

0. Contexte

Il y a quelques moi j’ai découvert cette merveille qu’est frigate avec pour but d’utiliser mes cameras pour la détection de présence humaine, En effet j’ai deux gros chiens qui déclenchent sans arrêts les détecteurs de mouvement.
Vous n’êtes pas sans savoir qu’il y as une différence entre détecteur de mouvement et détecteur de présence.
En effet frigate détecte de nombreux objets (humain, chiens, chat, voiture, ETC….), il peut aussi enregistrer des clips vidéo sur détections et crée un écran de poursuite pour afficher les cameras ou il y a une détection en cours.

Le jeux en vaut la chandelle : cette article va être assez technique et on va partir dans les méandres de la vidéosurveillance : ACCROCHEZ VOUS !

1. Les prés-requis

Frigate utilise des flux vidéos et de l’intelligence artificiel il demande donc la ressource en conséquence, on va voir ensemble comment alléger le bousin et aussi avec quoi le soulager. Si vous arrivez avec un raspberry pi 3b+ je pense que vous pouvez déjà passez votre chemin LOL.

1.1 La machine

Selon le nombre de cameras il faudra une machine assez puissance, sachant qu’on peut utiliser un google Coral (loic trouveras un lien) qui soulage énormément la machine, on peut aussi utiliser une carte graphique en soutient.
Pour mon cas j’ai juste une machine avec un AMD ryzen 16cores et 16GB de ram, ça tourne pas mal. mais vous pouvez prendre moin puissant bien sûre a condition d’envisager un google coral.

1.2 Les caméras

Pour les caméras n’importe lesquelles feront l’affaire a condition qu’on parle d’une caméra ONVIF, et qu’on est quelque chose qui ressemble a une images et pas des pixels qui se baladent.
D’ailleurs entrons dans le détail du choix d’une caméra :

Bon déjà ONVIF c’est quoi ? C’est un protocole universel commun a toutes marques de caméras qui diffusent la vidéo sur un flux RTSP /!\ toutes les caméras ne sont pas forcément ONVIF, aujourd’hui on retrouve beaucoup de cameras « full-cloud »

Le choix de la lentille : pour un couloir une grosse lentille fait l’affaire pour une pièce avec un champs de vision large préférez une lentille de 2.8mm.
Plus la lentille est petite plus l’angle de vision est large plus elle est grosse plus on raccourci l’angle de vision mais on chopperas plus de détails et surtout on iras plus loin.
En intérieur pour moi une camera fixe suffit, en revanche en extérieur selon ce qu’on veux surveiller préférez au moins une VARIFOCAL voir une véritable PTZ (PAN TIL ZOOM(optique)) cela permet d’avoir une vision fixée sur un point avec une grande distance.

La vision nocturne : il existe désormais des cameras avec COLORVU qui ont une lumière intégrée pour avoir une vision de nuit en couleur mais c’est beaucoup moins discret qu’une vision infrarouge qui affichera elle une vision en N&B de nuit, enfin si le but c’est d’allumer les lumières c’est parfait.

1.3 Le Software

Frigate est un container docker il vous faut un environnement docker (optez pour portainer ? )
Pour récupérer les adresses de flux RTSP j’utilise Onvif Device Manager sur window
Et enfin pour transmettre les détections il te faut un brooker mqtt

1.3.1 Installation d’un docker simple sur proxmox

1.3.1.1 Créer un LXC exécutant Docker Compose

Comme dirait Dimitri exécuter un environnement Docker dans un conteneur LXC dans Proxmox,faut vraiement être con, mais en vrai c’est un peu ma marque de fabrique. J’ai utilisé le script de création Docker LXC de la bibliothèque Proxmox Helper Scripts.

Frigate : la vidéosurveillance boostée par l'IA pour votre domotique

Allez dans utilisez le shell dans l’interface Web et collez la commande bash à partir du site Web d’aide.

bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/docker.sh)"

Vous devriez maintenant voir l’assistant de création LXC à l’écran.

Choisissez Paramètres avancés et entrez ces paramètres lorsque vous y êtes invité.

Distribution : Debian
Version : La dernière (j’ai choisi 12 Bookworm)
Type : Privilégié
Mot de passe : Ce que vous voulez ! eviter jeedom ou pire usine a gaz !
ID du conteneur : Laissez la valeur par défaut ou celle qui est vide , mais notez-la, nous en aurons besoin plus tard.
Nom d’hôte : Docker, Frigate ou tirelipinpon si cela vous fait plaisir
Taille du disque en Go : J’ai défini le mien sur 8 Go, car je je ne veux pas etre bloqué par les eventuels mise à jour
Cœurs de processeur : 2
RAM : 4go car j’ai un coral
Pont : Laissez la valeur par défaut
Adresse IP : Définissez une adresse IP statique adaptée à votre réseau domestique, et n’oubliez pas d’ajouter le /24 à la fin (en supposant que vous ayez un masque de sous-réseau 255.255.255.0). Ajoutez également vos adresses IP de passerelle et de serveur DNS correctes. J’ai également désactivé IPv6 car je ne l’utilise pas à la maison.
Activer l’accès SSH root : Oui
ZFS Fuse OverlayFS : J’ai choisi Aucun car je ne sais meme pas ce que c’est
mode détaillé : Non

Une fois tous ces paramètres définis, la création du conteneur devrait commencer. Lorsque vous y êtes invité, sélectionnez Oui pour installer Portainer et Docker Compose .

et voila le conteneur est fini

je vous encourage vivement a offrir un cafe a l’auteur du script , jouez pas les radins ou les « économes » comme dirait dimitri !

Normalement si tout à fonctionné vous devrier pouvoir ouvrir votre portainer a adresseip:9000

définir le mot de passe portainer et bim :

Frigate : la vidéosurveillance boostée par l'IA pour votre domotique
1.3.1.1.1 Probleme de port portainer

si cela ne fonctionne pas peut etre un probleme de port :

Exécute cette commande pour voir les conteneurs en cours d’exécution :

docker ps

Le conteneur Portainer est bien en cours d’exécution, mais il y a un problème avec le mappage du port 9000. Voici ce qui ne va pas :

  • Dans la colonne PORTS, on voit 9000/tcp sans 0.0.0.0:9000->9000/tcp, ce qui signifie que le port 9000 n’est pas exposé correctement

Tu dois recréer le conteneur avec le bon mappage de ports. Suis ces étapes :

Supprimer l’ancien conteneur
docker stop portainer
docker rm portainer
Relancer Portainer avec les bons ports
docker run -d \
-p 9000:9000 \
-p 8000:8000 \
-p 9443:9443 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce

Explication des ports :

  • -p 9000:9000 → Interface web de Portainer (HTTP)
  • -p 8000:8000 → Edge Agent
  • -p 9443:9443 → Interface web sécurisée (HTTPS)

Vérifier à nouveau

Après quelques secondes, exécute :

docker ps

Tu devrais voir 0.0.0.0:9000->9000/tcp, confirmant que le port est bien exposé.

1.3.1.2 Créer le fichier Docker Compose

Accédez maintenant au shell ou à la console du conteneur docker-frgate et accédez au répertoire /opt .

cd /opt

Dans ce répertoire, vous pouvez exécuter la commande suivante pour créer un nouveau fichier Docker Compose.

nano docker-compose.yaml

Ensuite, collez le script Docker Compose suivant.

version: '3.9'

services:
  frigate:
    container_name: frigate
    privileged: true
    restart: unless-stopped
    image: ghcr.io/blakeblackshear/frigate:stable
    shm_size: "256mb"  # Ajuste en fonction du nombre de caméras
    devices:
      - /dev/bus/usb:/dev/bus/usb
      - /dev/dri/renderD128 # Vérifie si ton matériel supporte Intel HWACCEL
      - /dev/apex_0:/dev/apex_0  # Ajout du support pour Coral USB TPU
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /opt/frigate/config:/config:rw  # Correction: accès en écriture
      - type: tmpfs # Réduit l'usure SSD
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "5000:5000"
      - "1935:1935" # RTMP feeds
    environment:
      FRIGATE_RTSP_PASSWORD: "myPassword"

Vous pouvez voir dans la section Volumes que j’ai mappé le point de montage /cctv_clips sur le répertoire /media/frigate. C’est là que Frigate stocke ses clips et ses enregistrements par défaut, vous devrez donc supprimer cette ligne si vous n’utilisez pas de point de montage.

Enregistrez le fichier et quittez Nano.

2.0 Récupération du flux RTSP des cameras

Certaines caméras néscecite une identification pour obtenir le flux RTSP pour savoir si oui ou non ouvrez VLC et faite CTRL+N et entrée le flux rtsp .

Frigate : la vidéosurveillance boostée par l'IA pour votre domotique


Pour soulager frigate on va plutôt utiliser le flux secondaire : plus petit et plus léger

rtsp://192.168.0.232:554/user=admin_password=jRqk3eZz_channel=0_stream=0&onvif=0.sdp?real_stream on remplace stream=0 par =1

Pour une camera qui as elle besoin d’une indentification ?

Rajoutez l’identifiant et le mot de passe

rtsp://ID:MDP@192.168.0.197/media/video1 et pour obtenir le flux secondaire on remplace video1 par video2

Et on vérifie bien sur avec VLC

On peut maintenant commencer frigate (on verras plus tard comment bien régler les frames rates des cameras)

3. Installation de Frigate

3.1 Le config.yaml

Bon c’est maintenant que ça se corse il faut d’abord crée un premier config.yaml pour pouvoir ensuite lancer frigate. je vous propose de prendre le mien pour commencer on respecte bien les espaces etc dans un config.yaml
Tu crée un nouveaux document .txt que tu renomme en config.yaml

mqtt:
#  enabled: False             si tu veux pas utiliser le mqtt
  host: ADRESSE IP DU BROOKER 
  user: ID si y'en as un 
  password: MDP si y'en as un ! 
detectors:
  cpu1:
    type: cpu
    num_threads: 3
  cpu2:
    type: cpu
    num_threads: 3
  cpu3:
    type: cpu
    num_threads: 3
  cpu4:
    type: cpu
    num_threads: 3
## au dessus on règle le nombre de CPU qu'on souhaite utiliser (enfaite ça as peut d'incidence ;) mais ca m'as permis de gagner 2 seconde sur la detection)
birdseye:
  enabled: false
  mode: motion
  restream: true
  layout:
    max_cameras: 2
### on verras la partie birdseye (ecran de poursuite) plus tard 
cameras:
  salon: 
## le nom de la camera 1
    birdseye:
      mode: objects
    ffmpeg:
      inputs:
      - path: 
          LA TU COLLE L'ADRESSE DU FLUX RTSP
        roles:
        - detect
    detect:
      width: 704 
      height: 576
##tu regle la taille de l'image
      fps: 2 
##la ça sert a rien de mettre beaucoup 2 frames par seconde c'est deja beaucoup pour simplement de la détection  
    objects:
      track:
      - person
## ici tu peut rajouter les autres objet que tu souhaite tracker -dog -car - bird etc 

3.2 configuration de l’installation de Frigate

Vous trouverez le stack de l’installation de frigate sur leurs site : ICI On va le décortiquer ensemble

version: "3.9"
services:
  frigate:
    container_name: frigate  <<=== ICI LE NOM DE VOTRE CONTAINER
    privileged: true # this may not be necessary for all setups <== la on laisse sur true
    restart: unless-stopped <=== pas touche
    image: ghcr.io/blakeblackshear/frigate:stable <== pas touche
    shm_size: "64mb" # update for your cameras based on calculation above
    devices:
      - /dev/bus/usb:/dev/bus/usb  <=== si tu utilise un CORAL change le nom du chemin sinon vire
      - /dev/apex_0:/dev/apex_0   <== si tu utilise un coral pcie pareil sinon vire
      - /dev/video11:/dev/video11  # For Raspberry Pi 4B <=== sinon vire de toute façon c'est perdu d'avance lol
      - /dev/dri/renderD128:/dev/dri/renderD128  <=== si tu utilise une Carte graphique adapte le chemin
    volumes:
      - /etc/localtime:/etc/localtime:ro  <== touche a rien 
      - /path/to/your/config:/config  <== adapte au chemin vers ton config.yaml (qu'il faut crée ! 
      - /path/to/your/storage:/media/frigate <== c'est ici que seront stocké les clips video (attention faut de la place ! )
      - type: tmpfs # Optional: 1GB of memory, reduces SSD/SD Card wear
        target: /tmp/cache
        tmpfs:
          size: 1000000000
    ports:
      - "5000:5000"  <== le port de la page web de frigate
      - "8554:8554" # RTSP feeds
      - "8555:8555/tcp" # WebRTC over tcp
      - "8555:8555/udp" # WebRTC over udp
    environment:
      FRIGATE_RTSP_PASSWORD: "password"  <<= tout ca tu peut virer si tu veux 

Avant de compiler met le fichier config.yaml dans le dossier

3.3 Google coral

Le Google Coral est un accélérateur qui optimise l’analyse vidéo dans Frigate. Il permet de déléguer la détection des objets et des personnes à une puce spécialisée plutôt qu’au processeur principal.

L’intérêt est double :

  • Réduction de la charge CPU : Frigate analyse en continu les flux des caméras, ce qui peut vite saturer un serveur sans accélération matérielle. Le Coral prend en charge cette tâche, libérant ainsi des ressources.
  • Amélioration des performances : Avec Coral, la détection est plus rapide et plus précise, réduisant les faux positifs et les délais d’analyse.

Cela permet d’avoir un système de surveillance plus réactif et plus efficace, sans nécessiter un serveur surdimensionné.

Comment on l’installe ?

On se connecte en ssh a sa vm et on installe les pilotes

echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
curl -fsSL https://dl.k8s.io/apt/doc/apt-key.gpg | sudo tee /etc/apt/trusted.gpg.d/kubernetes.gpg > /dev/null
sudo apt update
sudo apt install -y libedgetpu1-std

Ajoute la configuration suivante dans config.yml pour activer Google Coral

detectors:
  coral:
    type: edgetpu
    device: usb  # ou "pci" si c'est une Coral PCIe

Redémarre Frigate avec :

docker compose down
docker compose up -d

Puis, vérifie les logs :

docker logs -f frigate

Exécute cette commande pour voir si Coral fonctionne bien :

docker exec -it frigate nproc

Si Coral fonctionne, l’utilisation CPU sera plus basse qu’avant.

3.3.1 Google coral sur LXC proxmox

Aller dans le shell de votre pve

Accéder au repertoire :

cd /etc/pve/lxc

Executer ls pour voir le fichier de votre docker corrrespondant :

ls

Editer le fichier dans notre cas 101.conf

nano 101.conf

puis ajouter tout en bas

La première ligne correspond à l’accélération matérielle Intel et la deuxième ligne correspond aux ports USB.

lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file 0, 0
lxc.mount.entry: /dev/bus/usb/002/ dev/bus/usb/002/ none bind,optional,create=dir 0,0

Enregistrez le fichier, puis redémarrez le conteneur docker-frigate

4.0 Frigate : rapide tour du propriétaire

On se connecte a la page web http://adresseip:5000/

Arriver ici si on as bien une image qui s’affiche c’est plutôt très bon signe !

je vous conseil de cliquer sur la camera avec un téléphone portable sinon cochez cette icone

allez dans le mode debug et coché bounding box : ensuite allez dans le champs de la camera voir si vous êtes reconnus comme humain

Si vous êtes reconnus comme humain :

Frigate : la vidéosurveillance boostée par l'IA pour votre domotique

Sinon remettez vous debout ! ça sert a rien de se faire passer pour un clébard !

loic entrain de finir ses essais

A partir de la on peut dire qu’on avance !
On peut également crée des zones par exemple si je suis a table frigate allume mes spots

On copie l’ensemble du bloc zone (cliquer sur copy hein ! )

Et on va aller le coller dans l’onglet config dans la zone qui correspond a votre camera exemple :

  SAM:
    birdseye:
      mode: objects
    ffmpeg:
      inputs:
      - path: ##ADRESSE DU FLUX RTSP##
        roles:
        - detect
    detect:
      width: 1920
      height: 1080
      fps: 10
    objects:
      track:
      - person
      ## dog
    zones:
      tableSAM:  ## vous pouvez donnez le nom que vous souhaitez##
        coordinates: 1232,556,1386,452,1178,371,1030,436

Par exemple si vous avez un porte manteau il reconnaitras vos manteaux comme humain et oué ! Le mieux c’est de faire un placard sinon on peut aussi crée un masque ou il ne détectera pas les objets

G PAS ENCORE REUSSIT !!!

On peut aussi faire plein d’autre choses que je n’est pas eut le temps d’essayer :

  • l’auto tracking PTZ
  • L’audio
  • De la détection incendie (mais la c’est un peut trop de responsabilité pour en parler pour moi)
  • De la détection de cris
  • Enregistrer comme un nvr
  • ….

5. Y’a pas d’usine a gaz sans fumée : LE MQTT !

Ouvrez mqtt explorer qui existe aussi en container d’aillieur ! Aller faire un saut dans le champs de vision de la camera

le topic frigate/SAM/PERSON est passé a 1 quand je suis rentrer puis 0 quand je suis partit (il compte enfaite le nombre de personne c’est pas du binaire ! )
On noteras aussi que le topic frigate/SAM/all est passer a 1 puis 0 égualement ce topic la compte le total des objets (humains + chiens)
Si je fais passer loic en déguisement le topic frigate/SAM/dog passeras également a 1
Voila déjà de quoi fait un bon nombre de scénarios sympa !

Pour les zones : frigate publiera sur un topic frigate/nom de la cam/nom de la zone/person ou autre objet et aussi un topic frigate/nomdelacam/nomdelazone/all

6.0 le birdseye (écran de poursuite)

Un écran de poursuite c’est quoi ça ? bah c’est un flux video qui permet de poursuite le mouvement sur les caméras la fonction birdseye de frigate quoi !
Il demande un peut de ressources c’est pour ça que j’ai pas encore commencer le restream pour afficher le flux sur tablette (en attente d’un google coral quand meme lol)

Dans max_cameras vous vous doutez qu’il sagit du nombre de camera max affichée en simultanées.
On peut également remplacer mode: motion par objects (le motion afficheras les cameras avec du mouvement de pixel, tandis que objects trackeras uniquement les objets (humain, chien,….)

Et dans chaque cameras :

cameras:
  salon:
    birdseye:
      mode: objects

Et voila ce que ça donne :

J’ai une vulgaire toile d’araignée qui se promene sur une camera et mon chien les 4 fers en l’air dans le canapé qu’elle vient de défoncée : MERCI NOVA !

Si vous avez ceci :

Frigate : la vidéosurveillance boostée par l'IA pour votre domotique
C’est que rien ne se passe ! vous pouvez régler la durée max d’affichage des cameras

Il y a surement une possibilité de stream le flux du birdseye mais je n’est pas creuser sincèrement

7.0 Exemple concret d’automatisation avec node red

Quand un humain est présent dans la salle a manger, Node Red m’allume les leds et l’ecran du nextion
Quand personne n’est present il fait l’inverse 😉

8.0 Exemple concret avec Jeedom

loic a toi de jouer

9. Bonus : comment bien régler vos cameras

Etape 1 choisir la position :
Deja il faut choisir l’emplacement définitif de la camera, en intérieur plutôt dans un coin et face aux accès de la maison potentiel vers la maison (portes, fenetres, veranda), n’oubliez pas que les cameras on un angle mort en dessous, si vous vous mettez dos au points d’entrée potentiel vous n’aurez rien d’exploitable comme images


Ensuite il ne faut pas que la cameras soit orienté trop vers un mur, mais plutôt vers l’intérieur de la pièce :

Le but étant de venir lécher les murs, et non pas avoir une bonne partie de l’image sans intérêt a cause d’un mur !

En extérieur : il est interdit de filmer la voie publique, ou bien chez votre voisin c’est donc dommage d’utiliser une camera pour avoir la moitié de l’image floutée, sur le réglage d’inclinaison haut bas venez a ras de la route ou de chez le voisin, ça permet aussi d’avoir plus de détails sur votre territoire ! (loic arrête ca sert a rien de marquer ton territoire avec ton pipi)

Si par chance vous n’avez pas de voisin, faite quand même un bon réglage d’inclinaison haut bas : ça sert a rien de filmer le CIEL même si ça fait de magnifique timelaps !

L’Ideal étant de croiser légèrement les champs de vision pour ne pas avoir de zone mortes.
Si les cameras se voient vous n’aurez pas les angles morts sous les cameras (on monde parfait vous me direz ) :

Ainsi la camera 2 voit sous la camera 1

Et on oublie pas de régler l’assiette : une image droite c’est la base !

Etape 2 : réglage des flux videos principaux

Attention la on va taper dans le dur ! En tant que particulier je pense pas qu’on est un nombre de cameras conséquent et qu’on doive réduire le nombre de bitrate ou bien le framerate en revanche on peut se permettre de pousser au max

Il faut donc deja dans un premier temps Passer le flux en CBR (Constant BitRate)

En effet, le VBR (variable Bit Rate) reduit la qualité du flux si il n’y as pas de mouvement hors quand il y a un mouvement il y a quelques frames qui arrivent avec une qualité pourrie le temps que le Bitrate Accélère

Pour réduire la taille des vidéos si vous enregistrer vous pouvez passer le flux en H.265 mais aussi le nombre de frame rate (sur une camera réglée a 25 FPS la camera n’envoie réellement que 18FPS) pour l’avoir fait on peut aussi descendre jusqu’à 12FPS sans réel différence a l’œil humain

Pour une camera jusqu’à 8mpx a mes yeux 8192kbps est largement suffisant !

Si vous enregistrez des véhicules en mouvement : restez a 25FPS, avec un CBR et 8192kbps vous verrez la différence quand vous stopperez un enregistrement, ou bien roulez plus doucement !

Etape 3 : réglage des flux secondaires (pour frigate)

Frigate est très gourmand il faut donc réduire la qualité du flux secondaire pour garder de la ressource Selon la taille de la pièce réduisez déjà la résolution
puis le kbps 4096 ou même a 1024 et enfin le nombre d’image a 6 ensuite en fonction de votre charge système montez progressivement la qualité du flux ?

Gardez aussi du h264 pour éviter les problèmes de compatibilité

10. On CON-clut

Voila j’espere que cela vous auras donnez envie ou aider a mettre en place frigate
Je pense que cette article évolueras au fur a mesure de mes recherches donc restez connecté

Dimitri

Mouais Bof si il evolue autant que toi on est pas dans la merde 🤣 – Loïc