Frigate repose sur docker, que j'ai installé tout simplement en tapant sur ma Mageia
urpmi docker docker-compose
on lance ensuite docker en tapant
systemctl start docker
voilà son statut
systemctl status docker
et le résultat
● docker.service - Docker Application Container Engine
Loaded: loaded
(/usr/lib/systemd/system/docker.service; disabled; preset:
disabled)
Active: active (running) since Fri
2025-09-26 17:02:55 CEST; 6s ago
Docs:
http://docs.docker.com
Process: 210883
ExecStartPre=/usr/sbin/docker-network-cleanup (code=exited,
status=0/SUCCESS)
Main PID: 210886 (dockerd)
Tasks: 17
Memory: 41.1M
CPU: 369ms
CGroup:
/system.slice/docker.service
├─210886 /usr/sbin/dockerd --data-root /var/cache/docker -H
unix:///var/run/docker.sock -H tcp://127.0.0.1:2375
└─210899 containerd --config
/var/run/docker/containerd/containerd.toml
sept. 26 17:02:52 ultra.kervao.fr dockerd[210899]:
time="2025-09-26T17:02:52.687489959+02:00" level=info
msg=serving...
address=/var/run/docker/containerd/containerd.sock
sept. 26 17:02:52 ultra.kervao.fr dockerd[210899]:
time="2025-09-26T17:02:52.687576078+02:00" level=info
msg="containerd successfully booted in 0.201550s"
sept. 26 17:02:54 ultra.kervao.fr dockerd[210886]:
time="2025-09-26T17:02:54.283134739+02:00" level=info
msg="Loading containers: start."
sept. 26 17:02:55 ultra.kervao.fr dockerd[210886]:
time="2025-09-26T17:02:55.007460149+02:00" level=info
msg="Loading containers: done."
sept. 26 17:02:55 ultra.kervao.fr dockerd[210886]:
time="2025-09-26T17:02:55.281188368+02:00" level=warning
msg="WARNING: API is accessible on http://127.0.0.1:2375 without
encryption>
sept. 26 17:02:55 ultra.kervao.fr dockerd[210886]:
time="2025-09-26T17:02:55.281244407+02:00" level=info
msg="Docker daemon" commit=library-import
containerd-snapshotter=false storage>
sept. 26 17:02:55 ultra.kervao.fr dockerd[210886]:
time="2025-09-26T17:02:55.281378785+02:00" level=info
msg="Daemon has completed initialization"
sept. 26 17:02:55 ultra.kervao.fr dockerd[210886]:
time="2025-09-26T17:02:55.804448712+02:00" level=info msg="API
listen on /var/run/docker.sock"
sept. 26 17:02:55 ultra.kervao.fr systemd[1]: Started
docker.service.
sept. 26 17:02:55 ultra.kervao.fr dockerd[210886]:
time="2025-09-26T17:02:55.804558097+02:00" level=info msg="API
listen on 127.0.0.1:2375"
pour voir si docker fonctionne correctement on tapera
docker run hello-world
voilà le résultat
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
Digest:
sha256:54e66cc1dd1fcb1c3c58bd8017914dbed8701e2d8c74d9262e26bd9cc1642d31
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be
working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image
from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from
that image which runs the
executable that produces the output you
are currently reading.
4. The Docker daemon streamed that output to the
Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu
container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free
Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
pour que docker soit lancé à chaque reboot, on tapera
systemctl enable docker
on créera le répertoire /etc/frigate et /etc/frigate/config,
les enregistrements se feront dans le répertoire /media/frigate.
On revient sous /etc/frigate/config dans lequel j'ai créé
le fichier docker-compose.yml qui contiendra
services:
frigate:
container_name: frigate
privileged: true # this may not be
necessary for all setups
network_mode: host # j'ai dû rajouter cette
ligne pour accéder à ma caméra restreamée avec mediamtx
restart: unless-stopped
stop_grace_period: 30s # allow enough
time to shut down the various services
image:
ghcr.io/blakeblackshear/frigate:stable
shm_size: "512mb" # update for your
cameras based on calculation above
devices:
- /dev/bus/usb:/dev/bus/usb # ligne
pour l'accélérateur USB Google Coral, à commenter sinon
-
/dev/dri/renderD128:/dev/dri/renderD128 # For intel hwaccel,
needs to be updated for your hardware
volumes:
-
/etc/localtime:/etc/localtime:ro
-
/etc/frigate/config:/config
-
/media/frigate:/media/frigate
- type: tmpfs # Optional:
1GB of memory, reduces SSD/SD Card wear
target:
/tmp/cache
tmpfs:
size: 1000000000
ports: #section inutile avec le
mode réseau host
- "8971:8971" # port
de l'interface navigateur
#- "8554:8554" # RTSP feeds,
j'ai mis en commentaire car conflit avec mediamtx, utile pour
renvoyer le flux vidéo vers homeassistant
- "8555:8555/tcp" # WebRTC
over tcp
- "8555:8555/udp" # WebRTC
over udp
et config.yaml dans lequel on définira les caméras et
les objets à détecter (liste par ici https://docs.frigate.video/configuration/objects)
mqtt:
enabled: false
cameras:
Camera-sud:
ffmpeg:
inputs:
- path:
rtsp://frigate:passwd@192.168.2.110
roles:
- detect
- record
hwaccel_args: preset-vaapi
objects:
track:
- person
- dog
- cat
- bird
- bicycle
- car
- motorcycle
detect:
width: 1280
height: 720
record:
enabled: true
retain:
days: 7
mode: all
Camera-entree:
ffmpeg:
inputs:
- path:
rtsp://frigate:passwd@192.168.2.112
roles:
- detect
- record
hwaccel_args: preset-vaapi
objects:
track:
- person
- dog
- cat
- bird
- bicycle
- car
- motorcycle
detect:
width: 1280
height: 720
record:
enabled: true
retain:
days: 7
mode: all
Camera-piscine:
ffmpeg:
inputs:
- path:
rtsp://frigate:passwd@192.168.2.200:554/ch0_1.264
roles:
- detect
- record
objects:
track:
- person
- dog
- cat
- bird
detect:
width: 800
height: 448
record:
enabled: true
retain:
days: 7
mode: all
Camera-ouest:
ffmpeg:
inputs:
- path:
rtsp://ultra.kervao.fr:8554/cam1
roles:
- detect
- record
objects:
track:
- person
- dog
- cat
- bird
detect:
width: 640
height: 360
record:
enabled: true
retain:
days: 7
mode: all
detectors:
cpu1:
type: cpu
num_threads: 3
detect:
enabled: true
version: 0.16-0
si vous avez un accélérateur USB Google Coral, on mettra à la place au niveau de detectors
coral:
type: edgetpu
device: usb
on tape ensuite dans ce même répertoire
docker compose -f docker-compose.yml up -d
voilà le résultat
9.6s
+] Running 10/10
✔ frigate 9 layers
[⣿⣿⣿⣿⣿⣿⣿⣿⣿]
0B/0B
Pulled
79.5s
✔ b1badc6e5066 Pull
complete
1.2s
✔ 4f4fb700ef54 Pull
complete
0.3s
✔ 14d4601b76c8 Pull
complete
14.6s
✔ cab46c26a5aa Pull
complete
1.1s
✔ 6891a7512d41 Pull
complete
14.3s
✔ b44b002328e4 Pull
complete
8.3s
✔ 8074b201d282 Pull
complete
8.6s
✔ d823104cefbd Pull
complete
9.0s
✔ f86078113133 Pull
complete
9.6s
[+] Running 2/2
✔ Network config_default
Created
0.1s
✔ Container
frigate Started
docker restart frigate
C'est bon Frigate est installé, lancé et accessible du
navigateur localement en tapant
https://ultra.kervao.fr:8971/
pour connaitre le mot de passe il faudra taper
docker logs frigate
et on y voit
2025-09-26 17:46:21.528704726 [2025-09-26 17:46:21]
frigate.app
INFO :
********************************************************
2025-09-26 17:46:21.529867665 [2025-09-26 17:46:21]
frigate.app
INFO :
********************************************************
2025-09-26 17:46:21.530590965 [2025-09-26 17:46:21]
frigate.app
INFO : *** Auth is enabled,
but no users
exist. ***
2025-09-26 17:46:21.531237207 [2025-09-26 17:46:21]
frigate.app
INFO : *** Created a default
user:
***
2025-09-26 17:46:21.542212889 [2025-09-26 17:46:21]
frigate.app
INFO : *** User:
admin
***
2025-09-26 17:46:21.566794613 [2025-09-26 17:46:21]
frigate.app
INFO : *** Password:
2bf8aeb98g16b66f54e70a8e8f121076 ***
2025-09-26 17:46:21.577589942 [2025-09-26 17:46:21]
frigate.app
INFO :
********************************************************
2025-09-26 17:46:21.598394530 [2025-09-26 17:46:21]
frigate.app
INFO :
********************************************************
avec un TPU on devrait avoir un message qui ressemble à ça
2025-10-30 07:55:40.442764361 [2025-10-30 07:55:40]
frigate.detectors.plugins.edgetpu_tfl INFO :
TPU found
2025-10-30 07:55:40.443899970 INFO: Created
TensorFlow Lite XNNPACK delegate for CPU.
cela permet de pouvoir se connecter et voilà l'interface générale
avec les derniers évènements en haut et les vues en direct
juste en dessous

