cloudanalyzer 0.1.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cloudanalyzer-0.1.0/cloudanalyzer.egg-info → cloudanalyzer-0.3.0}/PKG-INFO +71 -11
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/README.md +67 -10
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/__init__.py +1 -1
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/align.py +2 -2
- cloudanalyzer-0.3.0/ca/benchmark.py +431 -0
- cloudanalyzer-0.3.0/ca/bundle.py +522 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/convert.py +2 -3
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/check_scaffolding.py +39 -1
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/check_triage.py +50 -1
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/checks.py +421 -9
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/ground_evaluate.py +30 -8
- cloudanalyzer-0.3.0/ca/core/map_evaluate.py +302 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/crop.py +2 -2
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/density_map.py +13 -0
- cloudanalyzer-0.3.0/ca/detection.py +342 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/downsample.py +2 -2
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/evaluate.py +3 -2
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/height_band.py +5 -5
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/voxel_confusion.py +5 -4
- cloudanalyzer-0.3.0/ca/experiments/map_evaluate/__init__.py +18 -0
- cloudanalyzer-0.3.0/ca/experiments/map_evaluate/common.py +99 -0
- cloudanalyzer-0.3.0/ca/experiments/map_evaluate/evaluate.py +191 -0
- cloudanalyzer-0.3.0/ca/experiments/map_evaluate/nn_thresholds.py +16 -0
- cloudanalyzer-0.3.0/ca/experiments/map_evaluate/voxel_entropy.py +115 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/process_docs.py +10 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/filter.py +2 -2
- cloudanalyzer-0.3.0/ca/geometry.py +735 -0
- cloudanalyzer-0.3.0/ca/history.py +386 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/info.py +4 -6
- cloudanalyzer-0.3.0/ca/io.py +138 -0
- cloudanalyzer-0.3.0/ca/kitti.py +130 -0
- cloudanalyzer-0.3.0/ca/loop_closure_report.py +237 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/merge.py +2 -2
- cloudanalyzer-0.3.0/ca/mme.py +84 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/normals.py +2 -2
- cloudanalyzer-0.3.0/ca/object_eval.py +365 -0
- cloudanalyzer-0.3.0/ca/point_summary.py +40 -0
- cloudanalyzer-0.3.0/ca/posegraph.py +269 -0
- cloudanalyzer-0.3.0/ca/pr_comment.py +349 -0
- cloudanalyzer-0.3.0/ca/registration.py +108 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/report.py +660 -5
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/sample.py +2 -2
- cloudanalyzer-0.3.0/ca/scan_match_debug.py +171 -0
- cloudanalyzer-0.3.0/ca/slam_debug.py +712 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/split.py +21 -9
- cloudanalyzer-0.3.0/ca/stats.py +62 -0
- cloudanalyzer-0.3.0/ca/tracking.py +242 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/trajectory.py +15 -8
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/web.py +815 -10
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0/cloudanalyzer.egg-info}/PKG-INFO +71 -11
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/SOURCES.txt +43 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/requires.txt +3 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer_cli/main.py +1821 -16
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/pyproject.toml +3 -0
- cloudanalyzer-0.3.0/tests/test_benchmark.py +558 -0
- cloudanalyzer-0.3.0/tests/test_bundle.py +415 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_check_scaffolding_process.py +2 -0
- cloudanalyzer-0.3.0/tests/test_check_suite.py +825 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_cli.py +773 -2
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_density_map.py +6 -0
- cloudanalyzer-0.3.0/tests/test_detection_evaluate.py +192 -0
- cloudanalyzer-0.3.0/tests/test_detection_tracking_report.py +197 -0
- cloudanalyzer-0.3.0/tests/test_geometry.py +495 -0
- cloudanalyzer-0.3.0/tests/test_geometry_splat_ellipsoid.py +275 -0
- cloudanalyzer-0.3.0/tests/test_history.py +366 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_info.py +11 -0
- cloudanalyzer-0.3.0/tests/test_io.py +120 -0
- cloudanalyzer-0.3.0/tests/test_kitti.py +150 -0
- cloudanalyzer-0.3.0/tests/test_loop_closure_report.py +195 -0
- cloudanalyzer-0.3.0/tests/test_map_evaluate.py +81 -0
- cloudanalyzer-0.3.0/tests/test_map_evaluate_core.py +81 -0
- cloudanalyzer-0.3.0/tests/test_mme.py +113 -0
- cloudanalyzer-0.3.0/tests/test_object_eval_iou.py +115 -0
- cloudanalyzer-0.3.0/tests/test_phase16_large_scale.py +76 -0
- cloudanalyzer-0.3.0/tests/test_phase17_vectorize.py +210 -0
- cloudanalyzer-0.3.0/tests/test_phase18_vectorize.py +150 -0
- cloudanalyzer-0.3.0/tests/test_posegraph.py +90 -0
- cloudanalyzer-0.3.0/tests/test_pr_comment.py +165 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_process_docs.py +3 -0
- cloudanalyzer-0.3.0/tests/test_public_object_eval_examples.py +58 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_registration.py +8 -1
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_report.py +103 -0
- cloudanalyzer-0.3.0/tests/test_scan_match_debug.py +43 -0
- cloudanalyzer-0.3.0/tests/test_slam_debug.py +326 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_stats.py +11 -0
- cloudanalyzer-0.3.0/tests/test_tracking_evaluate.py +182 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_trajectory.py +15 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web.py +174 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_sampling_evaluate.py +8 -2
- cloudanalyzer-0.1.0/ca/io.py +0 -40
- cloudanalyzer-0.1.0/ca/registration.py +0 -66
- cloudanalyzer-0.1.0/ca/stats.py +0 -62
- cloudanalyzer-0.1.0/tests/test_check_suite.py +0 -376
- cloudanalyzer-0.1.0/tests/test_io.py +0 -53
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/LICENSE +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/baseline_history.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/batch.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/compare.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/check_baseline_evolution.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/web_progressive_loading.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/web_sampling.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/web_trajectory_sampling.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/diff.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/common.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/pareto_promote.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/stability_window.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/threshold_guard.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/common.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/literal_profiles.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/object_sections.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/pipeline_overlays.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/common.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/pareto_frontier.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/severity_weighted.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/signature_cluster.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/common.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/nearest_neighbor.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/common.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/distance_shells.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/grid_tiles.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/spatial_shuffle.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/common.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/functional_voxel.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/object_random.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/pipeline_hybrid.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/common.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/distance_accumulator.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/turn_aware.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/uniform_stride.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/ground_evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/log.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/metrics.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/pareto.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/pipeline.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/plot.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/run_evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/view.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/visualization.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/dependency_links.txt +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/entry_points.txt +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/top_level.txt +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer_cli/__init__.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/setup.cfg +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/setup.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_align.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_baseline_history.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_batch.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_check_baseline_evolution_process.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_check_triage_process.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_compare.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_convert.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_crop.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_diff.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_downsample.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_filter.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_ground_evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_ground_evaluate_process.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_logging.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_merge.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_metrics.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_normals.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_output_json.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_pareto.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_pipeline.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_plot.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_public_benchmark_pack.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_run_batch.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_run_evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_sample.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_split.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_threshold.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_traj_batch.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_visualization.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_progressive_loading_core.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_progressive_loading_evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_progressive_loading_process.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_progressive_loading_strategies.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_sampling_core.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_sampling_process.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_sampling_strategies.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_trajectory_sampling_core.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_trajectory_sampling_evaluate.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_trajectory_sampling_process.py +0 -0
- {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_trajectory_sampling_strategies.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cloudanalyzer
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: CLI-first QA toolkit for point cloud, trajectory, and 3D perception outputs
|
|
5
5
|
Author: rsasaki0109
|
|
6
6
|
License-Expression: MIT
|
|
@@ -27,6 +27,9 @@ Requires-Dist: numpy>=1.24.0
|
|
|
27
27
|
Requires-Dist: typer>=0.9.0
|
|
28
28
|
Requires-Dist: matplotlib>=3.7.0
|
|
29
29
|
Requires-Dist: PyYAML>=6.0
|
|
30
|
+
Requires-Dist: laspy>=2.5.0
|
|
31
|
+
Requires-Dist: lazrs>=0.6.0
|
|
32
|
+
Requires-Dist: scipy>=1.6.0
|
|
30
33
|
Provides-Extra: dev
|
|
31
34
|
Requires-Dist: build>=1.2.2; extra == "dev"
|
|
32
35
|
Requires-Dist: mypy; extra == "dev"
|
|
@@ -39,7 +42,7 @@ Dynamic: license-file
|
|
|
39
42
|
|
|
40
43
|
AI-friendly CLI tool for point cloud analysis and evaluation.
|
|
41
44
|
|
|
42
|
-
For the full product overview
|
|
45
|
+
For the full product overview, demos, and tutorials, see the [repository root README](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/README.md).
|
|
43
46
|
|
|
44
47
|
## Install
|
|
45
48
|
|
|
@@ -68,24 +71,27 @@ python3 -m twine check dist/*
|
|
|
68
71
|
|
|
69
72
|
## Commands
|
|
70
73
|
|
|
71
|
-
There are **
|
|
74
|
+
There are **35** CLI subcommands (see `ca --help`). Summary:
|
|
72
75
|
|
|
73
76
|
### Analysis & Evaluation
|
|
74
77
|
|
|
75
78
|
| Command | Description |
|
|
76
79
|
|---|---|
|
|
77
80
|
| `ca compare` | Compare two point clouds with ICP/GICP registration |
|
|
81
|
+
| `ca scan-match-debug` | Debug one scan-to-map ICP/GICP attempt with before/after distances and artifacts |
|
|
78
82
|
| `ca diff` | Quick distance stats (no registration) |
|
|
79
83
|
| `ca evaluate` | F1, Chamfer, Hausdorff, AUC evaluation |
|
|
80
84
|
| `ca check` | Config-driven unified QA (`cloudanalyzer.yaml`) |
|
|
81
85
|
| `ca init-check` | Emit a starter `cloudanalyzer.yaml` profile |
|
|
86
|
+
| `ca detection-evaluate` | 3D object detection QA for axis-aligned boxes (mAP, precision/recall/F1, reports) |
|
|
82
87
|
| `ca ground-evaluate` | Ground segmentation QA (precision/recall/F1/IoU, optional gates) |
|
|
88
|
+
| `ca tracking-evaluate` | 3D multi-object tracking QA (MOTA, ID switches, precision/recall/F1, reports) |
|
|
83
89
|
| `ca traj-evaluate` | ATE, translational RPE, drift evaluation for trajectories |
|
|
84
90
|
| `ca traj-batch` | Batch trajectory benchmark with coverage, gate, and reports |
|
|
85
91
|
| `ca run-evaluate` | Combined map + trajectory QA for one run |
|
|
86
92
|
| `ca run-batch` | Combined map + trajectory benchmark across multiple runs |
|
|
87
|
-
| `ca info` | Point cloud metadata (points, BBox, centroid) |
|
|
88
|
-
| `ca stats` | Detailed statistics (density, spacing distribution) |
|
|
93
|
+
| `ca info` | Point cloud metadata (points, BBox, robust BBox, centroid) |
|
|
94
|
+
| `ca stats` | Detailed statistics (density, robust density, spacing distribution) |
|
|
89
95
|
| `ca batch` | Run info on all files in a directory |
|
|
90
96
|
|
|
91
97
|
### Processing
|
|
@@ -141,6 +147,20 @@ ca traj-evaluate estimated.csv reference.csv \
|
|
|
141
147
|
--report trajectory_report.html
|
|
142
148
|
# report also writes sibling trajectory overlay and error timeline PNGs
|
|
143
149
|
|
|
150
|
+
# Ground segmentation evaluation with report output
|
|
151
|
+
ca ground-evaluate estimated_ground.pcd estimated_nonground.pcd \
|
|
152
|
+
reference_ground.pcd reference_nonground.pcd \
|
|
153
|
+
--min-f1 0.9 --min-iou 0.8 --report ground_report.html
|
|
154
|
+
|
|
155
|
+
# 3D object detection evaluation from JSON box sequences
|
|
156
|
+
ca detection-evaluate estimated_detection.json reference_detection.json \
|
|
157
|
+
--iou-thresholds 0.25,0.5 --min-map 0.9 --report detection_report.html
|
|
158
|
+
|
|
159
|
+
# 3D multi-object tracking evaluation from JSON box sequences
|
|
160
|
+
ca tracking-evaluate estimated_tracking.json reference_tracking.json \
|
|
161
|
+
--iou-threshold 0.5 --min-mota 0.8 --max-id-switches 2 \
|
|
162
|
+
--report tracking_report.html
|
|
163
|
+
|
|
144
164
|
# Ignore constant initial translation offset
|
|
145
165
|
ca traj-evaluate estimated.csv reference.csv --align-origin
|
|
146
166
|
|
|
@@ -185,10 +205,10 @@ ca web estimated.pcd reference.pcd --heatmap
|
|
|
185
205
|
# Browser run viewer: map heatmap + trajectory overlay
|
|
186
206
|
ca web map.pcd map_ref.pcd --heatmap \
|
|
187
207
|
--trajectory traj.csv --trajectory-reference traj_ref.csv
|
|
188
|
-
# paired
|
|
189
|
-
# marker
|
|
190
|
-
#
|
|
191
|
-
# trajectory error timeline
|
|
208
|
+
# With paired trajectories, the viewer also highlights the worst ATE pose and worst RPE segment.
|
|
209
|
+
# Clicking a marker or segment shows the timestamp and error summary in the inspection panel.
|
|
210
|
+
# The camera also moves toward the selected location, and Reset View returns to the full scene.
|
|
211
|
+
# The trajectory error timeline is shown in the same viewer and stays synced with 3D point selections.
|
|
192
212
|
|
|
193
213
|
# === Compare ===
|
|
194
214
|
ca compare source.pcd target.pcd \
|
|
@@ -226,6 +246,11 @@ ca batch /path/to/results/ --evaluate reference.pcd --min-auc 0.95 --max-chamfer
|
|
|
226
246
|
ca density-map cloud.pcd -o density.png -r 1.0 -a z
|
|
227
247
|
```
|
|
228
248
|
|
|
249
|
+
`ca info` and `ca stats` also report p01-p99 robust extents and the number/ratio
|
|
250
|
+
of points outside that robust bounding box. These fields are useful for SLAM maps
|
|
251
|
+
where a small number of far outliers can dominate the ordinary axis-aligned
|
|
252
|
+
extent and hide whether the main map body is stable.
|
|
253
|
+
|
|
229
254
|
## Global Options
|
|
230
255
|
|
|
231
256
|
```bash
|
|
@@ -238,7 +263,7 @@ ca --quiet ... # Suppress non-error output
|
|
|
238
263
|
- `--output-json <path>` — Dump result as JSON file
|
|
239
264
|
- `--format-json` — Print JSON to stdout for piping
|
|
240
265
|
- `--plot <path>` — F1 curve plot (evaluate only)
|
|
241
|
-
- `--report <path>` — Markdown/HTML report (`batch`, `traj-evaluate`, `traj-batch`, `run-evaluate`, `run-batch`)
|
|
266
|
+
- `--report <path>` — Markdown/HTML report (`batch`, `detection-evaluate`, `ground-evaluate`, `tracking-evaluate`, `traj-evaluate`, `traj-batch`, `run-evaluate`, `run-batch`)
|
|
242
267
|
|
|
243
268
|
```bash
|
|
244
269
|
# Pipe JSON to jq
|
|
@@ -250,6 +275,40 @@ ca evaluate a.pcd b.pcd --format-json | jq '.auc'
|
|
|
250
275
|
|
|
251
276
|
Point cloud / trajectory / perception QA is usually driven by `ca check` and a `cloudanalyzer.yaml` config (see [docs/ci.md](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/docs/ci.md) and the [map quality gate tutorial](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/docs/tutorial-map-quality-gate.md)).
|
|
252
277
|
|
|
278
|
+
For object detection / tracking, the current stable contract is a JSON sequence:
|
|
279
|
+
|
|
280
|
+
```json
|
|
281
|
+
{
|
|
282
|
+
"frames": [
|
|
283
|
+
{
|
|
284
|
+
"frame_id": "000001",
|
|
285
|
+
"boxes": [
|
|
286
|
+
{
|
|
287
|
+
"label": "car",
|
|
288
|
+
"center": [0.0, 0.0, 0.0],
|
|
289
|
+
"size": [4.0, 1.8, 1.6],
|
|
290
|
+
"score": 0.97,
|
|
291
|
+
"track_id": "pred-17"
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
]
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
`ca detection-evaluate` uses `label`, `center`, `size`, and optional `score`; `ca tracking-evaluate` also requires `track_id`. Geometry is currently evaluated as **axis-aligned 3D boxes** and ignores yaw if present in the source JSON.
|
|
300
|
+
|
|
301
|
+
Checked-in public sample JSONs live under `demo_assets/public/rellis3d-frame-000001/object_eval/`:
|
|
302
|
+
|
|
303
|
+
- `detection_reference.json`
|
|
304
|
+
- `detection_estimated_good.json`
|
|
305
|
+
- `detection_estimated_regressed.json`
|
|
306
|
+
- `tracking_reference.json`
|
|
307
|
+
- `tracking_estimated_good.json`
|
|
308
|
+
- `tracking_estimated_regressed.json`
|
|
309
|
+
|
|
310
|
+
Those examples are generated from the public RELLIS-3D seed frame; the tracking files are deterministic synthetic 3-frame sequences seeded from that public frame so the contract can be demonstrated without bundling a full public MOT dataset.
|
|
311
|
+
|
|
253
312
|
In **this** GitHub repo, reusable workflows run the same gates in CI. Pin to a **tag or SHA** when calling them from another repository (not floating `@main`).
|
|
254
313
|
|
|
255
314
|
```yaml
|
|
@@ -300,4 +359,5 @@ result = split("large.pcd", "tiles/", grid_size=100.0)
|
|
|
300
359
|
|
|
301
360
|
- `.pcd` (Point Cloud Data)
|
|
302
361
|
- `.ply` (Polygon File Format)
|
|
303
|
-
- `.las` (LiDAR)
|
|
362
|
+
- `.las` / `.laz` (LiDAR)
|
|
363
|
+
- `.csv` (`x,y,z` or GLIM-style `x_m,y_m,z_m`)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
AI-friendly CLI tool for point cloud analysis and evaluation.
|
|
4
4
|
|
|
5
|
-
For the full product overview
|
|
5
|
+
For the full product overview, demos, and tutorials, see the [repository root README](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/README.md).
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -31,24 +31,27 @@ python3 -m twine check dist/*
|
|
|
31
31
|
|
|
32
32
|
## Commands
|
|
33
33
|
|
|
34
|
-
There are **
|
|
34
|
+
There are **35** CLI subcommands (see `ca --help`). Summary:
|
|
35
35
|
|
|
36
36
|
### Analysis & Evaluation
|
|
37
37
|
|
|
38
38
|
| Command | Description |
|
|
39
39
|
|---|---|
|
|
40
40
|
| `ca compare` | Compare two point clouds with ICP/GICP registration |
|
|
41
|
+
| `ca scan-match-debug` | Debug one scan-to-map ICP/GICP attempt with before/after distances and artifacts |
|
|
41
42
|
| `ca diff` | Quick distance stats (no registration) |
|
|
42
43
|
| `ca evaluate` | F1, Chamfer, Hausdorff, AUC evaluation |
|
|
43
44
|
| `ca check` | Config-driven unified QA (`cloudanalyzer.yaml`) |
|
|
44
45
|
| `ca init-check` | Emit a starter `cloudanalyzer.yaml` profile |
|
|
46
|
+
| `ca detection-evaluate` | 3D object detection QA for axis-aligned boxes (mAP, precision/recall/F1, reports) |
|
|
45
47
|
| `ca ground-evaluate` | Ground segmentation QA (precision/recall/F1/IoU, optional gates) |
|
|
48
|
+
| `ca tracking-evaluate` | 3D multi-object tracking QA (MOTA, ID switches, precision/recall/F1, reports) |
|
|
46
49
|
| `ca traj-evaluate` | ATE, translational RPE, drift evaluation for trajectories |
|
|
47
50
|
| `ca traj-batch` | Batch trajectory benchmark with coverage, gate, and reports |
|
|
48
51
|
| `ca run-evaluate` | Combined map + trajectory QA for one run |
|
|
49
52
|
| `ca run-batch` | Combined map + trajectory benchmark across multiple runs |
|
|
50
|
-
| `ca info` | Point cloud metadata (points, BBox, centroid) |
|
|
51
|
-
| `ca stats` | Detailed statistics (density, spacing distribution) |
|
|
53
|
+
| `ca info` | Point cloud metadata (points, BBox, robust BBox, centroid) |
|
|
54
|
+
| `ca stats` | Detailed statistics (density, robust density, spacing distribution) |
|
|
52
55
|
| `ca batch` | Run info on all files in a directory |
|
|
53
56
|
|
|
54
57
|
### Processing
|
|
@@ -104,6 +107,20 @@ ca traj-evaluate estimated.csv reference.csv \
|
|
|
104
107
|
--report trajectory_report.html
|
|
105
108
|
# report also writes sibling trajectory overlay and error timeline PNGs
|
|
106
109
|
|
|
110
|
+
# Ground segmentation evaluation with report output
|
|
111
|
+
ca ground-evaluate estimated_ground.pcd estimated_nonground.pcd \
|
|
112
|
+
reference_ground.pcd reference_nonground.pcd \
|
|
113
|
+
--min-f1 0.9 --min-iou 0.8 --report ground_report.html
|
|
114
|
+
|
|
115
|
+
# 3D object detection evaluation from JSON box sequences
|
|
116
|
+
ca detection-evaluate estimated_detection.json reference_detection.json \
|
|
117
|
+
--iou-thresholds 0.25,0.5 --min-map 0.9 --report detection_report.html
|
|
118
|
+
|
|
119
|
+
# 3D multi-object tracking evaluation from JSON box sequences
|
|
120
|
+
ca tracking-evaluate estimated_tracking.json reference_tracking.json \
|
|
121
|
+
--iou-threshold 0.5 --min-mota 0.8 --max-id-switches 2 \
|
|
122
|
+
--report tracking_report.html
|
|
123
|
+
|
|
107
124
|
# Ignore constant initial translation offset
|
|
108
125
|
ca traj-evaluate estimated.csv reference.csv --align-origin
|
|
109
126
|
|
|
@@ -148,10 +165,10 @@ ca web estimated.pcd reference.pcd --heatmap
|
|
|
148
165
|
# Browser run viewer: map heatmap + trajectory overlay
|
|
149
166
|
ca web map.pcd map_ref.pcd --heatmap \
|
|
150
167
|
--trajectory traj.csv --trajectory-reference traj_ref.csv
|
|
151
|
-
# paired
|
|
152
|
-
# marker
|
|
153
|
-
#
|
|
154
|
-
# trajectory error timeline
|
|
168
|
+
# With paired trajectories, the viewer also highlights the worst ATE pose and worst RPE segment.
|
|
169
|
+
# Clicking a marker or segment shows the timestamp and error summary in the inspection panel.
|
|
170
|
+
# The camera also moves toward the selected location, and Reset View returns to the full scene.
|
|
171
|
+
# The trajectory error timeline is shown in the same viewer and stays synced with 3D point selections.
|
|
155
172
|
|
|
156
173
|
# === Compare ===
|
|
157
174
|
ca compare source.pcd target.pcd \
|
|
@@ -189,6 +206,11 @@ ca batch /path/to/results/ --evaluate reference.pcd --min-auc 0.95 --max-chamfer
|
|
|
189
206
|
ca density-map cloud.pcd -o density.png -r 1.0 -a z
|
|
190
207
|
```
|
|
191
208
|
|
|
209
|
+
`ca info` and `ca stats` also report p01-p99 robust extents and the number/ratio
|
|
210
|
+
of points outside that robust bounding box. These fields are useful for SLAM maps
|
|
211
|
+
where a small number of far outliers can dominate the ordinary axis-aligned
|
|
212
|
+
extent and hide whether the main map body is stable.
|
|
213
|
+
|
|
192
214
|
## Global Options
|
|
193
215
|
|
|
194
216
|
```bash
|
|
@@ -201,7 +223,7 @@ ca --quiet ... # Suppress non-error output
|
|
|
201
223
|
- `--output-json <path>` — Dump result as JSON file
|
|
202
224
|
- `--format-json` — Print JSON to stdout for piping
|
|
203
225
|
- `--plot <path>` — F1 curve plot (evaluate only)
|
|
204
|
-
- `--report <path>` — Markdown/HTML report (`batch`, `traj-evaluate`, `traj-batch`, `run-evaluate`, `run-batch`)
|
|
226
|
+
- `--report <path>` — Markdown/HTML report (`batch`, `detection-evaluate`, `ground-evaluate`, `tracking-evaluate`, `traj-evaluate`, `traj-batch`, `run-evaluate`, `run-batch`)
|
|
205
227
|
|
|
206
228
|
```bash
|
|
207
229
|
# Pipe JSON to jq
|
|
@@ -213,6 +235,40 @@ ca evaluate a.pcd b.pcd --format-json | jq '.auc'
|
|
|
213
235
|
|
|
214
236
|
Point cloud / trajectory / perception QA is usually driven by `ca check` and a `cloudanalyzer.yaml` config (see [docs/ci.md](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/docs/ci.md) and the [map quality gate tutorial](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/docs/tutorial-map-quality-gate.md)).
|
|
215
237
|
|
|
238
|
+
For object detection / tracking, the current stable contract is a JSON sequence:
|
|
239
|
+
|
|
240
|
+
```json
|
|
241
|
+
{
|
|
242
|
+
"frames": [
|
|
243
|
+
{
|
|
244
|
+
"frame_id": "000001",
|
|
245
|
+
"boxes": [
|
|
246
|
+
{
|
|
247
|
+
"label": "car",
|
|
248
|
+
"center": [0.0, 0.0, 0.0],
|
|
249
|
+
"size": [4.0, 1.8, 1.6],
|
|
250
|
+
"score": 0.97,
|
|
251
|
+
"track_id": "pred-17"
|
|
252
|
+
}
|
|
253
|
+
]
|
|
254
|
+
}
|
|
255
|
+
]
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
`ca detection-evaluate` uses `label`, `center`, `size`, and optional `score`; `ca tracking-evaluate` also requires `track_id`. Geometry is currently evaluated as **axis-aligned 3D boxes** and ignores yaw if present in the source JSON.
|
|
260
|
+
|
|
261
|
+
Checked-in public sample JSONs live under `demo_assets/public/rellis3d-frame-000001/object_eval/`:
|
|
262
|
+
|
|
263
|
+
- `detection_reference.json`
|
|
264
|
+
- `detection_estimated_good.json`
|
|
265
|
+
- `detection_estimated_regressed.json`
|
|
266
|
+
- `tracking_reference.json`
|
|
267
|
+
- `tracking_estimated_good.json`
|
|
268
|
+
- `tracking_estimated_regressed.json`
|
|
269
|
+
|
|
270
|
+
Those examples are generated from the public RELLIS-3D seed frame; the tracking files are deterministic synthetic 3-frame sequences seeded from that public frame so the contract can be demonstrated without bundling a full public MOT dataset.
|
|
271
|
+
|
|
216
272
|
In **this** GitHub repo, reusable workflows run the same gates in CI. Pin to a **tag or SHA** when calling them from another repository (not floating `@main`).
|
|
217
273
|
|
|
218
274
|
```yaml
|
|
@@ -263,4 +319,5 @@ result = split("large.pcd", "tiles/", grid_size=100.0)
|
|
|
263
319
|
|
|
264
320
|
- `.pcd` (Point Cloud Data)
|
|
265
321
|
- `.ply` (Polygon File Format)
|
|
266
|
-
- `.las` (LiDAR)
|
|
322
|
+
- `.las` / `.laz` (LiDAR)
|
|
323
|
+
- `.csv` (`x,y,z` or GLIM-style `x_m,y_m,z_m`)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import open3d as o3d
|
|
4
4
|
|
|
5
|
-
from ca.io import load_point_cloud
|
|
5
|
+
from ca.io import load_point_cloud, save_point_cloud
|
|
6
6
|
from ca.registration import register
|
|
7
7
|
|
|
8
8
|
|
|
@@ -49,7 +49,7 @@ def align(
|
|
|
49
49
|
})
|
|
50
50
|
accumulated += transformed
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
save_point_cloud(output_path, accumulated)
|
|
53
53
|
|
|
54
54
|
return {
|
|
55
55
|
"output": output_path,
|