Caméras & vision
Vidéo live ESP32-CAM, enregistrement, détection d'objets, suivi, zones et descriptions IA dans les flows
Une caméra est un appareil comme les autres : un ESP32-CAM flashé avec le firmware caméra générique s'enregistre, puis envoie ses images JPEG chiffrées au serveur sur un canal vidéo dédié. Tout le reste se passe dans l'interface : direct, réglages de capture, enregistrement, détection d'objets et relecture avec les détections dessinées sur la vidéo.
La chaîne tient en trois briques indépendantes, toutes câblées dans un flow :
- Source caméra — transforme le flux de la caméra en messages de flow (une référence vers l'image, jamais les octets eux-mêmes).
- Enregistrement vidéo — écrit les images dans le stockage en courts segments MJPEG-AVI.
- Détection d'objets — exécute un modèle ONNX sur les images et émet les détections ; peut les conserver en calque de détection à côté de l'enregistrement.
Pas de nœud d'enregistrement = rien n'est stocké : le direct et la détection fonctionnent sans écrire une seule image.
Les caméras IP (RTSP) ne sont pas des appareils : elles se déclarent dans Médias › Flux audio avec une piste vidéo, et le même nœud Source caméra les lit (source Flux média (caméra IP)).
Caméras
Médias › Caméras liste chaque appareil qui a annoncé une caméra, avec son état de streaming, ses réglages de capture et l'âge de la dernière image.

- Direct ouvre le flux dans le navigateur. Les images sont poussées dès leur arrivée ; rien n'est stocké, aucun polling. Sous le flux, l'interrupteur Flash (Allumer le flash / Éteindre le flash) pilote la LED flash de la carte (GPIO4), pour tous les rôles sauf lecteur. Si la pin n'est pas encore une sortie, Activer le pilotage du flash la configure ; une pin utilisée par un flow déployé affiche Le flash est piloté par le flow … et reste grisée, une pin de sortie n'ayant qu'un seul écrivain.
- Enregistrements ouvre la timeline du jour et le lecteur (voir plus bas).
- La clé ouvre les réglages de capture : résolution, qualité JPEG, images par seconde, retournements et mode de capture.


Le mode de capture décide quand la caméra envoie des images :
| Mode | La caméra envoie… |
|---|---|
À la demande (défaut) | seulement pendant qu'on regarde le direct, ou qu'un flow déployé la lit |
Continu | tant qu'elle est connectée — le bon choix pour une caméra enregistrée en permanence |
Un flow déployé contenant une Source caméra garde toujours sa caméra éveillée,
même en mode À la demande.
Modèles
Automatisation › Modèles est le registre des modèles de vision utilisables par les flows. Un modèle = un fichier ONNX rangé dans la médiathèque + ses réglages d'inférence : famille (YOLOX), taille d'entrée, labels, seuil de score et IoU NMS.

Ajouter un modèle
Cliquer Ajouter un modèle, puis téléverser un fichier .onnx ou en choisir un déjà
présent dans la médiathèque.

- Le fichier impose la taille d'entrée. Quand le fichier ONNX déclare des dimensions fixes (416×416 pour YOLOX-nano/tiny, 640×640 pour s/m/l), elles sont appliquées à l'enregistrement, quoi qu'on ait saisi.
- Les labels : un par ligne, dans l'ordre des classes. COCO-80 est prérempli ; le nombre de labels doit correspondre au nombre de classes du fichier.
- Le modèle est vérifié à l'enregistrement : il est chargé et exécuté une fois sur ce serveur. Un modèle qui ne tourne pas est refusé avec l'erreur réelle, jamais stocké à moitié fonctionnel.
- La colonne Vérification affiche le temps d'inférence mesuré et le débit soutenable (≈ images par seconde). Un modèle plus lent que la caméra saute des images.
Préférer les modèles Apache-2.0 comme YOLOX. Les modèles AGPL (YOLOv8, YOLO11) imposent leur licence à tout votre déploiement.
Tester un modèle
- Tester avec une image exécute le modèle sur un JPEG ou PNG et dessine les cadres.
- Tester en live l'exécute sur les dernières images d'une caméra. Les cadres au-dessus du seuil sont pleins, ceux en dessous en pointillés : déplacer le curseur de seuil pour voir ce que le modèle a presque vu, puis Appliquer ce seuil au modèle. Des avertissements signalent une image périmée, trop sombre, ou un modèle plus lent que la caméra.

Le flow de détection et d'enregistrement
Un seul flow enregistre la caméra et détecte les objets. Ouvrir Automatisation › Flows, créer un flow, et ajouter depuis la palette :
- Source caméra — choisir la Source : Caméra (appareil) et la caméra, ou
Flux média (caméra IP) et un flux doté d'une piste vidéo (il doit être activé
pour produire des images).
Images par seconde maxéchantillonne le flux (0 = toutes les images, jusqu'à 25). - Détection d'objets — câblée après la source caméra ; choisir le modèle et les classes à garder.
- Enregistrement vidéo — câblé après la même source caméra.
- Éventuellement un nœud Debug après la détection pour voir les résultats, puis Déployer.

Une fois déployé, chaque nœud affiche un badge d'état sous lui : Streaming avec le
nombre d'images pour la source, Running avec les compteurs analysées/émises pour la
détection. Un modèle qui ne se charge pas ou une caméra muette y apparaît en ambre ou
en rouge — inutile de fouiller les logs.
Détection d'objets

| Réglage | Rôle |
|---|---|
| Modèle | Un modèle du registre (vérifié valide, sinon le déploiement est refusé) |
| Classes à garder | Cliquer des classes pour ne garder que ces détections (aucun = tous) |
| Score minimal | Filtre sous ce score ; 0 = le seuil du modèle |
| Émission | Pour chaque image analysée, ou Seulement quand quelque chose est détecté |
| Images par seconde max | Images analysées par seconde (défaut 1, 0 = toutes) |
| Enregistrer les détections comme calque de la caméra | Conserve les cadres à côté de l'enregistrement (voir plus bas ; caméras appareils seulement) |
| Images douteuses vers le Vision Lab | Envoie les images où le modèle hésite vers un projet du Vision Lab, pour les annoter et entraîner un meilleur modèle |
Le payload de sortie porte detections — label, score et bbox par objet — plus un
court summary (« chair 80%, tv 78% ») affiché par un nœud Debug. Le chaîner à une
Notification pour être alerté quand une person apparaît, ou à un nœud Journal
d'événements pour garder un historique cherchable dans Surveiller ›
Événements.
Enregistrement vidéo

| Réglage | Défaut | Rôle |
|---|---|---|
| Durée d'un segment | 60 s | Un segment est fermé après cette durée… |
| Taille max d'un segment | 32 Mo | …ou cette taille… |
| Coupure avant clôture | 10 s | …ou après ce temps sans image |
| Images par seconde max | 0 | Cadence enregistrée (0 = toutes les images) |
| Rétention | 7 jours | Les segments plus anciens sont supprimés (0 = pour toujours) |
| Libellé | nom de la caméra ou du flux | Libellé optionnel de l'enregistrement |
Les segments sont des fichiers MJPEG-AVI, lisibles par VLC ou ffmpeg, rangés dans le stockage objet compatible S3 de la plateforme. Des segments courts évitent de perdre plus d'une minute en cas de crash, et la rétention s'applique à la minute près.
Une caméra a exactement un enregistreur dans une organisation : un second Enregistrement vidéo alimenté par la même caméra est refusé à la sauvegarde (même flow) ou au déploiement (autre flow). La détection, elle, peut tourner dans autant de flows que voulu.
Suivi et zones
La détection seule dit ce que contient chaque image. Deux nœuds du groupe IA & prédictif de la palette en tirent des événements sur les objets dans la durée.
Suivi d'objets suit d'une image à l'autre les objets trouvés par Détection
d'objets et donne à chacun un track_id stable tant qu'il reste dans le champ. La
sortie 1 liste les suivis en cours ; la sortie 2 émet les événements appear /
disappear, avec la durée et la confiance moyenne. Câblée sur un Journal
d'événements, elle se retrouve dans la page Événements.
| Réglage | Défaut | Rôle |
|---|---|---|
| Score pour ouvrir un suivi | 0,5 | Les détections plus faibles ne font que prolonger un suivi existant |
| Recouvrement minimal (IoU) | 0,2 | Recouvrement nécessaire pour rester le même objet |
| Images avant apparition | 2 | Une détection vue sur moins d'images est du bruit |
| Perdu après (s) | 3 | Un objet invisible depuis ce délai disparaît |
À 1 image par seconde, garder Perdu après à 3 s ou plus, et baisser le Recouvrement minimal si les objets rapides changent d'identifiant à chaque image. Régler le Score minimal de la détection sous le Score pour ouvrir un suivi pour que les détections faibles entretiennent un suivi.
Zones d'image se branche sur la sortie 1 du suivi. Dans le panneau du nœud, choisir une Caméra affichée sous les zones, cliquer sur l'image pour poser les points d'une zone, Fermer la zone et la nommer (jusqu'à 16 zones). Chaque objet qui entre dans une zone ou en sort émet un événement enter / exit avec le nombre d'objets présents : comptage et occupation, sans autre nœud.
- Point testé : Bas du cadre (pieds, roues) (défaut) ou Centre du cadre.
- Présence minimale (s) retarde l'entrée (« une personne dans la zone depuis plus de 10 s ») ; une visite plus courte reste silencieuse.
- Classes comptées ne garde que certaines classes.
- Les zones sont dessinées en coordonnées d'image et s'appliquent à toutes les caméras qui arrivent au nœud : un nœud Zones d'image par point de vue.
Pour une alerte, brancher Zones d'image sur une Notification (avec un filtre sur l'événement si seules les entrées comptent), ou sur un Journal d'événements et créer l'alerte dans la page Événements. Aucun de ces nœuds ne pilote un appareil.
Décrire ce qui se passe
Ces nœuds appellent le modèle d'IA de l'organisation elle-même (Réglages › Organisations → détail de l'organisation → Fournisseurs LLM) ; PneX n'en fournit aucun.
- Description d'image décrit une image en mots. Elle s'alimente par une Source caméra, une Détection d'objets ou un Suivi d'objets ; Décrire seulement la meilleure détection recadre l'objet le plus sûr (état, couleur, texte lisible). Une description toutes les (s) par caméra (10 s par défaut) limite les appels. Le fournisseur par défaut doit accepter les images. L'image quitte PneX pour ce fournisseur : câbler le nœud, c'est faire ce choix ; prendre un modèle local si les images doivent rester sur site.
- Description vidéo rassemble, sur une Fenêtre (30 s par défaut), les transcriptions d'une Source média, les événements de détection, de suivi et de zone, et les descriptions d'image, puis rédige une courte description horodatée dont chaque phrase cite ses entrées. Les détections valent des faits, la parole est fiable, les descriptions d'image sont indicatives ; une phrase sans source est écartée.
- Décision sur texte répond à des questions typées sur un texte (une description vidéo, une transcription) avec une probabilité par réponse, par exemple « incident » ou « routine », ou un niveau d'urgence, sans rédiger de texte. Chaque question est Un choix ou un Niveau (un par ligne, du plus bas au plus haut). Le modèle de décision tourne sur le serveur PneX et rien n'en sort ; l'administrateur de la plateforme l'installe. Le placer avant la Description vidéo permet de ne faire décrire que les fenêtres utiles.
Chaîne type : Source caméra → Détection d'objets → Suivi d'objets → Zones d'image et Description d'image → Description vidéo → Journal d'événements.
Les descriptions sont générées par IA et indicatives : on les stocke ou on les affiche, jamais elles ne pilotent un appareil. Sans réglage, les probabilités de la Décision sur texte sont un classement plutôt qu'une vérité calibrée : les vérifier sur des exemples réels avant d'alerter sur un seuil. Description d'image et Description vidéo partagent un plafond quotidien d'appels au modèle par organisation ; un nœud en échec d'appel signifie : pas de fournisseur, un modèle texte seul, le plafond atteint, ou une image expirée (garder le nœud juste après la chaîne caméra).
Enregistrements et calques de détection
Enregistrements présente une journée comme un enregistrement continu, même s'il est stocké en segments :
- la timeline marque les périodes enregistrées ; le curseur saute n'importe où ;
- le lecteur enchaîne les segments (le suivant est préchargé), de ×1 à ×8 ;
- exporter l'heure sous la tête de lecture en un seul fichier AVI, ou supprimer la journée ;
- Calques de détection liste chaque nœud de détection qui a enregistré des cadres ce jour-là. Cocher un calque dessine ses cadres sur la vidéo, une couleur par calque.

Un calque ne stocke que les cadres (label, score, position) dans OpenObserve — quelques centaines d'octets par image analysée au lieu d'une seconde vidéo annotée. Les calques ne demandent aucun câblage vers l'enregistreur : tout nœud de détection avec Enregistrer les détections comme calque de la caméra, dans n'importe quel flow, ajoute son propre calque, nommé d'après le nœud (ou le modèle). Leur rétention suit celle d'OpenObserve pour l'organisation.
Les caméras IP n'apparaissent pas dans Caméras : les enregistrements d'un flux sont sous Enregistrements, sur sa ligne dans Flux audio, et les calques de détection ne sont conservés que pour les caméras appareils.
Dimensionnement
Un ESP32-CAM en VGA qualité 12 envoie 15 à 30 Ko par image. À 5 images/s, cela fait environ 360 Mo par heure d'enregistrement continu par caméra. YOLOX-nano analyse une image en ~30 ms sur un CPU de bureau ; les modèles plus gros (YOLOX-l, ~1,4 s) conviennent à une cadence échantillonnée plutôt qu'à chaque image.