Avec seulement le TPU, autant dire que c'est inutilisable au
quotidien, le programme prend quasiment 100% des ressources
constamment.

et avec un TPU, c'est le jour et la nuit
!!

Avant d'aller plus loin il est important de connaitre quelques
notions à la base du fonctionnement de Frigate, on parle
d'alertes et de détections, les alertes sont à la base des
détections mais considérées comme des évènements prioritaires à
signaler alors que les détections sont des évènements peu
significatifs, qui ne méritent pas de notification mais qui sont
tout de même enregistrées et visibles dans la revue des évènements
(voir la documentation en anglais ici https://docs.frigate.video/configuration/review/).
Passons à la configuration accessible via la roue crantée en bas
à gauche de l'écran principal. Dans le premier onglet Interface
Utilisateur, il y a des paramètres généraux que je n'ai pas
modifiés, dans l'onglet Données augmentées, on peut
activer (ils sont désactivés par défaut)
On commence par l'onglet Masques/Zones, pour chaque caméra
sélectionnable à partir du bouton bleu en haut à droite on déclare
des zones de détection, les autres zones de l'image seront
ignorées pour la détection




A noter qu'il faudra relancer Frigate pour que ça soit
pris en compte, c'est possible à partir du menu des Paramètres.
On revient maintenant à l'onglet Paramètres Des Caméras,
dans la configuration ci-dessous, seulement les objets Personne
et Voiture seront affichées sous forme d'alertes dans la
zone prédéfinie et les autres objets détectés seront classés
détections dans la même zone.

et ainsi de suite pour toutes les caméras.
Dans l'onglet Réglages Du Mouvement, on peut affiner
certains paramètres pour chaque caméra pour que ça soit considéré
comme un mouvement, j'ai laissé les valeurs par défaut.

L'onglet Debogage peut être intéressant pour afficher en
temps réel certaines informations. L'onglet Utilisateurs
comme son nom l'indique permet de gérer les utilisateurs, deux
types d'utilisateurs sont possibles les administrateurs accèdent à
l'ensemble des fonctionnalités de l'interface, les observateurs
sont limités à la consultation des caméras, de la revue
d'événements et à l'historique des enregistrements dans
l'interface utilisateur. L'onglet Notifications permet
d'envoyer des mails pour les alertes.
Pour ce qui concerne les enregistrements, par défaut on a
record:
enabled: true
retain:
days: 7
mode: all
c'est à dire qu'alerte comme détection sont enregistrées et
conservées 7 jours. Pour une gestion plus fine des
enregistrements, voir cette page https://docs.frigate.video/configuration/record/


On peut en tirer la règle suivante : caméra avec champ de vision proche (caméra intérieur par exemple) on la réglera avec une faible résolution qui sera suffisante et a contrario pour une caméra avec champ de vision éloigné (caméra extérieure essentiellement) on choisira plutôt une grande résolution pour une meilleure détection des objets.
Frigate calcule un score pour chaque objet
détecté à chaque image et l'objet est considéré comme positif
quand à la fois le score dépasse le min_score et le threshold,
c'est à dire la moyenne des scores sur plusieurs images
consécutives, ce dernier paramètre permet de confirmer la
détection.
Voilà ce qu'on pourra rajouter au fichier config.yaml
comme section commune pour l'ensemble des caméras, ce sont des
valeurs communément partagées par la communauté des utilisateurs
de Frigate.
objects:
filters:
dog:
min_score: .7
threshold: .9
cat:
min_score: .65
threshold: .8
person:
min_score: .7
threshold: .9
car:
min_score: .65
threshold: .85
Il ne faut pas considérer ces valeurs comme des
valeurs idéales, pour ma part avec des caméras extérieures qui ont
plutôt tendance à avoir un champ de vision plus lointain, j'ai
préféré rajouter une sous section filters à chaque section
objects de chacune de mes caméras pour pouvoir ajuster ces
valeurs en fonction des caméras, comme ceci
objects:
track:
- person
- dog
- cat
- face
filters:
person:
min_score: .7
threshold: .8
Pour activer la détection des visages, on commencera
par rajouter la section correspondante dans le fichier config.yaml
face_recognition:
enabled: true
et pour les caméras concernées on rajoutera dans la
sous section track la mention face
objects:
track:
- person
- dog
- cat
- bicycle
- car
- motorcycle
- face
On relance Frigate et les logs renvoient les
messages suivantes
2025-11-02 11:20:57.493001613 [2025-11-02
11:20:57]
frigate.config.config
WARNING : Camera-entree is configured to track ['face'] objects,
which are not supported by the current model.
2025-11-02 11:20:57.495025758 [2025-11-02 11:20:57]
frigate.config.config
WARNING : Camera-piscine is configured to track ['face']
objects, which are not supported by the current model.
2025-11-02 11:20:57.519957917 [2025-11-02 11:20:57]
frigate.app
INFO : Starting Frigate (0.16.1-e664cb2)
2025-11-02 11:20:57.520656637 [2025-11-02 11:20:57]
frigate.app
INFO : Creating directory:
/media/frigate/clips/faces
(...)
2025-11-02 11:20:58.822822712 [2025-11-02
11:20:58]
frigate.api.fastapi_app
INFO : FastAPI started
2025-11-02 11:21:00.117012864 [2025-11-02 11:21:00]
frigate.util.downloader
INFO : Downloading complete:
https://github.com/NickM-27/facenet-onnx/releases/download/v1.0/facenet.tflite
2025-11-02 11:21:00.269584095 [2025-11-02 11:21:00]
frigate.detectors.plugins.edgetpu_tfl INFO :
TPU found
2025-11-02 11:21:00.270930420 INFO: Created
TensorFlow Lite XNNPACK delegate for CPU.
2025-11-02 11:21:03.456767865 [2025-11-02 11:21:03]
frigate.util.downloader
INFO : Downloading complete:
https://github.com/NickM-27/facenet-onnx/releases/download/v1.0/landmarkdet.yaml
Une icône Bibliothèque de visages fait son
apparition









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
c'est pas génial d'autant plus si on accède à Frigate
d'internet. Dans la configuration qui est présentée ici on
utilisera apache
et non nginx comme c'est
présenté un peu partout. Pour la configuration de Let's Encrypt
avec apache on consultera cette page.
Le principe est le suivant
Internet -> HTTPS port 443 -> reverse proxy
-> HTTP interne -> Frigate port 8971
Apache fait office reverse proxy, c'est à dire qu'il permet d’accéder à une URL interne en modifiant automatiquement l'URL et en pointant vers le bon port. Mon adresse accessible sur internet est https://adresseperso.ddns.net qui pointe déjà sur une page index.html, cette configuration permet donc d'accéder à frigate à l'adresse https://adresseperso.ddns.net/frigate
Dans le fichier de configuration d'apache httpd.conf,
on activera les modules suivants:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module
modules/mod_proxy_http.so
et on rajoutera l'hôte virtuel
<VirtualHost 192.168.2.13:443>
ServerName
adresseperso.ddns.net
SSLEngine on
SSLCertificateFile
/etc/letsencrypt/live/adresseperso.ddns.net/fullchain.pem
SSLCertificateKeyFile
/etc/letsencrypt/live/adresseperso.ddns.net/privkey.pem
ProxyPreserveHost
On
ProxyRequests Off
# Redirection vers Frigate sur
port 8971
ProxyPass /frigate
http://127.0.0.1:8971/frigate
ProxyPassReverse
/frigate http://127.0.0.1:8971/frigate
# Websocket support
RewriteEngine On
RewriteCond
%{HTTP:Upgrade} =websocket [NC]
RewriteRule
^/frigate/(.*) ws://127.0.0.1:8971/frigate/$1 [P,L]
</VirtualHost>
on relance apache en tapant systemctl restart
httpd
dans le fichier docker-compose.yml on
modifiera dans la section environnement le chemin par
défaut en rajoutant
Revenons maintenant à l'interface principale, on a vu plus haut
que la vue principale renvoie vers les vues des caméras, elle est
accessible en cliquant sur l'icône représentant une caméra sur la
gauche.
En cliquant à gauche sur la Revue des évènements, on voit
s'afficher tous les derniers évènements (alertes, détections,
mouvement). L'objet détecté apparait en icône dans le coin en haut
à gauche de l'image, on accède au replay en cliquant sur l'image.
On acte la revue en cliquant en bas sur Marquer ces éléments
comme passés en revue





