All notable changes to this project will be documented in this file.
- (ci) Remove invalid --ignore-timeouts flag from tarpaulin config
- (ci) Add CODECOV_TOKEN to codecov upload step
- Add Tarpaulin-based code coverage report
- (core) Add purecv dependency for milestone 8 refs #125 #126
- (kpm) Relax dual-mode Gaussian-pyramid test to <= 1 ULP tolerance
- (kpm) Disable FP contraction in C++ build to restore cross-platform parity
- (kpm) Use full 15-digit C++ literals for orientation smoothing kernel
- (kpm) Silence clippy::excessive_precision on SMOOTH_KERNEL
- Add Β§3.5 documenting bilinear interpolation formula equivalence
- Add Β§3.4 documenting the NONMAX_CHECK macro replacement
- Update README and ARCHITECTURE with M8 milestone details
- (kpm) Port BoxFilterPyramid8u to Rust (M8 step 1)
- (kpm) Port interpolate.h + BinomialPyramid32f to Rust (M8 step 2)
- (kpm) Port DoG detector + OrientationAssignment to Rust (M8 step 3)
- (kpm) Port FREAK descriptor + Keyframe to Rust (M8 step 4)
- (kpm) Add dual-mode test for DoG detector with find_orientation=true
- Convert generators to arlog_*! macros (PR 3/4 for #90)
- Fix rustfmt import order in nft_marker_gen.rs
- (examples) Use arlog_rel! for help banner and prompt UI per review
- (kpm) Implement Hough similarity voting algorithm (M7)
- (kpm) Implement binary hierarchical clustering and k-medoids for FREAK descriptors
- (kpm) Port FeatureStore and FeatureMatcher with three match variants
- (kpm) Port ArrayShuffle for BHC parity with C++ baseline
- (kpm) Fix arlog macro imports and unused variable warnings (#109)
- (kpm) Apply clippy and fmt fixes to hough.rs for M7
- (kpm) Resolve clippy warnings in clustering module
- (kpm) Resolve remaining clippy warnings in clustering
- (kpm) Include in kpm_c_api.cpp for GCC build
- (kpm) Move include before matcher headers for GCC build
- (build) Use platform-appropriate C++ stdlib (libc++ on macOS, libstdc++ on Linux)
- (kpm) Use combined absolute+relative tolerance in M6-2 dual-mode tests
- (kpm) Widen relative tolerance to 1e-5 for M6-2 dual-mode tests
- (kpm) Add dual-mode FFI tests for FeatureMatcher (M7-3)
- (kpm) Strengthen dual-mode FeatureMatcher tests with pair equality and global-best invariants
- Add pre-commit verification workflow and arlog import pattern to CLAUDE.md
- Fix formatting from cargo fmt
- Run dual-mode tests in CI to enforce C++ parity
- Scope dual-mode tests to --lib to avoid pre-existing integration test failures
- (matrix) Add ARMatrixCodeType::GlobalID variant and MatchOk.global_id field
- (bch) Implement BCH(127,64,22) decoder for AR_MATRIX_CODE_GLOBAL_ID
- (matrix) Add 14x14 GlobalID bit extraction with 4-direction traversal
- (matrix) Wire AR_MATRIX_CODE_GLOBAL_ID into ar_matrix_code_get_id and ar_get_marker_info
- (matrix) Add GlobalID support to matrix code type and update parsing logic
- (core) Implement ar_param_change_size and argl_camera_frustum_rh
- (param_gl) Port remaining three paramGL.c functions to param_gl.rs
- (param_gl) Fix clippy::doc_overindented_list_items on line 249
- (arlog) Scope test log capture to the thread running the arlog test
- (param) Change ar_param_change_size to mutate ARParam in-place
- (param_gl) Fix C source reference from argl.c to paramGL.c
- Finish converting load_nft.rs to arlog_*! macros
- (kpm) Satisfy clippy on freak::math constants and helpers
- (bench) Resolve SIMD benchmark compilation errors
- (kpm) Clarify SolveLinearSystem2x2 is dead in OUR build context
- (kpm) Port FREAK math utilities from C++ (Milestone 6 Phase 1-3)
- (kpm) Port linear algebra and linear solvers (M6-2)
- (kpm) Port homography pipeline + PadΓ© matrix exp (M6-3)
- (kpm) Add dual-mode validation for FREAK math fast-paths
- (kpm) Add dual-mode validation for M6-2 linear solvers
- (kpm) Add dual-mode validation for M6-3 homography pipeline
- Pass --features log-helpers when running simple example
- Remove accidental .DS_Store from repo changes
- Convert println!/eprintln! to arlog_*! in examples and bench
- Apply cargo fmt --all (fixes CI fmt check)
- (core) Fix formatting issues
- (marker) Apply cargo fmt
- (diagnostic) Apply stable rustfmt wrapping (#104 CI)
- (clippy) Clear all warnings and add clippy -D warnings to CI
- (clippy) Fix 5 CI-only clippy warnings (explicit_counter_loop, manual_checked_ops)
- (marker) Populate cf_patt/id_patt and copy to final id/cf per mode
- (core) Port confidence_cutoff from C and add regression tests (issue #92)
- (marker) Wire cutoff_phase from MatchOk/MatchError result codes (#88)
- (marker) Resolve merge conflict in cutoff_phase tests
- (simple,marker) Honour the buff/pixel_format contract (#103)
- (issue-86) Add implementation plan
- Update CLAUDE.md with documentation and style guidelines
- (issue-103) Correct findings β Rust/C cf close but not byte-equal
- (marker) Add finalize_marker_id_cf_dir helper
- (types) Add MatchOk, MatchError, From for ARMarkerInfoCutoffPhase
- (core) Add ar_detect_marker orchestrator for full marker detection pipeline
- (types) Add AR tracking history mode constants (#101)
- (marker) Port arDetectMarker tracking history pipeline (#96)
- (diagnostic) Add dump_patt + diff_patt for issue #103
- (core) Move AR modules into ar/ subfolder (closes #82)
- (types) Defer MatchOk.global_id field to issue #89
- (pattern) Pattern_match returns Result<MatchOk, MatchError>
- (matrix) Ar_matrix_code_get_id returns Result<MatchOk, MatchError>
- (marker) Add failing tests for finalize_marker_id_cf_dir helper
- (marker) Add confidence_cutoff edge case and mode-specific unit tests (#96)
- (marker) Extract history phases as helpers and add 12 unit tests (#96)
- 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.