Bêta 0.2.0-beta.2, pas encore pour un process critique. Voir la roadmap
PNeX logo
Documentation de la version en développement, pas encore publiée. Voir la version stable (0.1.0)

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 :

  1. 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).
  2. Enregistrement vidéo — écrit les images dans le stockage en courts segments MJPEG-AVI.
  3. 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.

Liste des caméras : état, réglages de capture, 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.

Direct d'un ESP32-CAM

Réglages de capture d'une caméra

Le mode de capture décide quand la caméra envoie des images :

ModeLa caméra envoie…
À la demande (défaut)seulement pendant qu'on regarde le direct, ou qu'un flow déployé la lit
Continutant 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.

Registre des modèles avec statut de vérification et vitesse mesurée

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.

Formulaire d'ajout de modèle

  • 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.

Test live d'un modèle sur une 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 :

  1. 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).
  2. Détection d'objets — câblée après la source caméra ; choisir le modèle et les classes à garder.
  3. Enregistrement vidéo — câblé après la même source caméra.
  4. Éventuellement un nœud Debug après la détection pour voir les résultats, puis Déployer.

Flow caméra : source, détection, enregistrement et debug, avec badges d'état live

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églages du nœud de détection d'objets

RéglageRôle
ModèleUn modèle du registre (vérifié valide, sinon le déploiement est refusé)
Classes à garderCliquer des classes pour ne garder que ces détections (aucun = tous)
Score minimalFiltre sous ce score ; 0 = le seuil du modèle
ÉmissionPour chaque image analysée, ou Seulement quand quelque chose est détecté
Images par seconde maxImages analysées par seconde (défaut 1, 0 = toutes)
Enregistrer les détections comme calque de la caméraConserve les cadres à côté de l'enregistrement (voir plus bas ; caméras appareils seulement)
Images douteuses vers le Vision LabEnvoie 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églages du nœud d'enregistrement vidéo

RéglageDéfautRôle
Durée d'un segment60 sUn segment est fermé après cette durée…
Taille max d'un segment32 Mo…ou cette taille…
Coupure avant clôture10 s…ou après ce temps sans image
Images par seconde max0Cadence enregistrée (0 = toutes les images)
Rétention7 joursLes segments plus anciens sont supprimés (0 = pour toujours)
Libellénom de la caméra ou du fluxLibellé 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églageDéfautRôle
Score pour ouvrir un suivi0,5Les détections plus faibles ne font que prolonger un suivi existant
Recouvrement minimal (IoU)0,2Recouvrement nécessaire pour rester le même objet
Images avant apparition2Une détection vue sur moins d'images est du bruit
Perdu après (s)3Un 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.

Enregistrement relu avec le calque de détection yolox_nano

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.

On this page