Vous pouvez les supprimer un à un à l'aide du menu contextuel,
ou par paquet avec un CTRL-A puis le bouton Supprimer en
haut à droite
On a vu plus haut qu'on
pouvait accéder à un état des ressources du système via le menu
Système->Indicateurs systèmes, il y a également un
onglet Stockage qui donne un état des enregistrements


Pour le reste, je vous renvoie à la
documentation de frigate pour l'utilisation avec
quelques URL intéressantes
https://docs.frigate.video/guides/getting_started
https://community.jeedom.com/t/tuto-integrer-frigate-et-faire-de-la-reconnaissance-video-dobjet-par-ia-en-local-dans-son-jeedom/117108
https://www.simplehomelab.com/frigate-docker-guide/
Pour ce qui concerne la visualisation à distance sur un mobile,
il existe bien une application
Android non officielle, mais j'en vois pas trop l'intérêt
car de base en accédant directement à l'adresse (dès lors qu'on
l'a rendu accessible sur internet) à partir d'un navigateur du
mobile, c'est plutôt convivial comme on peut le voir ci-dessous















et on relance Frigate pour que le fichier soit pris en
compte, et voilà ce que ça donne dans l'interface

A partir de là il faudra modifier les réglages de détection
conformément à cette
page. Ensuite on peut constater qu'on capte bien plus
d'objets comme ce chat que je n'arrivais pas à détecter
auparavant

En cas de non reconduction de l'abonnement on pourra toujours avoir accès au modèle personnalisé.
Quelques liens pour en savoir plus