webarkitlib-rs 0.1.1

A high-performance, memory-safe Rust port of WebARKitLib (ARToolKit) for native and WASM.
Documentation

WebARKitLib-rs πŸ¦€

WebARKitLib-rs is a high-performance, memory-safe Rust port of the WebARKitLib (originally C/C++).

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.

[!NOTE] This project is currently a Work in Progress. While the core marker detection and pose estimation are functional, we are continuously optimizing and expanding the feature set.

🌟 Key Features

  • Pure Rust: Built for safety, speed, and modern concurrency. (crates.io)
  • WASM Ready: High-performance tracking in the browser via WebAssembly. (@webarkit/webarkitlib-wasm)
  • Side-Effect Free: Pure mathematical engine, easy to test and integrate.
  • CI-Integrated Benchmarking: Performance parity with original C implementation.

πŸš€ Getting Started

Native Rust Example

To see the marker detection in action on your local machine, run the provided simple example:

cargo run --example simple

This example loads a camera parameter file, a hiro marker pattern, and a sample image, performing detection and outputting the 3D pose extrinsics.

WebAssembly (WASM) Demo

The WASM port allows you to run the AR engine directly in most modern browsers.

  1. Build the WASM module:

    cd crates/wasm
    
    wasm-pack build --target web
    
    
  2. Run the demo: You can serve the www folder using any local HTTP server (e.g., python -m http.server 8080).

πŸ“Š Benchmarking

We maintain a strict performance comparison with the original C library to ensure our Rust port remains competitive.

Running the Comparison

  1. Bootstrap the C library:

    cd benchmarks/c_benchmark
    
    python ../bootstrap.py --bootstrap-file libraries.json
    
    
  2. Execute the Suite:

    # Rust Benchmark
    
    cargo bench -p core --bench marker_bench
    
    
    # C Benchmark (Manual build required once)
    
    cd benchmarks/c_benchmark/build
    
    cmake --build . --config Release
    
    ../c_benchmark ../../data/camera_para.dat ../../data/patt.hiro ../../data/hiro.raw 429 317
    
    

Tracking Performance

We use criterion to track performance over time. You can save specific snapshots as "baselines":

# Save a milestone baseline

cargo bench -- --save-baseline milestone-20240304

πŸ—οΈ Project Structure

  • crates/core: The core AR engine (pure Rust).
  • crates/wasm: WASM bindings and JavaScript glue code.
  • benchmarks: C vs Rust performance comparison suite.
  • examples: Usage demonstrations.

πŸ—ΊοΈ Roadmap

🎯 Near-term Goals (v1.0.0+)

  • Dual WASM Strategy: Automate the release of both non-SIMD (current) and SIMD-enabled binaries to maximize compatibility across different browser environments.
  • Barcode Marker Support: Port matrix-code detection logic to support barcode markers.
  • Enhanced Documentation: Expand API reference, integration walkthroughs for JS/TS, and provide detailed usage examples.

πŸ”­ Long-term Vision

  • Multi-Marker Support: Port arMulti logic to enable tracking of multiple markers simultaneously.
  • KPM/NFT (Natural Feature Tracking): Implement robust tracking of arbitrary images and surfaces.
  • Advanced Video Abstraction: Develop a cross-platform video handling layer (inspired by ARWrapper/ARToolkitX) to simplify integration with various input sources.

πŸ“œ Credits

This project is a port of the excellent WebARKitLib project. Special thanks to the original ARToolKit contributors.

πŸ“„ License

This project is licensed under the LGPLv3 License - see the LICENSE file for details.