FEAT: Agent capteur — mode remote : soumission des frames d'analyse au broker (filtre motion + downscale 640) #75

Open
opened 2026-08-12 09:46:39 +02:00 by nonobis · 0 comments
Owner

🎯 Contexte

Un agent sans GPU (ou configuré remote) ne doit plus analyser localement : il capture, filtre, et publie les frames pertinentes sur le broker ; le résultat revient via le central. Objectif : latence réseau maîtrisée et bande passante WAN minimale.

🔍 État actuel (vérifié dans le code)

SnapshotPipelineService.ConsumeSnapshotsAsync : chaque snapshot → _analyzer.AnalyzeFrameAsync (stub) + FrameMotionDetector.Detect + reporting. Le motion detect existe déjà mais l'analyse est forcément locale.

🧩 À faire

  • Option Agent:AnalysisMode (settings distants + fallback local, appliquée à chaud comme le reste)
  • En mode Remote : publier AnalysisJobRequested (frame downscalée 640×640, JPEG) au lieu de l'appel local à FrameAnalyzerService
  • Downscale + encode JPEG (qualité paramétrable, ex. 70) côté capteur avant publication
  • Timeout de publication + politique de fallback (repli local si broker injoignable, log + métrique)
  • Métriques : jobs soumis/s, taille payload moyenne, latence aller-retour observée
  • Tests : bascule Local↔Remote, downscale, filtre motion

🧪 Critères d'acceptation

  • En mode Remote, aucune inférence locale n'est déclenchée (le CPU du site sans GPU est préservé)
  • Seules les frames de mouvement sont publiées (débit borne, pas de flux continu)
  • La bascule Local↔Remote se fait sans redémarrage (settings distants)
  • make test vert

📁 Fichiers concernés

src/Heimdall.Agent/AgentOptions.cs, src/Heimdall.Agent/Services/SnapshotPipelineService.cs, src/Heimdall.Agent/Services/RemoteAnalysisPublisher.cs (nouveau), src/Heimdall.Agent/Services/FrameMotionDetector.cs, tests/Heimdall.Agent.Tests/

⚠️ Impact

Comportement de l'agent modifié seulement en mode Remote — le mode Local reste le défaut. Dépend du broker (ticket 1) et de l'inférence réelle (ticket #2) pour le retour.

📝 Notes

Le payload (frame 640×640 JPEG) doit être chiffré en transit (TLS AMQP) — les flux vidéo ne doivent pas circuler en clair entre sites.

## 🎯 Contexte Un agent **sans GPU** (ou configuré `remote`) ne doit plus analyser localement : il capture, filtre, et **publie les frames pertinentes sur le broker** ; le résultat revient via le central. Objectif : latence réseau maîtrisée et bande passante WAN minimale. ## 🔍 État actuel (vérifié dans le code) `SnapshotPipelineService.ConsumeSnapshotsAsync` : chaque snapshot → `_analyzer.AnalyzeFrameAsync` (stub) + `FrameMotionDetector.Detect` + reporting. Le motion detect existe déjà mais l'analyse est forcément locale. ## 🧩 À faire - [ ] Option `Agent:AnalysisMode` (settings distants + fallback local, appliquée à chaud comme le reste) - [ ] En mode Remote : publier `AnalysisJobRequested` (frame downscalée 640×640, JPEG) au lieu de l'appel local à `FrameAnalyzerService` - [ ] Downscale + encode JPEG (qualité paramétrable, ex. 70) côté capteur avant publication - [ ] Timeout de publication + politique de fallback (repli local si broker injoignable, log + métrique) - [ ] Métriques : jobs soumis/s, taille payload moyenne, latence aller-retour observée - [ ] Tests : bascule Local↔Remote, downscale, filtre motion ## 🧪 Critères d'acceptation - [ ] En mode Remote, aucune inférence locale n'est déclenchée (le CPU du site sans GPU est préservé) - [ ] Seules les frames de mouvement sont publiées (débit borne, pas de flux continu) - [ ] La bascule Local↔Remote se fait sans redémarrage (settings distants) - [ ] `make test` vert ## 📁 Fichiers concernés src/Heimdall.Agent/AgentOptions.cs, src/Heimdall.Agent/Services/SnapshotPipelineService.cs, src/Heimdall.Agent/Services/RemoteAnalysisPublisher.cs (nouveau), src/Heimdall.Agent/Services/FrameMotionDetector.cs, tests/Heimdall.Agent.Tests/ ## ⚠️ Impact Comportement de l'agent modifié seulement en mode Remote — le mode Local reste le défaut. Dépend du broker (ticket 1) et de l'inférence réelle (ticket #2) pour le retour. ## 📝 Notes Le payload (frame 640×640 JPEG) doit être chiffré en transit (TLS AMQP) — les flux vidéo ne doivent pas circuler en clair entre sites.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#75
No description provided.