External observer with OpenCV UI baseline

This commit is contained in:
administrator
2026-06-03 15:28:27 +02:00
parent f728524ee6
commit e86c05a885
9 changed files with 1375 additions and 47 deletions

View File

@@ -0,0 +1,75 @@
# Aggiornamento 2026-05-30 18:12
## Step 2 - Capture / Inference
Completati:
- documento di progetto Step 2 in [step2_capture_inference_design.md](/C:/devel/flywms/step2_capture_inference_design.md)
- introduzione del pacchetto `CapturedFrame`
- introduzione del `CaptureWorker`
- propagazione della posa congelata dal capture fino allo snapshot
## Modifiche implementate
In [flywms_navigation.py](/C:/devel/flywms/flywms_navigation.py):
- aggiunto `CapturedFrame` con:
- `frame_id`
- `timestamp`
- `video_time_sec`
- `frame`
- `pose`
- `read_ms`
- aggiunto `sample_demo_pose(...)`
- aggiunto `CaptureWorker` con coda `maxsize=1`
- politica di coda: `latest frame wins`
- `cap.read()` spostato fuori dal loop principale
- `NavigationController.process_track(...)` ora consuma `CapturedFrame`
- `CandidateSnapshot` e `NavigationSnapshot` ora portano anche `capture_pose`
- metadata snapshot JSON aggiornati: `drone_pose_simulated` ora deriva dal frame catturato
## Correzione importante sulle metriche
Con `latest frame wins`, il `frame_id` della sorgente puo' saltare. Per questo:
- `frame_id` resta l'identificativo del frame sorgente;
- `processed_frames` misura invece quanti frame il core ha davvero consumato.
Le metriche `loop_fps` e i log prestazionali ora usano `processed_frames`, non `frame_id`.
## Verifiche eseguite
1. Compilazione Python:
```bash
python -m py_compile flywms_navigation.py flywms_navigation_observer.py
```
Esito: ok.
2. Smoke test core senza observer:
```bash
python flywms_navigation.py --video testhd2_edit.mp4 --max-frames 30
```
Esito: ok.
3. Smoke test core con observer attivo:
```bash
python flywms_navigation.py --video testhd2_edit.mp4 --observer-enabled --max-frames 30
```
Esito: ok.
## Nota operativa
Dopo lo Step 2, `--max-frames` resta un limite sui frame della sorgente video, non sui frame effettivamente processati.
Questo va bene per smoke test rapidi, ma non e' il modo corretto per giudicare la resa finale della pipeline realtime. Il benchmark successivo va fatto sulla durata completa del video, confrontando:
- durata nominale video;
- durata effettiva demo;
- `processed_frames`;
- `yolo_fps` reale.