Files
flywms/aggiornamento-2026-05-16-13-01.md
2026-05-19 08:52:44 +02:00

189 lines
5.6 KiB
Markdown

# Aggiornamento 2026-05-16 13:01
## Salvataggio discussione prima del riavvio PC
Questo file riassume lo stato della discussione e del lavoro fatto finora, per evitare perdita di contesto in caso di crash o riavvio.
## Stato generale
Il progetto FlyWMS sta evolvendo da una demo locale di navigazione YOLO/OpenCV verso una pipeline distribuita:
- `flywms_navigation.py`: simulatore drone/navigazione;
- `flywms_wms_server.py`: server WMS demo;
- comunicazione reale HTTP multipart tra client navigazione e server WMS;
- crop etichetta come payload principale per OCR/WMS;
- gaylord come ancora semantica per associare etichetta e posizione.
## Decisioni importanti prese
- Il gaylord resta l'oggetto di riferimento: serve a sapere a quale UDC/posizione appartiene l'etichetta.
- L'OCR deve lavorare sul crop dell'etichetta, non sul crop del gaylord intero.
- L'etichetta valida deve avere bbox contenuto nel bbox del gaylord centrato.
- Detection etichetta fuori dal gaylord vengono ignorate.
- Se il gaylord e' centrato ma non viene trovata un'etichetta contenuta, si segnala `ETICHETTA_NON_TROVATA` e si attende un frame successivo.
- Il movimento drone verso etichetta e ritorno al centro gaylord e' simulato con vettore pixel `dx/dy`.
- La freccia nera bidirezionale rappresenta il movimento dal centro gaylord al centro etichetta.
- La finestra comandi mostra anche grandi delta:
- `DX ORIZZONTALE`;
- `DY VERTICALE`.
- Le finestre OpenCV client sono configurabili da INI.
- Il server WMS non era inizialmente dotato di finestre; poi e' stato deciso di aggiungere finestre server demo.
- Il server WMS deve salvare immagini e payload ricevuti.
- L'esito `ACK/NACK` per ora resta configurabile e simulato.
- Il codice OCR deve essere reale quando possibile; se OCR non determina il codice, non bisogna inventare un valore.
- Per il primo gaylord, avendo etichetta tagliata, il codice deve essere:
```text
udc non determinato
```
## File principali modificati o aggiunti
- `flywms_navigation.py`
- tracking gaylord;
- associazione etichetta contenuta nel bbox gaylord;
- crop etichetta;
- freccia movimento;
- finestre OpenCV;
- client WMS asincrono;
- invio HTTP multipart;
- gestione ACK/NACK/ERROR/TIMEOUT.
- `flywms_navigation.ini`
- parametri navigazione;
- parametri FPS preview/YOLO;
- parametri etichetta;
- parametri finestre OpenCV;
- parametri client/server WMS;
- parametri OCR/fallback.
- `flywms_wms_server.py`
- server FastAPI;
- endpoint `/api/v1/navigation-snapshot`;
- endpoint `/health`;
- salvataggio immagini e metadati;
- OCR EasyOCR con fallback;
- payload WMS finale;
- finestre OpenCV server;
- opzioni `--no-ui` e `--no-ocr`.
- `.gitignore`
- aggiunto `wms_received*/`.
## Milestone create nella sessione
- `aggiornamento-2026-05-16-09-03.md`
- `aggiornamento-2026-05-16-10-14.md`
- `aggiornamento-2026-05-16-10-37.md`
- `aggiornamento-2026-05-16-10-47.md`
- `aggiornamento-2026-05-16-10-49.md`
- `aggiornamento-2026-05-16-11-04.md`
- `aggiornamento-2026-05-16-11-12.md`
- `aggiornamento-2026-05-16-11-29.md`
- `aggiornamento-2026-05-16-12-04.md`
- `aggiornamento-2026-05-16-12-08.md`
- `aggiornamento-2026-05-16-12-10.md`
## Test eseguiti
Compilazione piu' volte:
```powershell
python -m py_compile flywms_navigation.py flywms_navigation_gui.py flywms_wms_server.py
```
Test client-server WMS locale:
```text
[WMS] job accodato request_id=...
[WMS] risposta request_id=... status=ACK message=codice valido su WMS: ...
[CMD] RIPARTI_DESTRA
```
Server ha salvato:
```text
metadata.json
wms_payload.json
snapshot_..._frame.jpg
snapshot_..._label_payload.jpg
```
OCR su primo crop etichetta:
```text
OcrServerResult(text='udc non determinato', raw_text='', confidence=0.0, backend='easyocr-fallback', fallback_used=True)
```
## Problema attuale prima del riavvio
Eseguendo:
```powershell
python flywms_navigation.py --wms-enabled
```
il programma sembra non partire. Dopo `CTRL+C`, lo stack trace mostra che era fermo durante l'import di Ultralytics/PyTorch:
```text
detector = UltralyticsDetector(args.weights, args.ultralytics_device)
from ultralytics import YOLO
import torch
KeyboardInterrupt
```
Questo indica che il blocco avviene prima dell'avvio della logica WMS e prima dell'apertura del video: il processo sta impiegando molto tempo a importare `torch`/`ultralytics` o e' rallentato da stato del PC/disco/ambiente Python.
Non sembra causato direttamente dal codice WMS, perche' lo stack trace si ferma in import PyTorch.
## Diagnosi da fare dopo riavvio
1. Verificare tempo import PyTorch/Ultralytics:
```powershell
python -c "import time; t=time.time(); import torch; print('torch', time.time()-t); t=time.time(); from ultralytics import YOLO; print('ultralytics', time.time()-t)"
```
2. Verificare avvio senza WMS:
```powershell
python flywms_navigation.py --no-display --max-frames 1
```
3. Verificare avvio con WMS ma senza finestre:
```powershell
python flywms_navigation.py --no-display --max-frames 1 --wms-enabled
```
4. Avviare server WMS:
```powershell
python flywms_wms_server.py --host 0.0.0.0 --port 8088
```
5. Avviare navigazione:
```powershell
python flywms_navigation.py --wms-enabled
```
## Stato git noto
Ultimo commit locale fatto:
```text
1186c3b configura fps preview e yolo
```
Il branch risultava avanti di 1 commit rispetto a `origin/master` prima delle modifiche successive.
Molte modifiche successive risultano non ancora committate. Prima di proseguire dopo il riavvio conviene fare:
```powershell
git status --short --branch
python -m py_compile flywms_navigation.py flywms_navigation_gui.py flywms_wms_server.py
```
e poi valutare commit/push.