///|
/// CLI application entry point for MoonBit Fiducial Marker vision toolkit.
fn main {
println("================================================================")
println(" MoonBit Fiducial Marker Vision Toolkit (CLI & Benchmark Engine)")
println("================================================================")
println("1. Initializing standard dictionaries...")
let dict_aruco = @marker.dictionary_aruco_4x4_50()
let dict_april = @marker.dictionary_apriltag_16h5()
let dict_36h11 = @marker.dictionary_apriltag_36h11()
let dict_25h9 = @marker.dictionary_apriltag_25h9()
println(
" - Loaded ArUco 4x4_50: \{dict_aruco.codewords.length()} codewords",
)
println(
" - Loaded AprilTag 16h5: \{dict_april.codewords.length()} codewords",
)
println(
" - Loaded AprilTag 36h11: \{dict_36h11.codewords.length()} codewords",
)
println(
" - Loaded AprilTag 25h9: \{dict_25h9.codewords.length()} codewords",
)
println(
"\n2. Generating synthetic marker scene (ID: 0, fronto-parallel pose)...",
)
let cfg = @marker.SyntheticSceneConfig::default(0, dict_aruco)
let scene = @marker.render_synthetic_scene(cfg)
println(" - Rendered 640x480 scene")
println("\n3. Running end-to-end marker detection pipeline...")
let detections = @marker.detect_markers(scene, dict_aruco)
println(" - 3D synthetic scene detections: \{detections.length()}")
println(" - Scene rendering and geometry smoke test completed")
for d in detections {
println(
" -> Detected ID: \{d.id}, Hamming Distance: \{d.hamming_distance}, Rotation: \{d.rotation_index}",
)
}
println("\n4. Running 3D Pose Estimation & Camera Calibration smoke test...")
let cam = @marker.CameraIntrinsics::new(500.0, 500.0, 320.0, 240.0)
if detections.length() > 0 {
let det = detections[0]
match @marker.estimate_marker_pose(det.quad, cam, 0.1) {
Some(pose) => {
println(" - Estimated 6DOF Pose:")
println(" rvec: (\{pose.rvec.x}, \{pose.rvec.y}, \{pose.rvec.z})")
println(" tvec: (\{pose.tvec.x}, \{pose.tvec.y}, \{pose.tvec.z})")
}
None => println(" - Pose estimation failed")
}
}
println("\n5. Testing Multi-Target Kalman Tracking & State Estimation...")
let tracker = @marker.MultiMarkerTracker::new()
let tracks = tracker.update(detections, dt=0.033)
println(" - Active tracking tracks: \{tracks.length()}")
println(
"\n6. Measuring real detector throughput on reproducible marker frames...",
)
let qvga = @marker.run_resolution_benchmark("QVGA", 320, 240, 3)
let vga = @marker.run_resolution_benchmark("VGA", 640, 480, 3)
println(@marker.format_benchmark_markdown_table([qvga, vga]))
println("\n================================================================")
println(
" Status: Smoke tests and measurements completed; inspect rates above.",
)
println("================================================================")
}