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)
- **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.
solo in finestre attorno ai massimi locali del top-level — costo
- **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.
proporzionale ai candidati, non a varianti × W × H. Per template
elongati (>2:1) si torna automaticamente al full-scan esatto.
3.**Refine per candidato**: subpixel 2D sul picco → golden-section
sull'angolo su bitmap fine → least-squares (dx, dy, dθ) sui gradienti.
4.**Verify**: NCC su crop locale (anti falsi-positivi, mediato nello
score) → NMS IoU su bbox poligonali orientati.
## Parametri principali
## Parametri principali
| Parametro | Default | Significato |
| Parametro | Default | Significato |
|---|---|---|
|---|---|---|
| `num_features` | 96 | feature sparse per variante |
| `num_features` | 96 | feature sparse per variante |
- 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
## Roadmap
- Subpixel refinement (interpolazione parabolic sui picchi)
Vedi [ROADMAP.md](ROADMAP.md) — Fase 1 (speed) e Fase 2 (precisione
- ICP locale per raffinamento pose
rotazione + robustezza) completate; prossimo target: latency <50 ms su
- Vincoli di orientamento: clustering delle pose per eliminare duplicati cross-variante
1920×1080 (auto step per livello fatto; restano greediness default, GPU,
- Numba JIT per il ciclo shift+add (eventuale 3-5× su scene grandi)
eventuale SIMD C++).
## Deploy VPS con Docker + Traefik
## Deploy VPS con Docker + Traefik
Assume che sulla VPS siano già attivi:
Assume che sulla VPS siano già attivi:
- **Traefik** come reverse proxy su network Docker esterna `traefik`
- **Traefik** come reverse proxy su network Docker esterna `traefik`
- Entrypoints`web` (:80) e `websecure` (:443)
- Entrypoint `websecure` (:443) e cert resolver configurato
- Cert resolver `letsencrypt` configurato
### Build e push al registry
```bash
```bash
# Build locale
cd /opt/docker/visionsuite/shape_model_2d
docker build -t vps-ip:5000/pm2d:latest .
docker compose build
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
docker compose up -d
docker compose up -d
```
```
@@ -179,13 +213,8 @@ Servizio raggiungibile: **https://pm.tielogic.xyz**
- **Volume `./images`**: persistenza delle immagini caricate tramite UI
- **Volume `./images`**: persistenza delle immagini caricate tramite UI
(`IMAGES_DIR=/data/images` nel container). Sopravvive a restart.
(`IMAGES_DIR=/data/images` nel container). Sopravvive a restart.
- **Upload max 50MB**: middleware Traefik `pm2d-bodysize`. Adattare se serve.
- **Upload max 50MB**: middleware Traefik `pm2d-bodysize`. Adattare se serve.
- **Cache matcher in-memory**: si svuota a restart container (no problema,
- **Cache matcher in-memory**: si svuota a restart container (ri-popolata
viene ri-popolata al primo match).
al primo match). Le ricette `.npz` invece persistono in `recipes/`.
- **Healthcheck**: HTTP `GET /images` ogni 30s.
- **Healthcheck**: HTTP `GET /images` ogni 30s.
- Se nome network Traefik diverso da `traefik`, modifica
- Se nome network Traefik o cert resolver diversi, modifica i labels in
`docker-compose.yml` sezione `networks`.
`docker-compose.yml`.
### 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`.
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.