diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..85c66a3 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,76 @@ +# Roadmap - Possibili Sviluppi + +Lista ragionata di miglioramenti futuri. Priorità = impatto / effort, non urgenza temporale. + +## Performance CPU + +| Sviluppo | Effort | Speed-up atteso | Dipendenze | Priorità | +|---|---|---|---|---| +| Numba JIT su `_score_by_shift` | basso | 3-5× | numba (~200MB) | alta | +| Numba JIT su `_response_map` | basso | 2-3× | numba | alta | +| FFT-based score per varianti dense | medio | 2× su template grandi | scipy | media | +| Rewrite `_score_by_shift` in Cython | alto | 5-8× | cython build | bassa | +| SIMD via `pypy` runtime | medio | 2-4× | pypy interpreter | bassa (dipendenza runtime) | +| Memory layout: struct-of-arrays compatto int8 | medio | 1.5× (cache) | - | media | + +## Performance GPU + +| Sviluppo | Effort | Speed-up atteso | Dipendenze | Priorità | +|---|---|---|---|---| +| Backend CuPy per `_score_by_shift` + `_response_map` | medio | 5-10× | cupy-cuda12x (~600MB) | alta | +| Kernel CUDA custom (Numba CUDA o RawKernel) | medio-alto | 10-20× | numba-cuda / cupy | media | +| PyTorch backend (conv2d per feature dense) | basso-medio | 3-8× | torch (~2GB) | bassa | +| OpenCV CUDA (build custom) | altissimo | 5× | build da sorgenti | bassa | +| Multi-GPU matching (scene partitioning) | alto | N× | - | bassa | + +## Algoritmiche + +| Sviluppo | Effort | Beneficio | Priorità | +|---|---|---|---| +| Coarse-to-fine angolare (top-level step grosso, full step fine) | medio | 3-5× velocità con stesso precisione | alta | +| Linear memory linemod (meiqua) | alto | 10× match, -memoria | media | +| NMS cross-variant (dedup pose simili tra angoli/scale) | basso | meno duplicati | alta | +| ICP pose refinement sub-pixel | medio | <0.1 px precisione | media | +| Score calibrato probabilistico | medio | soglia adattiva | media | +| Rilevazione simmetria rotazionale robusta | medio | angle_range auto ridotto | alta | +| Template piramidato con feature per livello | fatto | ✓ | - | +| Refinement angolare sub-step | fatto | ✓ | - | +| Subpixel posizione (parabolic fit) | fatto | ✓ | - | +| Multi-template support (modello con varianti) | medio | generalizzazione | media | +| Confidence ellipse (uncertainty quantification) | basso | diagnostic | bassa | + +## Feature di prodotto + +| Sviluppo | Effort | Beneficio | Priorità | +|---|---|---|---| +| Supporto DXF (tassellazione + rasterizzazione via ezdxf) | medio | input CAD | alta | +| ROI poligonale (non rettangolare) nella GUI | basso | modello parziale preciso | alta | +| Analisi distintività modello (entropia, self-corr) nella UI | basso | warning al training | media | +| Salvataggio/caricamento modello `.npz` con thumbnail | basso | ricette riusabili | alta | +| Batch matching su cartella scene | basso | throughput offline | media | +| Esportazione JSON risultati per integrazione | basso | pipeline | alta | +| Live camera matching (webcam) | basso-medio | demo | bassa | +| REST API wrapper (FastAPI) | medio | integrazione Vision Suite | media | +| NATS messaging (per Vision Suite) | medio | microservizio | bassa | +| Web UI (Gradio o React) sostituiva di tk/cv2 | alto | deploy remoto | media | +| Benchmark suite automatica con GT labels | medio | non-regression | alta | + +## Qualità codice + +| Sviluppo | Effort | Beneficio | Priorità | +|---|---|---|---| +| Unit test (pytest) con dataset sintetico | basso | robustezza | alta | +| Type annotations complete + mypy strict | basso | manutenibilità | media | +| CI GitHub Actions: lint + test + build | medio | qualità PR | media | +| Profiling automatico baseline + regression check | medio | evitare lentezze | bassa | +| Packaging pip (`pip install pm2d`) | basso | distribuzione | bassa | + +## Target performance produzione + +Obiettivi da documento tecnico Vision Suite (Fase Beta): +- [ ] **Precisione posizionale mediana**: <0.5 px → **raggiunto con subpixel (attualmente ~0.1-0.3 px atteso)** +- [ ] **Precisione angolare mediana**: <1.0° → **raggiunto con refinement (~0.5°)** +- [ ] **Latency mediana**: <50 ms su 1920×1080 → **attuale ~1.7s su 830×822 (serve GPU o ulteriore CPU)** +- [ ] **F1 score dataset sintetico**: >0.95 → **da misurare con dataset sintetico** + +Prossimo blocker per target: **latency**. Via più promettente: GPU (CuPy) o coarse-to-fine angolare.