All notable changes to this project will be documented in this file.
- Replace PNG banner with JPG version in README and assets
- (ci) Harden publish-crates checkout against submodule HTTP 500s
- (ci) Add submodules: recursive to release.yml checkout steps
- Apply cargo fmt to build.rs
- (ffi-backend) Vendor WebARKitLib C++ via git submodule (#72)
- (arlog) Pin log-helpers on load_nft example and clarify usage
- (log) Use arlog_i! instead of println! in doc examples
- Add CLAUDE.md with project conventions + HEADER.txt template
- (arlog) Port ARToolKit logging API over the log crate facade (#57)
- (arlog) Add verbose init helpers with timestamp + module path
- (arlog) Sweep existing println/debug calls to arlog_* (Pass A)
- (log) Fill in missing arlog_d! calls in marker.rs (Pass B2)
- (log) Fill in missing arlog_* calls in ar2/tracking.rs (Pass B2)
- (log) Port informational arlog_i! calls in ar2/feature_map.rs (B2)
- (log) Wire arlog backend into nft_marker_gen example
- (log) Add arlog_* at Err sites in matrix.rs + bch.rs (Pass B2)
- (log) Retrofit log + return Err pattern across 5 modules (Pass B3)
- Include assets directory in Cargo.toml for build process
- (log) Swap bare log::* for arlog_* vocabulary (Pass B1)
- (ar2) Parallelize feature_map Stage 3 with Rayon (1.49x full-image)
- (ar2) SIMD get_similarity (SSE4.1+AVX2) + parallel pyramid (1.70x total)
- (ar2) Apply cargo fmt
- Fix cargo fmt in feature_map_bench and feature_map tests
- (nft_marker_gen) Fix merge() in-place return + scoped Write import + add reference image
- (kpm) Fix generate() producing 0 FREAK features in .fset3 (#51)
- (ar2) Include all pyramid levels in fset even when 0 features detected
- Update README and lib.rs with NFT marker generation pipeline
- Add SIMD/parallel build instructions and per-step timing
- Clarify WASM section β npm package vs local demo build
- (ar2) Port ar2GenFeatureMap into feature_map.rs
- (ar2) Add .iset and .fset write support + rename gen_image_layer
- (ar2) Add ar2_gen_image_set, refactor ar2_gen_feature_map, add nft_marker_gen example (#49)
- (ar2) Add JPEG compression to .iset save matching C++ ar2WriteImageSet
- (nft_marker_gen) Improve logging to match NFT-Marker-Creator-App
- (nft_pipeline) Improve documentation and isolate feature extraction comparison with C-generated markers
- Fset3 KpmImageInfo field order and enable full pipeline test
- Improve assertion formatting in test_matched_db_id_zero_finds_pose
- Formatting style causing CI failure
- Gate simple_nft example behind ffi-backend feature
- Formatting in the new surface.rs file
- Add simple_nft example demonstrating KPM detection β AR2 tracking pipeline
- Add WasmNFTHandle for AR2 tracking in WASM and NFT demo page
- Add pinball demo image and update simple NFT example to use it
- Add ar2_read_surface_set to match C++ nftSimple pattern
- Extract surface types and functions into new ar2/surface.rs
- Update version to 0.3.0 in package.json and enhance release process in MAINTAINERS.md
- Fix cargo fmt issues in cpp_backend.rs and lib.rs
- (example) Fix index out of bounds panic in debug_labeling
- (readme) Add Rust banner image to README.md
- (kpm) Move kpm crate into core as submodule (M3-1)
- (ar2) Move ar2 crate into core as submodule (M3-2)
- (workspace) Consolidate ar2 and kpm into core crate (#45)
- (ci) Update checkout action to v6 and streamline cargo commands
- (readme) Enhance project documentation and add usage instructions
- (docs) Update license information and improve module documentation in bch.rs, filter.rs, and pose.rs
- (kpm) Use >= 0 for matched_id check to accept db_id 0 (#43)
- (benchmark) Exclude KPM targets from default build
- (kpm) Port KpmRefDataSet I/O β generate, save, load, merge (#26)
- (kpm) Port kpm_matching orchestration and add load_fset3 example (#27)
- (kpm) Expose query accessors in C API and add set_ref_data_set (#36)
- (ar2) Port AR2 imageSet and featureSet I/O to Rust (#37)
- (kpm) Replace load_fset3 example with load_nft and add fset3 test
- (kpm) Add regression test suite with C++ baseline validation (#28)
- Add dedicated kpm-build job, exclude kpm from workspace checks (#30)
- (kpm) Update bindgen dependency to version 0.72.1
- (kpm) Add LGPL-3.0 license headers to all source files
- (kpm) Apply cargo fmt formatting
- (kpm) Add crate scaffold with C++ FFI build system (#21)
- (kpm) Port KPM types and structs to Rust (#31)
- (kpm) Add FreakMatcherBackend trait and supporting types (#23)
- (kpm) Implement CppFreakMatcher FFI backend (#24)
- (kpm) Implement KpmHandle struct and improve crate documentation (#25)
- Update GitHub Actions to Node.js 24-compatible versions
- Include dist-std and dist-simd folders in npm package
- Correct get_cpara calling
- Introduce transformation matrix smoothing filter pub fn ar_filter_trans_mat and quaternion/matrix utility functions.
- Improved ar_patt_save pattern extraction and saving utilities with image-based API
- Add automatic marker region detection and pattern extraction preview to generate_patt.rs
- Enhance pattern generation by loading camera parameters from file with fallback to identity mapping
- Add flexible pattern extraction supporting multiple pixel formats and color/mono modes in ar_patt_get_image
- Add CLI options, batch mode, and diagnostic outputs to generate_patt.rs
- Add --verbose and --debug options for detailed diagnostic and extraction logging in generate_patt.rs
- Enable cleanup of test pattern file in pattern.rs
- Version Printing System: Added a new version module with
get_version()andprint_version()functions. The version is now printed at startup to aid in debugging (#13). - Webcam AR Example for WASM: Introduced a real-time webcam demonstration for WASM, transitioning the demo site from static image detection to live tracking. Renamed the original image detection example for clarity (#9).
- Comprehensive SIMD Enhancements: Expanded SIMD support across the library with major performance optimizations and updated technical documentation explaining the architecture (#6).
- Unified Barcode Examples: Consolidated
barcode.rsandbarcode_4x4.rsinto a single, parameterized example usingclapfor command-line arguments. This improves example maintainability and developer UX (#7). - WASM Build Infrastructure: Unified the WASM build process with a new OS-detecting Node.js script. This ensures the
npm run build:wasmcommand correctly generates both standard and SIMD modules across different operating systems (#11). - Improved WASM Bindings: Enhanced
WasmARHandleandMarkerResultwith more granular methods and full mapping ofARMarkerInfoto support complex AR interactions (#9).
- CI/CD Build Permissions: Resolved
Permission deniederror in the NPM publication step by explicitly setting the execute bit for the dual-build script.
- Matrix Code (Barcode) Support:
- Implemented
ar_matrix_code_get_idfor decoding barcode markers (3x3 to 6x6). - Added BCH and Hamming ECC error correction for robust barcode reading.
- New diagnostic tool
debug_labeling.rsfor visualizing image segmentation. - Dedicated barcode examples (
barcode.rs,barcode_4x4.rs).
- Implemented
- Dual WASM Build Pipeline:
- Added
build-dual.ps1andbuild-dual.shscripts to automate generating both Standard and SIMD-optimized WASM modules. - Unified
package.jsonexports for dual-loading support.
- Added
- Enhanced Web Demo:
- Real-time engine switching (Standard vs. SIMD).
- Added "Adaptive Threshold" visualization and
get_threshold()diagnostic. - Implemented WASM module cache-busting for reliable development updates.
- SIMD Luma Rounding: Corrected a rounding discrepancy in the WASM SIMD
grayscaleimplementation to match the standard scalar version exactly. - Matrix Grid Sampling: Improved homography-based grid sampling to handle different pixel formats correctly.
- Infrastructure: Updated root
README.mdwith instructions for the new dual-build system and barcode support.
- NPM Publication Recovery: Version bump to clear "shadow" states from previous failed attempts and ensure public access visibility.
- Crates.io Publication: Resolved missing metadata (description, license, readme) and corrected category slugs/keyword limits.
- NPM Scoped Access: Fixed E402/E403 errors by configuring public access for the
@webarkitscope.
- Complete C to Rust Port:
- Core math and matrix utilities (
matrix.rs,math.rs). - ICP pose estimation and coordinate conversion helpers.
- Image processing pipeline: Thresholding, Contour extraction, and Labeling.
- Template pattern matching for marker detection.
- 3D Pose Estimation from square markers.
- AR2 robust feature tracking.
- Core math and matrix utilities (
- WASM Support:
- High-performance memory bridge for zero-copy image processing in browsers.
wasm-bindgenAPI surface compatible with modern web patterns.- Interactive browser-based demonstration.
- Granular SIMD Optimizations:
simd-image: SSE4.1/WASM SIMD accelerated Grayscale and Box Filters.simd-pattern: High-throughput 32-bit Dot Product yielding 2.3x speedup.
- Performance Benchmarking Suite:
- Comparative benchmarks between original C implementation and the new Rust core.
- Automated performance reporting via Criterion.
- CI/CD Automation:
- Automated testing and build validation for Native and WASM.
- Lean Release Workflow focused on benchmarking and documentation.
-
Enhanced Image Processing:
-
ar_labelingoptimized with Union-Find (DSU) and path compression, reducing label merging complexity to near$O(1)$ .
-
- Achieved Performance Parity with the original C implementation: ~404 Β΅s (Rust) vs ~332 Β΅s (C) on 429x317 resolution.
- Demonstrated superior per-pixel scaling at higher resolutions (e.g., 640x480).
- Overall 2.3x speedup in pattern matching via SIMD.