76 lines
2.1 KiB
Markdown
76 lines
2.1 KiB
Markdown
# 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.
|