You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bump the workspace and npm package versions 0.7.0 -> 0.8.0, regenerate the
wasm pkg (standard + SIMD), and prepend the 0.8.0 changelog section
(git-cliff) for the "Pure-Rust completeness, validation & polish"
milestone.
Release prep per MAINTAINERS.md §2. The dev->main merge and the v0.8.0
tag (which triggers the crates.io + npm publish) are done separately.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This project aims to provide a pure-Rust implementation of the core ARToolKit algorithms, targeting both **native** systems and **WebAssembly (WASM)** for high-performance augmented reality in the browser.
14
15
15
16
> [!NOTE]
16
-
> This project is currently a **Work in Progress**. Core marker detection and pose estimation are functional. KPM/NFT (Natural Feature Tracking) is in an early stage with partial Rust porting -- a fully idiomatic Rust KPM pipeline with a working example is the primary goal for v1.0.0.
17
+
> Core marker detection and pose estimation are functional, and as of **v0.8.0** the **KPM/NFT (Natural Feature Tracking) pipeline is fully ported to pure Rust** — end-to-end keypoint matching, marker generation (`.iset`/`.fset`/`.fset3`), and runtime tracking all run with **no C++ toolchain**, natively and in the browser via WebAssembly. The project remains a **Work in Progress** toward v1.0.0 (broader API docs, multi-marker support, and a dedicated KPM benchmark are the remaining focus areas).
17
18
18
19
## 🌟 Key Features
19
20
@@ -39,7 +40,7 @@ Add `webarkitlib-rs` to your `Cargo.toml`:
39
40
40
41
```toml
41
42
[dependencies]
42
-
webarkitlib-rs = "0.7"
43
+
webarkitlib-rs = "0.8"
43
44
```
44
45
45
46
### Pure Rust tracking (no C++ compiler required)
@@ -65,7 +66,7 @@ need to do anything special:
65
66
66
67
```toml
67
68
[dependencies]
68
-
webarkitlib-rs = "0.7"# default backend is pure Rust
69
+
webarkitlib-rs = "0.8"# default backend is pure Rust
69
70
```
70
71
71
72
```bash
@@ -82,7 +83,7 @@ NFT tracking**:
82
83
83
84
```toml
84
85
[dependencies]
85
-
webarkitlib-rs = { version = "0.7", features = ["ffi-backend"] }
86
+
webarkitlib-rs = { version = "0.8", features = ["ffi-backend"] }
86
87
```
87
88
88
89
> When installing from crates.io, no extra setup is required — the C++
@@ -122,42 +123,33 @@ This example loads a camera parameter file, a marker (pattern or barcode), and a
122
123
Generate NFT (Natural Feature Tracking) marker files compatible with ARnft and NFT-Marker-Creator-App:
123
124
124
125
```bash
125
-
# Pure-Rust default (no C++ toolchain required) — produces .iset + .fset.
126
-
# Pass --yes to skip the interactive "no .fset3" confirmation prompt
127
-
# (recommended for scripted / CI use):
126
+
# Pure Rust, no C++ toolchain — produces a COMPLETE marker (.iset + .fset + .fset3):
128
127
cargo run --release --example nft_marker_gen -- \
129
-
--input path/to/image.jpg \
130
-
--output path/to/output_name \
131
-
--dpi 220 \
132
-
--yes
133
-
134
-
# Full output including .fset3 (FREAK descriptors) — opt-in C++ backend:
135
-
# .fset3 generation still uses CppFreakMatcher today; the runtime KPM
136
-
# tracker reads .fset3 files in pure Rust, only the marker-creation step
137
-
# needs the C++ FREAK extractor. Wiring nft_marker_gen to RustFreakMatcher
138
-
# for .fset3 is a follow-up task.
139
-
cargo run --release --features ffi-backend --example nft_marker_gen -- \
140
128
--input path/to/image.jpg \
141
129
--output path/to/output_name \
142
130
--dpi 220
143
131
144
132
# With SIMD acceleration + Rayon parallelism (recommended for x86_64):
145
-
cargo run --release --features "ffi-backend,simd-x86-sse41,simd-x86-avx2" \
133
+
cargo run --release --features "simd-x86-sse41,simd-x86-avx2" \
146
134
--example nft_marker_gen -- \
147
135
--input path/to/image.jpg \
148
136
--output path/to/output_name \
149
137
--dpi 220
150
138
```
151
139
140
+
> Since #179, `.fset3` (FREAK descriptors) is generated by the pure-Rust
141
+
> `RustFreakMatcher` — a single invocation produces a complete marker with no
142
+
> C++ toolchain.
143
+
152
144
> **Important:** Always use the `--release` flag. Debug builds are 5–10× slower due to missing compiler optimizations.
153
145
154
-
Output files (depends on whether `ffi-backend` is enabled):
146
+
Output files (all produced on the pure-Rust default):
155
147
156
-
| File |Default (pure Rust) | With `ffi-backend`|Description |
|`-n`|`--search-feature-num`| Max features per pyramid level |`250`|
171
-
|`-y`|`--yes`| Skip the "no .fset3" confirmation prompt (for scripted / CI use; only relevant when built without `ffi-backend`) | (interactive) |
172
162
173
163
**Performance feature flags:**
174
164
175
165
| Feature flag | What it enables |
176
166
|---|---|
177
-
|`ffi-backend`| C++ FREAK backend (opt-in since M9-3 #142). Enables `.fset3` generation in `nft_marker_gen` (the `.iset`/`.fset` outputs work on the pure-Rust default) and powers development cross-validation (`dual-mode`, `cross_stack_parity`). Runtime NFT tracking with existing`.fset3` files works on the pure-Rust default. |
167
+
|`ffi-backend`| C++ FREAK backend (opt-in since M9-3 #142). Used only for development cross-validation (`dual-mode`, `cross_stack_parity`); all of `nft_marker_gen` (`.iset` +`.fset` + `.fset3`) and runtime NFT tracking run on the pure-Rust default. |
178
168
|`simd-x86-sse41`| SSE4.1 SIMD acceleration for feature map correlation (`get_similarity`) |
179
169
|`simd-x86-avx2`| AVX2+FMA SIMD acceleration for feature map correlation (faster than SSE4.1) |
180
170
|`simd`| Umbrella flag — enables all SIMD optimizations (SSE4.1, AVX2, WASM SIMD, image, pattern) |
@@ -258,7 +248,7 @@ Enable the `log-helpers` feature and call the bundled initializer once in your b
258
248
259
249
```toml
260
250
[dependencies]
261
-
webarkitlib-rs = { version = "0.7", features = ["log-helpers"] }
251
+
webarkitlib-rs = { version = "0.8", features = ["log-helpers"] }
262
252
```
263
253
264
254
```rust
@@ -439,12 +429,16 @@ The workspace contains two crates:
439
429
- Cross-platform / cross-stack matcher determinism — Rust `HashMap` → `BTreeMap` and upstream C++ `unordered_map` → `std::map` ([WebARKitLib#39](https://github.com/webarkit/WebARKitLib/pull/39)).
440
430
- Hand-annotated absolute corner-error regression gate (browser-based annotation tool + 5 fixtures + Linux CI gate). Finding: pure-Rust backend is more accurate than C++ on `pinball-demo` (5.27 px vs 18.79 px max corner error).
441
431
- Cross-stack parity gate against `@webarkit/jsartoolkit-nft@1.10.0` ([jsartoolkitNFT#584](https://github.com/webarkit/jsartoolkitNFT/pull/584)) — guarantees native Rust pose matches what production WASM consumers see.
432
+
- **v0.8.0 — Pure-Rust completeness, validation & polish**: Closed out the remaining gaps on top of M9:
433
+
- **Full WASM/NFT support** ([#161](https://github.com/webarkit/WebARKitLib-rs/issues/161)): `WasmKpmHandle` KPM-detection bindings, `console_log` wiring, clean dual (standard + SIMD) wasm builds, and an end-to-end **browser NFT demo** of the pure-Rust pipeline.
434
+
- **Pure-Rust `.fset3` marker generation** ([#179](https://github.com/webarkit/WebARKitLib-rs/issues/179)): `nft_marker_gen` now produces `.iset` + `.fset` + `.fset3` entirely via `RustFreakMatcher` — the `ffi-backend` is no longer needed for marker creation.
435
+
- **`VisualDatabase` ergonomics** ([#147](https://github.com/webarkit/WebARKitLib-rs/issues/147), [#148](https://github.com/webarkit/WebARKitLib-rs/issues/148)): factored the per-frame query loop, added `query_from_keyframe`, and facade-parity accessors on `VisualDatabase` + `FeatureStore` slices.
- **KPM-specific benchmark** ([deferred from #142](https://github.com/webarkit/WebARKitLib-rs/issues/142)): Add a dedicated `kpm_bench.rs` Criterion bench so we can verify the pure-Rust backend stays within 20% of C++ on `pinball-demo`. The existing `marker_bench` only measures barcode marker detection.
445
-
- **WASM browser examples for KPM/NFT** ([#161](https://github.com/webarkit/WebARKitLib-rs/issues/161)): End-to-end runnable browser demo of the pure-Rust NFT pipeline.
446
-
- **Raise M9 patch coverage** ([#177](https://github.com/webarkit/WebARKitLib-rs/issues/177)): Lift M9 modules from 84.76% → ≥90% patch coverage with no file under 85%.
- **Live-camera WASM demo + pose parity** ([#215](https://github.com/webarkit/WebARKitLib-rs/issues/215)): Extend the browser NFT demo with a live camera feed and jsartoolkitNFT pose parity.
448
442
- **Enhanced Documentation**: Expand API reference with complete module-level docs, integration walkthroughs for JS/TS, and detailed usage examples.
449
443
- **WASM Memory Management**: Improve resource cleanup when switching engines or markers in long-running browser sessions.
0 commit comments