Frigate sans Coral : la détection d’objets sur le GPU Intel avec OpenVINO
Frigate est l’enregistreur vidéo (NVR) open source qu’adorent les utilisateurs de Home Assistant : il surveille vos caméras et sait distinguer une personne d’une voiture, d’un chat ou d’une ombre. Pendant des années, le conseil était « achetez un Google Coral » pour faire tourner son détecteur d’objets. Aujourd’hui, Frigate fait aussi tourner son détecteur avec OpenVINO sur un GPU Intel, et il peut décoder la vidéo sur ce même GPU avec VA-API.
Nous nous sommes donc posé une question simple : sur un serveur cloud avec un GPU Intel partagé, qu’apporte vraiment le GPU à Frigate ? Nous avons fait tourner les mêmes caméras sur le même serveur, avec le travail sur le GPU, puis sur le CPU seul, avec 1, 4 et 8 caméras.
latest.jpg?bbox=1). Vidéo : RG72, Wikimedia Commons, CC BY-SA 4.0.Les résultats en bref
- Le GPU libère le CPU. Avec le décodage et la détection sur le GPU, Frigate a utilisé 0,57 vCPU pour 1 caméra, 0,90 pour 4 et 1,04 pour 8. Avec tout sur le CPU, il a utilisé 2,16 vCPU pour 1 caméra, et les 4 vCPU du serveur étaient pleins (96 à 97 %) dès 4 caméras.
- Plus de détection quand ça s’anime. Avec 8 caméras très animées, le détecteur sur GPU a analysé 168 objets par seconde contre 107 sur le CPU (+57 %), et Frigate a analysé 62 % des images contre 44 %.
- Le temps de détection par image est proche. OpenVINO a mis environ 5,6 à 6,7 ms par inférence sur le GPU et 7,2 à 10,8 ms sur le CPU dans la plupart des essais. Le vrai gain n’est pas la vitesse : c’est que le CPU reste libre.
- Le décodage vidéo sur le GPU a coûté environ 1,7 % d’un cœur par caméra 1080p, contre environ 12 % quand le CPU décode. Huit flux 1080p ont utilisé environ un quart du moteur vidéo du GPU.
- Pas besoin de Coral. Un seul serveur cloud avec le GPU a géré 8 caméras de rue très animées, avec 3 vCPU encore libres.
Configuration du test
| Élément | Valeur |
|---|---|
| Serveur | Debian 13, Linux 7.3, Intel UHD 770 (GPU partagé), 4 vCPU, 12 Go de RAM |
| Frigate | 0.18.2 (image Docker officielle ghcr.io/blakeblackshear/frigate:stable), --device /dev/dri |
| Détecteur | type: openvino, device: GPU ou device: CPU, modèle SSDLite MobileNet v2 300×300 fourni dans l’image |
| Décodage | hwaccel_args: preset-vaapi (GPU) ou sans accélération matérielle (CPU) |
| Caméras | 1, 4 ou 8 flux RTSP, H.264 1920×1080 à 25 i/s, 4 Mbit/s chacun, servis par MediaMTX sur le même serveur |
| Vidéo | extraits en boucle de carrefours animés, tirés de Wikimedia Commons (licences dans les légendes) |
| Réglages Frigate | détection en 1280×720 à 5 i/s par caméra, objets : personne, voiture, vélo, moto, bus, camion, sans enregistrement |
| Mesures | 60 s de mise en route, puis 90 s ; CPU de tout le serveur via /proc/stat, /api/stats de Frigate toutes les 5 s, moteurs du GPU via le noyau (DRM fdinfo) |
Les chiffres CPU sont en vCPU (1,00 = un cœur entier sur les 4). Les « objets analysés par seconde » sont le
detection_fps de Frigate : le nombre de zones d’image passées dans le détecteur chaque seconde, toutes caméras
confondues.
Nos extraits sont un cas difficile : des carrefours en ville où piétons et voitures bougent sans arrêt, si bien que Frigate fait tourner le détecteur sur 10 à 20 zones par image. Une allée de garage ou l’entrée d’un magasin, immobile la plupart du temps, demande beaucoup moins de détection.
1. Le CPU du serveur : la principale différence
| Caméras | Tout sur le GPU | Détecteur GPU, décodage CPU | Détecteur CPU, décodage GPU | Tout sur le CPU |
|---|---|---|---|---|
| 1 | 0,57 vCPU (14 %) | 0,40 vCPU (10 %) | 2,80 vCPU (70 %) | 2,16 vCPU (54 %) |
| 4 | 0,90 vCPU (23 %) | 1,23 vCPU (31 %) | 3,83 vCPU (96 %) | 3,84 vCPU (96 %) |
| 8 | 1,04 vCPU (26 %) | 1,68 vCPU (42 %) | 3,85 vCPU (96 %) | 3,89 vCPU (97 %) |
C’est le détecteur qui remplit le CPU. Quand OpenVINO tourne sur le CPU, le processus détecteur de Frigate à lui seul a utilisé 2,4 à 3,1 cœurs ; sur le GPU, il a utilisé 0,1 à 0,3 cœur. Le décodage vidéo vient en second : chaque flux 1080p coûtait environ 12 % d’un cœur quand le CPU le décodait, et 1,7 % avec VA-API. Avec une seule caméra, l’écart entre décodage GPU et CPU reste dans le bruit de mesure ; à partir de 4 caméras, VA-API économise une part visible du CPU.
2. Combien de détection le serveur peut-il faire ?
| Caméras | Objets analysés / s | Images analysées / reçues | Temps d’inférence | |
|---|---|---|---|---|
| 1 | Tout sur le GPU | 53,7 | 5,0 / 5,0 | 6,7 ms |
| 1 | Tout sur le CPU | 56,8 | 5,0 / 5,1 | 8,3 ms |
| 4 | Tout sur le GPU | 114,6 | 11,7 / 20,1 | 8,5 ms |
| 4 | Détecteur GPU, décodage CPU | 173,4 | 17,8 / 20,1 | 5,6 ms |
| 4 | Tout sur le CPU | 127,5 | 13,3 / 20,2 | 7,2 ms |
| 8 | Tout sur le GPU | 167,9 | 25,1 / 40,3 | 5,8 ms |
| 8 | Tout sur le CPU | 106,8 | 17,8 / 40,4 | 9,1 ms |
Avec une caméra, les deux modes suivent toutes les images. Avec 4 et 8 caméras très animées, le détecteur unique de Frigate devient la limite : quand il est plein, Frigate saute des images (il continue de suivre les objets, mais les regarde moins souvent). Sur le GPU, le détecteur a plafonné à environ 165 à 175 objets par seconde ; sur le CPU, il a atteint 107 à 136 en occupant tout le serveur.
Soyons honnêtes sur un résultat : l’essai « 4 caméras, tout sur le GPU » est sorti plus lent (8,5 ms par inférence, 115 objets par seconde) que l’essai avec décodage sur le CPU (5,6 ms, 173 par seconde). Le GPU est partagé avec d’autres serveurs et le temps d’inférence a varié entre 5,6 et 11,6 ms sur le GPU au fil de nos essais : lisez donc les chiffres de débit comme des ordres de grandeur, pas comme des limites exactes. Les chiffres CPU ne changent rien à ce constat : sur le CPU, le serveur est toujours plein.
3. Relier vos caméras à un Frigate dans le cloud
Frigate dans le cloud doit lire le flux RTSP de chaque caméra, chez vous ou au bureau. Il y a trois façons de faire, et seule la première devrait être votre choix par défaut.
Recommandé : un VPN (Tailscale ou WireGuard), rien d’ouvert
Installez Tailscale (ou simplement WireGuard) sur un petit appareil toujours allumé, sur le même réseau que les caméras : un Raspberry Pi, un NAS ou un routeur compatible WireGuard. Cet appareil devient un subnet router : il permet au serveur cloud d’atteindre le réseau local par un tunnel chiffré. Frigate utilise alors les adresses locales des caméras, comme s’il était chez vous, et aucun port n’est ouvert sur votre box.
# sur le Raspberry Pi / NAS à la maison (ici, le réseau des caméras est 192.168.1.0/24)
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.conf && sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
sudo tailscale up --advertise-routes=192.168.1.0/24
# approuvez la route dans la console d'administration Tailscale, puis sur le serveur cloud :
sudo tailscale up --accept-routes
# Frigate, sur le serveur cloud : la caméra garde son adresse locale
cameras:
entrance:
ffmpeg:
inputs:
- path: rtsp://frigate:<camera-password>@192.168.1.50:554/stream1
roles: [detect, record]
La vidéo est chiffrée de bout en bout, la caméra n’est jamais exposée à Internet, et vous pouvez ouvrir la page web de Frigate depuis votre téléphone via le même tailnet. Nous présentons Tailscale plus en détail dans Jouer sur votre serveur cloud de n’importe où avec Moonlight et Tailscale.
Possible : une redirection de port sur la box, avec des limites strictes
Vous pouvez aussi rediriger un port de votre box vers la caméra et donner à Frigate une adresse comme
rtsp://user:password@<your-public-ip>:8554/stream1. Cela fonctionne, mais connaissez les risques :
- Le RTSP n’est généralement pas chiffré. La vidéo, et avec certaines caméras le mot de passe, traversent Internet en clair.
- Le firmware des caméras bon marché est une cible classique des botnets. Une caméra exposée est scannée en quelques heures.
Si vous choisissez cette voie, ces précautions sont obligatoires :
- Sur la box, n’autorisez le port redirigé que depuis l’adresse IP du serveur. Nos serveurs ont une adresse IP fixe, et c’est ce qui rend cette solution acceptable. Si votre box ne sait pas filtrer par adresse source, passez plutôt par le VPN.
- Un mot de passe solide, propre à la caméra, jamais celui par défaut.
- Du RTSPS (RTSP sur TLS) si la caméra le gère.
- Un firmware à jour.
Jamais : une caméra ouverte à tout Internet
Une caméra joignable par n’importe qui, avec ou sans mot de passe, c’est ainsi que des vidéos privées finissent sur des sites publics et que des caméras finissent dans des botnets. Ne le faites pas, même « juste pour un test ».
Ce que cela coûte en bande passante et côté juridique
- Débit montant : chaque caméra envoie son flux en permanence, en général 1 à 4 Mbit/s en 1080p H.264. Nos flux de test faisaient 4 Mbit/s chacun, donc 8 d’entre eux demanderaient 32 Mbit/s en montant. La fibre le supporte ; une ADSL lente, non. Si le débit montant est juste, utilisez le second flux basse résolution de la caméra pour la détection et gardez l’enregistrement en pleine qualité sur la carte SD de la caméra.
- Données personnelles : la vidéo de personnes est une donnée personnelle. Pour une entreprise qui filme son personnel ou ses clients, le RGPD s’applique (panneaux d’information, durée de conservation limitée, contrat avec l’hébergeur). Nos serveurs sont dans l’UE.
4. Coral et mini PC, ou serveur au mois ?
| Coral + mini PC à la maison | Serveur cloud avec GPU | |
|---|---|---|
| Coût | achat unique : un mini PC autour de 150 à 250 €, un Coral USB autour de 60 à 80 €, un disque, plus environ 10 W d’électricité toute l’année | 14,99 € HT par mois (iGPU Start) ou 29,99 € (iGPU Power) |
| Sur 3 ans | environ 300 à 400 € avec l’électricité | 540 € (Start) à 1 080 € (Power) HT |
| Débit montant | aucun, la vidéo reste à la maison | 1 à 4 Mbit/s par caméra, en permanence |
| Copie hors site | non : un cambrioleur peut emporter l’enregistreur | oui : les enregistrements sont loin des caméras |
| Plusieurs sites | un boîtier par site, ou un VPN entre eux | un seul Frigate pour tous les sites |
| Maintenance | votre matériel, votre disque, vos coupures de courant | nous faisons tourner le serveur ; vous gérez Frigate |
Les prix du Coral et du mini PC sont des prix courants au moment de l’écriture ; vérifiez-les avant d’acheter. Un mini PC Intel récent (N100 et similaires) peut aussi faire tourner OpenVINO sur son propre GPU, sans Coral.
Le matériel à la maison vous convient si vous avez déjà un serveur à la maison, un débit montant faible, ou si vous voulez que la vidéo ne quitte jamais la maison. Un serveur cloud vous convient si vous n’avez pas de serveur à la maison (ou un Raspberry Pi ou un NAS trop faible pour la détection), si vous voulez des enregistrements stockés loin des caméras, si vous gérez plusieurs sites (magasins, bureaux, maison de vacances), ou si vous voulez Frigate et Home Assistant accessibles de partout sans ouvrir votre réseau domestique.
5. Quelle offre ?
Avec le décodage et la détection sur le GPU, Frigate a utilisé environ 1 vCPU pour 8 caméras très animées.
- iGPU Start (2 vCPU, 8 Go de RAM, Perf 1, 14,99 € HT par mois) : une maison ou un petit commerce avec 1 à 4 caméras, avec Home Assistant à côté.
- iGPU Power (4 vCPU, 14 Go de RAM, Perf 2 = deux fois la part GPU de Start, 29,99 €) : 4 à 8 caméras, des scènes animées, l’enregistrement sur le serveur, ou plusieurs sites. C’est la taille que nous avons testée.
- iGPU Pro (6 vCPU, 14 Go, Perf 3, 44,99 €) : plus de caméras, ou Frigate plus d’autres travaux GPU (Immich, transcodage) sur le même serveur.
Sans le GPU, les mêmes 4 vCPU étaient pleins dès 4 caméras : il vous faudrait un serveur bien plus gros pour faire le même travail sur le CPU.
6. La mise en place sur un serveur Linux GPU
Envie d’un serveur prêt à l’emploi ? Demandez-le par e-mail à la commande (contact@linuxgpu.eu) : nous pouvons vous livrer le serveur avec Frigate déjà installé, OpenVINO et VA-API sur le GPU, et Tailscale prêt à se connecter à vos caméras.
Pour le faire vous-même sur Debian 13 avec Docker :
docker run -d --name frigate --restart unless-stopped --shm-size=512m \
--device /dev/dri \
-v /srv/frigate/config:/config -v /srv/frigate/media:/media/frigate \
--tmpfs /tmp/cache:size=1g -p 8971:8971 \
ghcr.io/blakeblackshear/frigate:stable
# /srv/frigate/config/config.yml
mqtt:
enabled: false # ou le broker MQTT de votre Home Assistant
ffmpeg:
hwaccel_args: preset-vaapi # décodage sur le GPU
detectors:
ov:
type: openvino
device: GPU # détection sur le GPU
model:
width: 300
height: 300
input_tensor: nhwc
input_pixel_format: bgr
path: /openvino-model/ssdlite_mobilenet_v2.xml
labelmap_path: /openvino-model/coco_91cl_bkgr.txt
cameras:
entrance:
ffmpeg:
inputs:
- path: rtsp://frigate:<camera-password>@192.168.1.50:554/stream1
roles: [detect]
detect:
enabled: true
width: 1280
height: 720
fps: 5
Récupérez le mot de passe admin avec docker logs frigate 2>&1 | grep -i password, puis ouvrez
https://<server>:8971 (mieux : uniquement via Tailscale). Sur la page Système, le détecteur doit afficher un temps
d’inférence de quelques millisecondes et le GPU doit apparaître dans la liste.
Pour Frigate à côté d’Immich sur le même serveur, avec des fichiers Docker Compose, lisez Auto-héberger Immich et Frigate avec OpenVINO sur un VPS GPU.
Essayer
Voir les offres : iGPU Start coûte 14,99 € et iGPU Power 29,99 € HT par mois.