Porting algoritmico (non SIMD) di `meiqua/shape_based_matching/line2Dup`. MIPP (wrapper SIMD C++) non ha senso in Python — la vettorizzazione la fa già NumPy.
Porting algoritmico di `meiqua/shape_based_matching/line2Dup`; gli hot-path
sono kernel **Numba JIT** (`pm2d/_jit_kernels.py`, parallelo, ≈ velocità C)
con fallback NumPy automatico se numba non è disponibile.
## Precisione (misurata su ground-truth sintetica, 7 pose note)
score[y, x] = popcount-AND feature/bitmap / N_features (rescored vs background)
```
Implementato con **shift+add vettorizzato NumPy** (O(N_features · H · W) invece di O(kh·kw·H·W) come `matchTemplate`).
### Piramide multi-risoluzione
- **Top-level** (risoluzione /4 di default con `pyramid_levels=3`): score ridotto per pruning varianti. Se nessun pixel raggiunge `min_score * top_score_factor`, la variante è scartata.
- **Full-res**: calcolato solo per le varianti sopravvissute → nel benchmark clip: ~5-10 varianti su 72 = 7-14× speed-up rispetto a full-res per tutte.
1.**Top-level**: valuta 1 variante ogni `cf_auto` (step angolare auto:
al livello top lo spread tollera ~atan(spread/(lato_top/2)) gradi),
- CI Gitea Actions (`.gitea/workflows/ci.yml`): ruff + pytest su ogni push.
-`benchmarks/test_suite.py`: 16 scenari su immagini reali per confronto
manuale prestazioni/recall (richiede `Test/` in locale).
## Roadmap
- Subpixel refinement (interpolazione parabolic sui picchi)
- ICP locale per raffinamento pose
- Vincoli di orientamento: clustering delle pose per eliminare duplicati cross-variante
- Numba JIT per il ciclo shift+add (eventuale 3-5× su scene grandi)
Vedi [ROADMAP.md](ROADMAP.md) — Fase 1 (speed) e Fase 2 (precisione
rotazione + robustezza) completate; prossimo target: latency <50 ms su
1920×1080 (auto step per livello fatto; restano greediness default, GPU,
eventuale SIMD C++).
## Deploy VPS con Docker + Traefik
Assume che sulla VPS siano già attivi:
- **Traefik** come reverse proxy su network Docker esterna `traefik`
- Entrypoints`web` (:80) e `websecure` (:443)
- Cert resolver `letsencrypt` configurato
### Build e push al registry
- Entrypoint `websecure` (:443) e cert resolver configurato
```bash
# Build locale
docker build -t vps-ip:5000/pm2d:latest .
docker push vps-ip:5000/pm2d:latest
```
### Sulla VPS
```bash
# Cartella deploy (immagini persistenti qui)
mkdir -p /opt/docker/pm2d/images
cd /opt/docker/pm2d
# Copia docker-compose.yml
# Imposta REGISTRY / TAG se necessario via .env
echo"REGISTRY=vps-ip:5000" > .env
echo"TAG=latest" >> .env
docker compose pull
cd /opt/docker/visionsuite/shape_model_2d
docker compose build
docker compose up -d
```
@@ -179,13 +213,8 @@ Servizio raggiungibile: **https://pm.tielogic.xyz**
- **Volume `./images`**: persistenza delle immagini caricate tramite UI
(`IMAGES_DIR=/data/images` nel container). Sopravvive a restart.
- **Upload max 50MB**: middleware Traefik `pm2d-bodysize`. Adattare se serve.
- **Cache matcher in-memory**: si svuota a restart container (no problema,
viene ri-popolata al primo match).
- **Cache matcher in-memory**: si svuota a restart container (ri-popolata
al primo match). Le ricette `.npz` invece persistono in `recipes/`.
- **Healthcheck**: HTTP `GET /images` ogni 30s.
- Se nome network Traefik diverso da `traefik`, modifica
`docker-compose.yml` sezione `networks`.
### Adattamenti config Traefik non-standard
Se la VPS ha convenzioni diverse (es. cert resolver chiamato `le`,
entrypoint `https`), modifica i labels nel `docker-compose.yml`.
- Se nome network Traefik o cert resolver diversi, modifica i labels in
`docker-compose.yml`.
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.