kinematic-tracker 15.0.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.
- kinematic_tracker-15.0.0/.bumpversion.toml +32 -0
- kinematic_tracker-15.0.0/.coveragerc +13 -0
- kinematic_tracker-15.0.0/.gitignore +12 -0
- kinematic_tracker-15.0.0/.gitlab-ci.yml +34 -0
- kinematic_tracker-15.0.0/CHANGELOG.md +111 -0
- kinematic_tracker-15.0.0/PKG-INFO +35 -0
- kinematic_tracker-15.0.0/README.md +21 -0
- kinematic_tracker-15.0.0/assets/reshot-icon-tracking-services-TWK37ZBV68.svg +32 -0
- kinematic_tracker-15.0.0/maintainers/README.md +38 -0
- kinematic_tracker-15.0.0/pyproject.toml +32 -0
- kinematic_tracker-15.0.0/ruff.toml +89 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/__init__.py +3 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/association.py +124 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/association_method.py +11 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/association_metric.py +11 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/g_iou_scores_aligned.py +108 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/match_driver_base.py +62 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/match_greedy.py +58 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/match_hungarian.py +72 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/metric_driver_base.py +70 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/metric_giou_aligned.py +89 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/association/metric_mahalanobis.py +97 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/core/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/core/creation_id.py +14 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/core/derivative_mixer.py +89 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/core/free_id.py +21 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/core/kalman_cv2_copy.py +19 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/core/loose_items.py +20 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/core/track_free_id.py +10 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_acc/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_acc/fundamental.py +18 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_acc/proc_cov.py +26 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_jerk/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_jerk/fundamental.py +23 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_jerk/proc_cov.py +41 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_pos/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_pos/fundamental.py +14 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_pos/proc_cov.py +20 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_vel/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_vel/fundamental.py +15 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/const_vel/proc_cov.py +34 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/matrices/factory.py +91 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/nd/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/nd/derivative_sorted.py +79 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/nd/gen_kf.py +99 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/nd/gen_x.py +139 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/nd/gen_xz.py +106 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/nd/precursors.py +54 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/nd/shape.py +64 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/proc_noise/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/proc_noise/kind.py +23 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/proc_noise/meta.py +63 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/proc_noise/nd_kkf_dia_noise.py +29 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/proc_noise/nd_kkf_proc_noise_factory.py +27 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/proc_noise/nd_kkf_white_noise_const.py +32 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/proc_noise/nd_kkf_white_noise_fd.py +134 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/tracker/__init__.py +0 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/tracker/kkf.py +90 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/tracker/track.py +77 -0
- kinematic_tracker-15.0.0/src/kinematic_tracker/tracker/tracker.py +357 -0
- kinematic_tracker-15.0.0/test/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/association/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/association/association/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/association/association/test_get_match_driver.py +17 -0
- kinematic_tracker-15.0.0/test/association/association/test_get_metric_driver.py +21 -0
- kinematic_tracker-15.0.0/test/association/association/test_repr.py +9 -0
- kinematic_tracker-15.0.0/test/association/association/test_set_ind_pos_size.py +16 -0
- kinematic_tracker-15.0.0/test/association/conftest.py +34 -0
- kinematic_tracker-15.0.0/test/association/g_iou_scores_aligned/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/association/g_iou_scores_aligned/conftest.py +48 -0
- kinematic_tracker-15.0.0/test/association/g_iou_scores_aligned/test_fixtures.py +22 -0
- kinematic_tracker-15.0.0/test/association/g_iou_scores_aligned/test_get_enclosing.py +22 -0
- kinematic_tracker-15.0.0/test/association/g_iou_scores_aligned/test_get_giou.py +22 -0
- kinematic_tracker-15.0.0/test/association/g_iou_scores_aligned/test_get_giou_diff.py +22 -0
- kinematic_tracker-15.0.0/test/association/g_iou_scores_aligned/test_get_intersection.py +21 -0
- kinematic_tracker-15.0.0/test/association/metric_driver_giou_aligned/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/association/metric_driver_giou_aligned/test_giou_aligned_dim_end.py +61 -0
- kinematic_tracker-15.0.0/test/association/metric_driver_giou_aligned/test_giou_aligned_minimum.py +41 -0
- kinematic_tracker-15.0.0/test/association/metric_driver_mahalanobis/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/association/metric_driver_mahalanobis/conftest.py +32 -0
- kinematic_tracker-15.0.0/test/association/metric_driver_mahalanobis/test_mahalanobis_driver.py +31 -0
- kinematic_tracker-15.0.0/test/association/test_match_driver_base.py +36 -0
- kinematic_tracker-15.0.0/test/association/test_match_driver_greedy.py +43 -0
- kinematic_tracker-15.0.0/test/association/test_match_driver_hungarian.py +43 -0
- kinematic_tracker-15.0.0/test/association/test_metric_driver_base.py +37 -0
- kinematic_tracker-15.0.0/test/association/test_metric_driver_greedy.py +37 -0
- kinematic_tracker-15.0.0/test/conftest.py +10 -0
- kinematic_tracker-15.0.0/test/core/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/core/derivative_mixer/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/core/derivative_mixer/conftest.py +11 -0
- kinematic_tracker-15.0.0/test/core/derivative_mixer/test_derivative_mixer.py +18 -0
- kinematic_tracker-15.0.0/test/core/derivative_mixer/test_dynamic.py +26 -0
- kinematic_tracker-15.0.0/test/core/derivative_mixer/test_exceptions.py +14 -0
- kinematic_tracker-15.0.0/test/core/test_creation_id.py +11 -0
- kinematic_tracker-15.0.0/test/core/test_free_id.py +12 -0
- kinematic_tracker-15.0.0/test/core/test_kalman_cv2_copy.py +15 -0
- kinematic_tracker-15.0.0/test/core/test_loose_items.py +18 -0
- kinematic_tracker-15.0.0/test/core/test_track_free_id.py +17 -0
- kinematic_tracker-15.0.0/test/matrices/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/matrices/const_acc/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/matrices/const_acc/test_fundamental.py +15 -0
- kinematic_tracker-15.0.0/test/matrices/const_acc/test_proc_cov.py +34 -0
- kinematic_tracker-15.0.0/test/matrices/const_jerk/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/matrices/const_jerk/test_fundamental.py +15 -0
- kinematic_tracker-15.0.0/test/matrices/const_jerk/test_proc_cov.py +37 -0
- kinematic_tracker-15.0.0/test/matrices/const_pos/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/matrices/const_pos/test_fundamental.py +13 -0
- kinematic_tracker-15.0.0/test/matrices/const_pos/test_proc_cov.py +29 -0
- kinematic_tracker-15.0.0/test/matrices/const_vel/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/matrices/const_vel/test_fundamental.py +13 -0
- kinematic_tracker-15.0.0/test/matrices/const_vel/test_proc_cov.py +30 -0
- kinematic_tracker-15.0.0/test/matrices/factory/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/matrices/factory/conftest.py +6 -0
- kinematic_tracker-15.0.0/test/matrices/factory/test_compute_f_mat_and_q_mat.py +29 -0
- kinematic_tracker-15.0.0/test/matrices/factory/test_different_models.py +45 -0
- kinematic_tracker-15.0.0/test/nd/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/derivative_sorted/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/derivative_sorted/cuboid_31/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/derivative_sorted/cuboid_31/conftest.py +17 -0
- kinematic_tracker-15.0.0/test/nd/derivative_sorted/cuboid_31/test_der_sorted_31.py +58 -0
- kinematic_tracker-15.0.0/test/nd/derivative_sorted/cuboid_4/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/derivative_sorted/cuboid_4/conftest.py +17 -0
- kinematic_tracker-15.0.0/test/nd/derivative_sorted/cuboid_4/test_der_sorted_4.py +55 -0
- kinematic_tracker-15.0.0/test/nd/derivative_sorted/test_derivative_sorted_basics.py +11 -0
- kinematic_tracker-15.0.0/test/nd/gen_kf/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/gen_kf/conftest.py +54 -0
- kinematic_tracker-15.0.0/test/nd/gen_kf/test_get_kf.py +36 -0
- kinematic_tracker-15.0.0/test/nd/gen_kf/test_kalman_filter_correct.py +46 -0
- kinematic_tracker-15.0.0/test/nd/gen_kf/test_kalman_filter_predict.py +25 -0
- kinematic_tracker-15.0.0/test/nd/gen_x/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/gen_x/conftest.py +16 -0
- kinematic_tracker-15.0.0/test/nd/gen_x/test_nd_kkf_get_f_mat.py +32 -0
- kinematic_tracker-15.0.0/test/nd/gen_x/test_nd_kkf_get_q_mat.py +42 -0
- kinematic_tracker-15.0.0/test/nd/gen_x/test_nd_kkf_mat_gen_x.py +25 -0
- kinematic_tracker-15.0.0/test/nd/gen_x/test_nd_kkf_mat_gen_x_set_orders.py +23 -0
- kinematic_tracker-15.0.0/test/nd/gen_z/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/gen_z/conftest.py +16 -0
- kinematic_tracker-15.0.0/test/nd/gen_z/test_nd_kkf_mat_gen_xz.py +41 -0
- kinematic_tracker-15.0.0/test/nd/gen_z/test_nd_kkf_mat_gen_xz_fill_mat_xx.py +52 -0
- kinematic_tracker-15.0.0/test/nd/gen_z/test_nd_kkf_mat_gen_xz_fill_vec_x.py +26 -0
- kinematic_tracker-15.0.0/test/nd/precursors/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/precursors/conftest.py +10 -0
- kinematic_tracker-15.0.0/test/nd/precursors/test_nd_kkf_pre_compute.py +23 -0
- kinematic_tracker-15.0.0/test/nd/precursors/test_nd_kkf_pre_set_orders.py +23 -0
- kinematic_tracker-15.0.0/test/nd/precursors/test_nd_kkf_precursors.py +23 -0
- kinematic_tracker-15.0.0/test/nd/shape/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/nd/shape/conftest.py +11 -0
- kinematic_tracker-15.0.0/test/nd/shape/test_nd_kkf_shape_get_kf.py +54 -0
- kinematic_tracker-15.0.0/test/nd/shape/test_nd_kkf_shape_getters.py +17 -0
- kinematic_tracker-15.0.0/test/nd/shape/test_nd_kkf_shape_init.py +21 -0
- kinematic_tracker-15.0.0/test/proc_noise/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/proc_noise/dia_noise/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/proc_noise/dia_noise/conftest.py +17 -0
- kinematic_tracker-15.0.0/test/proc_noise/dia_noise/test_fill_proc_cov_dia_noise.py +15 -0
- kinematic_tracker-15.0.0/test/proc_noise/dia_noise/test_nd_kkf_dia_noise_repr.py +8 -0
- kinematic_tracker-15.0.0/test/proc_noise/dia_noise/test_save_values_dia_noise.py +10 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_proc_noise_factory/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_proc_noise_factory/conftest.py +18 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_proc_noise_factory/test_nd_kkf_proc_noise_factory.py +31 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_proc_noise_factory/test_nd_kkf_proc_noise_factory_const.py +17 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_const/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_const/conftest.py +23 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_const/test_fill_proc_cov_const.py +27 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_const/test_nd_kkf_white_noise_const_repr.py +8 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_const/test_save_values_const.py +10 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_fd/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_fd/conftest.py +26 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_fd/test_compute_dyn_factors.py +29 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_fd/test_fill_white_noise.py +32 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_fd/test_gather_last_vars.py +14 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_fd/test_nd_kkf_proc_noise_repr.py +16 -0
- kinematic_tracker-15.0.0/test/proc_noise/nd_kkf_white_noise_fd/test_white_noise_fd_save_values.py +13 -0
- kinematic_tracker-15.0.0/test/proc_noise/test_proc_noise_meta.py +13 -0
- kinematic_tracker-15.0.0/test/proc_noise/test_proc_noise_meta_factory.py +12 -0
- kinematic_tracker-15.0.0/test/tracker/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tracker/kkf/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tracker/kkf/conftest.py +47 -0
- kinematic_tracker-15.0.0/test/tracker/kkf/test_deepcopy.py +14 -0
- kinematic_tracker-15.0.0/test/tracker/kkf/test_nd_kkf_correct.py +31 -0
- kinematic_tracker-15.0.0/test/tracker/kkf/test_nd_kkf_predict.py +64 -0
- kinematic_tracker-15.0.0/test/tracker/kkf/test_nd_kkf_repr.py +13 -0
- kinematic_tracker-15.0.0/test/tracker/track/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tracker/track/conftest.py +54 -0
- kinematic_tracker-15.0.0/test/tracker/track/test_nd_kkf_track_bumps.py +25 -0
- kinematic_tracker-15.0.0/test/tracker/track/test_nd_kkf_track_repr.py +16 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/conftest.py +28 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_nd_kkf_tracker_init_repr.py +32 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_nd_kkf_tracker_internal_check.py +20 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_set_association_metric.py +26 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_set_association_threshold.py +15 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_set_ind_pos_size.py +15 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_set_measurement_cov.py +25 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_set_measurement_std_dev.py +86 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_advance.py +18 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_correct_associated.py +14 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_correct_associated1.py +45 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_get_filters.py +9 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_get_match.py +25 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_get_track.py +20 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_predict_all.py +11 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_predict_all1.py +48 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_promote_clutter.py +9 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_promote_clutter1.py +10 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_upd_for_loose_reports.py +44 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_upd_for_loose_reports1.py +13 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_upd_for_loose_tracks.py +9 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_upd_for_loose_tracks1.py +10 -0
- kinematic_tracker-15.0.0/test/tracker/tracker/test_tracker_upd_for_loose_tracks2.py +21 -0
- kinematic_tracker-15.0.0/test/tutorials/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tutorials/axes_aligned/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tutorials/axes_aligned/detections.csv +505 -0
- kinematic_tracker-15.0.0/test/tutorials/axes_aligned/test_axes_aligned.py +34 -0
- kinematic_tracker-15.0.0/test/tutorials/cuboid_with_yaw/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tutorials/cuboid_with_yaw/annotation_task_1_757.csv +505 -0
- kinematic_tracker-15.0.0/test/tutorials/cuboid_with_yaw/test_cuboids_with_yaw.py +60 -0
- kinematic_tracker-15.0.0/test/tutorials/quality_of_association_aligned/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tutorials/quality_of_association_aligned/detections.csv +505 -0
- kinematic_tracker-15.0.0/test/tutorials/quality_of_association_aligned/test_association_quality_aligned.py +40 -0
- kinematic_tracker-15.0.0/test/tutorials/quality_of_association_yaw/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/tutorials/quality_of_association_yaw/annotation_task_1_757.csv +505 -0
- kinematic_tracker-15.0.0/test/tutorials/quality_of_association_yaw/test_association_quality_yaw.py +63 -0
- kinematic_tracker-15.0.0/test/with_ext_data/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/with_ext_data/conftest.py +94 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/conftest.py +17 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/share/config_pipeline.yaml +22 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/share/fusion-lab-detections-args-sensor-1.json +19 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/share/fusion-lab-detections-sensor-1.csv +61 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/share/fusion-lab-motion-args-sensor-1.json +15 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/share/fusion-lab-motion-sensor-1.csv +61 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/share/fusion-lab-reference.json +27 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/test_almost_collision_matching_std_dev.py +24 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/almost_collision/test_almost_collision_wrong_std_dev.py +25 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/conftest.py +40 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/share/config_pipeline.yaml +21 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/share/fusion-lab-detections-args-sensor-1.json +19 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/share/fusion-lab-detections-sensor-1.csv +31 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/share/fusion-lab-motion-args-sensor-1.json +15 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/share/fusion-lab-motion-sensor-1.csv +31 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/share/fusion-lab-reference.json +17 -0
- kinematic_tracker-15.0.0/test/with_ext_data/fusion_lab/all_detections/static_object/test_static_object.py +17 -0
- kinematic_tracker-15.0.0/test/with_ext_data/nu_scenes/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/with_ext_data/nu_scenes/conftest.py +18 -0
- kinematic_tracker-15.0.0/test/with_ext_data/nu_scenes/nu_1_757/__init__.py +0 -0
- kinematic_tracker-15.0.0/test/with_ext_data/nu_scenes/nu_1_757/share/annotation_task_1_757.csv +505 -0
- kinematic_tracker-15.0.0/test/with_ext_data/nu_scenes/nu_1_757/share/config_pipeline.yaml +21 -0
- kinematic_tracker-15.0.0/test/with_ext_data/nu_scenes/nu_1_757/share/fusion-lab-detections-sensor-1.csv +505 -0
- kinematic_tracker-15.0.0/test/with_ext_data/nu_scenes/nu_1_757/test_nu_scenes_coo3_greedy.py +21 -0
- kinematic_tracker-15.0.0/test/with_ext_data/nu_scenes/nu_1_757/test_nu_scenes_coo3_hungarian.py +21 -0
- kinematic_tracker-15.0.0/uv.lock +1072 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
[tool.bumpversion]
|
|
2
|
+
current_version = "15.0.0"
|
|
3
|
+
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
|
|
4
|
+
serialize = ["{major}.{minor}.{patch}"]
|
|
5
|
+
search = "{current_version}"
|
|
6
|
+
replace = "{new_version}"
|
|
7
|
+
regex = false
|
|
8
|
+
ignore_missing_version = false
|
|
9
|
+
ignore_missing_files = false
|
|
10
|
+
tag = false
|
|
11
|
+
sign_tags = false
|
|
12
|
+
tag_name = "{new_version}"
|
|
13
|
+
tag_message = "Bump version: {current_version} → {new_version}"
|
|
14
|
+
allow_dirty = false
|
|
15
|
+
commit = true
|
|
16
|
+
message = "Bump version: {current_version} → {new_version}"
|
|
17
|
+
moveable_tags = []
|
|
18
|
+
commit_args = "--no-verify"
|
|
19
|
+
setup_hooks = []
|
|
20
|
+
pre_commit_hooks = ["uv lock --native-tls", "git add uv.lock"]
|
|
21
|
+
post_commit_hooks = []
|
|
22
|
+
|
|
23
|
+
[[tool.bumpversion.files]]
|
|
24
|
+
filename = "pyproject.toml"
|
|
25
|
+
search = "version = \"{current_version}\""
|
|
26
|
+
replace = "version = \"{new_version}\""
|
|
27
|
+
|
|
28
|
+
[[tool.bumpversion.files]]
|
|
29
|
+
filename = "src/kinematic_tracker/__init__.py"
|
|
30
|
+
search = "__version__ = '{current_version}'"
|
|
31
|
+
replace = "__version__ = '{new_version}'"
|
|
32
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# GitLab configuration script to run two jobs: unit test and lint check
|
|
2
|
+
# for projects using *opencv-python* and managed by *uv* package manager.
|
|
3
|
+
|
|
4
|
+
default:
|
|
5
|
+
image: python:3.10
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
stages: # List of stages for jobs, and their order of execution
|
|
9
|
+
- test
|
|
10
|
+
|
|
11
|
+
unit-test-job: # This job runs in the test stage.
|
|
12
|
+
stage: test # It only starts when the job in the build stage completes successfully.
|
|
13
|
+
script:
|
|
14
|
+
- apt update
|
|
15
|
+
- apt install -y libgl1 xvfb
|
|
16
|
+
- pip install uv
|
|
17
|
+
- export UV_INDEX_GITLAB_USERNAME=gitlab-ci-token
|
|
18
|
+
- export UV_INDEX_GITLAB_PASSWORD=${CI_JOB_TOKEN}
|
|
19
|
+
- uv sync
|
|
20
|
+
- uv pip install -e .
|
|
21
|
+
- uv run pytest -s test --cov --junitxml=report.xml
|
|
22
|
+
artifacts:
|
|
23
|
+
when: always
|
|
24
|
+
reports:
|
|
25
|
+
junit: report.xml
|
|
26
|
+
coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
lint-test-job: # This job also runs in the test stage.
|
|
30
|
+
stage: test # It can run at the same time as unit-test-job (in parallel).
|
|
31
|
+
script:
|
|
32
|
+
- pip install ruff
|
|
33
|
+
- ruff check
|
|
34
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# 14.2.0
|
|
2
|
+
|
|
3
|
+
- Using the package `binary-classification-ratios`.
|
|
4
|
+
|
|
5
|
+
# 14.1.2
|
|
6
|
+
|
|
7
|
+
- Compatibility with nuScenes @ `evaluation-against-nuscenes` (Python >=3.10 & NumPy >=1.26.4).
|
|
8
|
+
|
|
9
|
+
# 14.1.0
|
|
10
|
+
|
|
11
|
+
- Added an association-threshold setter in `NdKkfTracker`.
|
|
12
|
+
|
|
13
|
+
# 14.0.1
|
|
14
|
+
|
|
15
|
+
- Corrected the example of tracking with yaw angle affected by the version 14.
|
|
16
|
+
- Made the example of tracking association quality more robust.
|
|
17
|
+
|
|
18
|
+
# 14.0.0
|
|
19
|
+
|
|
20
|
+
This version bump is major because it breaks a silent convention on the distribution
|
|
21
|
+
of variables in the measurement vector. In previous versions, the measurement vector
|
|
22
|
+
has been distributed as follows:
|
|
23
|
+
|
|
24
|
+
$$z^T = (p_x, p_y, p_z, s_x, s_y, s_z, ...)$$
|
|
25
|
+
|
|
26
|
+
In this version, the distribution of variables in the measurement vector is as follows:
|
|
27
|
+
|
|
28
|
+
$$z^T = (p_x, p_y, p_z, ..., s_x, s_y, s_z)$$
|
|
29
|
+
|
|
30
|
+
where the position variables are listed first, followed by the size variables.
|
|
31
|
+
This change makes the tracker more convenient to use with ASAM OpenLabel frames.
|
|
32
|
+
|
|
33
|
+
- Possibility to adjust the distribution of variables in the measurement vector.
|
|
34
|
+
- Added setter `NdKkfTracker.set_ind_pos_size`.
|
|
35
|
+
|
|
36
|
+
# 13.0.1
|
|
37
|
+
|
|
38
|
+
- Proofread the README file.
|
|
39
|
+
- Renamed `gen_z` --> `gen_xz` in tracker.
|
|
40
|
+
|
|
41
|
+
# 12.1.0
|
|
42
|
+
|
|
43
|
+
- Remove the unfinished `GIoUWithYaw` class.
|
|
44
|
+
- Add all non-trivial docstrings.
|
|
45
|
+
- Eliminate the flip in Greedy matching.
|
|
46
|
+
- Eliminate unused buffer in the Mahalanobis metric driver.
|
|
47
|
+
- Remove the obsolete method `NdKkfTrack.get_det_cov()`.
|
|
48
|
+
|
|
49
|
+
# 12.0.0
|
|
50
|
+
|
|
51
|
+
- All dependencies are public from PyPI.
|
|
52
|
+
|
|
53
|
+
# 11.1.2
|
|
54
|
+
|
|
55
|
+
- Add docstrings in `nd` modules
|
|
56
|
+
- Use documented version of the kinematic-matrix package (viulib-kinematic-matrices>=0.3.0)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# 11.1.0
|
|
60
|
+
|
|
61
|
+
- Allow both `int` and `np.int64` to be used as time stamps in the `Tracker.advance` method.
|
|
62
|
+
- Add three tutorial examples:
|
|
63
|
+
- tracking of cuboids aligned with Cartesian axes
|
|
64
|
+
- tracking of cuboids with yaw angle
|
|
65
|
+
- tracking and classifying the association quality
|
|
66
|
+
|
|
67
|
+
# 11.0.0
|
|
68
|
+
|
|
69
|
+
- Introduced the (bipartite) matching drivers:
|
|
70
|
+
- Maximal shape of the metric is rectangular
|
|
71
|
+
- The returned match is in fixed-size numpy arrays which stay the same across time stamps
|
|
72
|
+
- Auxiliary buffers are used instead of temporary (scrap) RAM
|
|
73
|
+
- Remove the calculation of threshold from the association probability
|
|
74
|
+
|
|
75
|
+
# 10.4.0
|
|
76
|
+
|
|
77
|
+
- Added nuScenes example
|
|
78
|
+
- Refactored the metric drivers:
|
|
79
|
+
- Maximal shape of the metric is rectangular
|
|
80
|
+
- Metric is computed in a chunk of memory at the beginning of the rectangular buffer
|
|
81
|
+
- The returned matrix is rectangular, local and shares memory with the buffer
|
|
82
|
+
- Removed O(N) buffers for $Hx$ and $HPH^T$
|
|
83
|
+
- The order of indices is (reports, targets) resulting in wide matrices most of the time
|
|
84
|
+
- Auxiliary buffers are used instead of temporary (scrap) RAM
|
|
85
|
+
|
|
86
|
+
# 10.3.0
|
|
87
|
+
|
|
88
|
+
- Add ClassificationRatios helper class
|
|
89
|
+
- Add fusion-lab example of two almost colliding cuboids
|
|
90
|
+
- Add padding to the Hungarian matching
|
|
91
|
+
- Association-quality- and Cartesian-quality helper classes in unit tests
|
|
92
|
+
|
|
93
|
+
# 10.2.0
|
|
94
|
+
|
|
95
|
+
- Add AssociationQuality classifier
|
|
96
|
+
- Change default association threshold from 0.9 --> 0.25
|
|
97
|
+
- Fix finite-diff adaptive noise to multiply with the variance factor
|
|
98
|
+
- Add setter NdKkfTracker.set_measurement_std_dev(...)
|
|
99
|
+
|
|
100
|
+
# 10.0.0
|
|
101
|
+
|
|
102
|
+
- Removed GatherAtStart in favor of DerivativeSorted
|
|
103
|
+
|
|
104
|
+
# 2.0.2
|
|
105
|
+
|
|
106
|
+
- Started GIoU with yaw
|
|
107
|
+
|
|
108
|
+
# 1.1.2
|
|
109
|
+
|
|
110
|
+
- Initial release
|
|
111
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: kinematic-tracker
|
|
3
|
+
Version: 15.0.0
|
|
4
|
+
Summary: Tracker using kinematic Kalman filters.
|
|
5
|
+
Author-email: Peter Koval <pkoval@vicomtech.org>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Requires-Python: >=3.10
|
|
8
|
+
Requires-Dist: association-quality-clavia>=0.1.0
|
|
9
|
+
Requires-Dist: binary-classification-ratios>=0.3.0
|
|
10
|
+
Requires-Dist: numpy>=1.26.4
|
|
11
|
+
Requires-Dist: opencv-python>=4.11.0.86
|
|
12
|
+
Requires-Dist: scipy>=1.15.3
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
|
|
15
|
+
# Kinematic Tracker
|
|
16
|
+
|
|
17
|
+
This tracker is based on kinematic Kalman filters. The system state can consist of multiple components,
|
|
18
|
+
each defined by its kinematic order and dimensionality. The tracker supports various process noise models,
|
|
19
|
+
including a custom adaptive process noise model based on a white-noise assumption.
|
|
20
|
+
|
|
21
|
+
## Tutorial Examples
|
|
22
|
+
|
|
23
|
+
Simple, reusable examples are available in the `test/tutorials` folder.
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
|
|
27
|
+
After installing the `uv` package manager, run:
|
|
28
|
+
|
|
29
|
+
```shell
|
|
30
|
+
uv sync --no-dev
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Development Installation
|
|
34
|
+
|
|
35
|
+
For development setup instructions, please refer to the maintainers' README.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Kinematic Tracker
|
|
2
|
+
|
|
3
|
+
This tracker is based on kinematic Kalman filters. The system state can consist of multiple components,
|
|
4
|
+
each defined by its kinematic order and dimensionality. The tracker supports various process noise models,
|
|
5
|
+
including a custom adaptive process noise model based on a white-noise assumption.
|
|
6
|
+
|
|
7
|
+
## Tutorial Examples
|
|
8
|
+
|
|
9
|
+
Simple, reusable examples are available in the `test/tutorials` folder.
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
After installing the `uv` package manager, run:
|
|
14
|
+
|
|
15
|
+
```shell
|
|
16
|
+
uv sync --no-dev
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Development Installation
|
|
20
|
+
|
|
21
|
+
For development setup instructions, please refer to the maintainers' README.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
3
|
+
<!-- Creator: CorelDRAW -->
|
|
4
|
+
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="2048px" height="2048px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
|
|
5
|
+
viewBox="0 0 2048 2048"
|
|
6
|
+
xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
7
|
+
<defs>
|
|
8
|
+
<style type="text/css">
|
|
9
|
+
<![CDATA[
|
|
10
|
+
.fil2 {fill:none}
|
|
11
|
+
.fil0 {fill:#424242}
|
|
12
|
+
.fil1 {fill:#424242;fill-rule:nonzero}
|
|
13
|
+
]]>
|
|
14
|
+
</style>
|
|
15
|
+
</defs>
|
|
16
|
+
<g id="Layer_x0020_1">
|
|
17
|
+
<metadata id="CorelCorpID_0Corel-Layer"/>
|
|
18
|
+
<g id="_324608240">
|
|
19
|
+
<g>
|
|
20
|
+
<path id="_324608792" class="fil0" d="M1094.26 1026.38l132.912 132.912c18.7394,18.7382 18.7394,49.1374 0,67.8756 -18.7382,18.7394 -49.1374,18.7394 -67.8756,0l-132.912 -132.912c-18.7394,-18.7382 -18.7394,-49.1374 0,-67.8756 18.7382,-18.7394 49.1374,-18.7394 67.8756,0z"/>
|
|
21
|
+
<path id="_324608168" class="fil1" d="M1130.76 1210.45l82.6619 -82.6619c14.1662,-14.1638 32.8004,-21.248 51.4087,-21.248 18.6095,0 37.2425,7.08426 51.4063,21.248l454.513 454.513c14.1638,14.1638 21.248,32.7992 21.248,51.4075 0,18.6071 -7.08426,37.2425 -21.248,51.4063l-85.6394 85.6394c-14.165,14.165 -32.7992,21.248 -51.4063,21.248 -18.6083,0 -37.2437,-7.08426 -51.4075,-21.248l-451.537 -451.536c-14.9823,-14.9847 -22.4752,-34.6973 -22.4752,-54.3851 0,-19.6866 7.49292,-39.4016 22.4752,-54.3839z"/>
|
|
22
|
+
<path id="_324608552" class="fil0" d="M740.304 255.999c267.475,0 484.304,216.829 484.304,484.304 0,267.475 -216.829,484.304 -484.304,484.304 -267.475,0 -484.304,-216.829 -484.304,-484.304 0,-267.475 216.829,-484.304 484.304,-484.304zm0 96.0001c214.455,0 388.304,173.849 388.304,388.304 0,214.455 -173.849,388.304 -388.304,388.304 -214.455,0 -388.304,-173.849 -388.304,-388.304 0,-214.455 173.849,-388.304 388.304,-388.304z"/>
|
|
23
|
+
</g>
|
|
24
|
+
<g>
|
|
25
|
+
<path id="_324608672" class="fil1" d="M613.621 465.793l253.856 0c13.2543,0 24,10.7457 24,24 0,2.98701 -0.548032,5.84646 -1.54488,8.48386l-22.4516 67.8225 -22.7811 -7.50001 22.7835 7.54253c-3.38859,10.2366 -13.0075,16.6595 -23.2512,16.4575l-208.322 0c-10.9795,0 -20.2382,-7.37363 -23.0918,-17.439l-22.454 -67.8296 -0.0153543 0.00472441c-4.16457,-12.5835 2.65866,-26.1626 15.2421,-30.3272 2.66575,-0.882284 5.3752,-1.26969 8.03032,-1.21536z"/>
|
|
26
|
+
<path id="_324608600" class="fil1" d="M897.845 815.115l-314.668 0c-1.89803,0.0318898 -3.82796,-0.161811 -5.76024,-0.603544 -12.9213,-2.95276 -21.0012,-15.8232 -18.0484,-28.7445l23.3965 5.34804 -23.3433 -5.34331 52.78 -230.916c1.79882,-11.4756 11.7284,-20.2559 23.7083,-20.2559l208.384 0c11.1142,-0.198425 21.2268,7.38662 23.8016,18.652l-0.0519685 0.011811 52.7776 230.902c0.66378,2.2004 1.02402,4.53307 1.02402,6.94961 0,13.2543 -10.7457,24 -24,24z"/>
|
|
27
|
+
<path id="_324608288" class="fil1" d="M771.393 798.194c0,-17.1697 -13.9205,-31.0902 -31.0902,-31.0902 -17.1709,0 -31.0902,13.9205 -31.0902,31.0902l31.0902 289.805 31.0902 -289.805z"/>
|
|
28
|
+
</g>
|
|
29
|
+
</g>
|
|
30
|
+
</g>
|
|
31
|
+
<rect class="fil2" width="2048" height="2048"/>
|
|
32
|
+
</svg>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Development install
|
|
2
|
+
|
|
3
|
+
```shell
|
|
4
|
+
uv sync
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
## Add dependencies
|
|
8
|
+
|
|
9
|
+
Regular or development dependencies are added as following
|
|
10
|
+
```shell
|
|
11
|
+
uv add numpy
|
|
12
|
+
uv add pytest --dev
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Run tests
|
|
16
|
+
|
|
17
|
+
```shell
|
|
18
|
+
uv run pytest
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Formatting and checking
|
|
22
|
+
|
|
23
|
+
```shell
|
|
24
|
+
ruff format
|
|
25
|
+
ruff check --fix
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Bump version number
|
|
29
|
+
|
|
30
|
+
```shell
|
|
31
|
+
bump-my-version bump patch
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Upgrading the dependencies
|
|
35
|
+
|
|
36
|
+
```shell
|
|
37
|
+
uv lock -U
|
|
38
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "kinematic-tracker"
|
|
3
|
+
version = "15.0.0"
|
|
4
|
+
description = "Tracker using kinematic Kalman filters."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
dependencies = [
|
|
8
|
+
"association-quality-clavia>=0.1.0",
|
|
9
|
+
"binary-classification-ratios>=0.3.0",
|
|
10
|
+
"numpy>=1.26.4", # important for compatibility with nuScenes (!)
|
|
11
|
+
"opencv-python>=4.11.0.86",
|
|
12
|
+
"scipy>=1.15.3",
|
|
13
|
+
]
|
|
14
|
+
license = 'MIT'
|
|
15
|
+
authors = [{name = 'Peter Koval', email = 'pkoval@vicomtech.org'}]
|
|
16
|
+
|
|
17
|
+
[dependency-groups]
|
|
18
|
+
dev = [
|
|
19
|
+
"pytest>=8.4.1",
|
|
20
|
+
"pytest-cov>=6.2.1",
|
|
21
|
+
"pytest-mock>=3.14.1",
|
|
22
|
+
"ruff>=0.12.8",
|
|
23
|
+
"bump-my-version>=1.2.1",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
[tool.uv]
|
|
27
|
+
package = true
|
|
28
|
+
|
|
29
|
+
[build-system]
|
|
30
|
+
requires = ["hatchling >= 1.26"]
|
|
31
|
+
build-backend = "hatchling.build"
|
|
32
|
+
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Exclude a variety of commonly ignored directories.
|
|
2
|
+
exclude = [
|
|
3
|
+
".bzr",
|
|
4
|
+
".direnv",
|
|
5
|
+
".eggs",
|
|
6
|
+
".git",
|
|
7
|
+
".git-rewrite",
|
|
8
|
+
".hg",
|
|
9
|
+
".ipynb_checkpoints",
|
|
10
|
+
".mypy_cache",
|
|
11
|
+
".nox",
|
|
12
|
+
".pants.d",
|
|
13
|
+
".pyenv",
|
|
14
|
+
".pytest_cache",
|
|
15
|
+
".pytype",
|
|
16
|
+
".ruff_cache",
|
|
17
|
+
".svn",
|
|
18
|
+
".tox",
|
|
19
|
+
".venv",
|
|
20
|
+
".vscode",
|
|
21
|
+
"__pypackages__",
|
|
22
|
+
"_build",
|
|
23
|
+
"buck-out",
|
|
24
|
+
"build",
|
|
25
|
+
"dist",
|
|
26
|
+
"node_modules",
|
|
27
|
+
"site-packages",
|
|
28
|
+
"venv",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
# Same as Black.
|
|
32
|
+
line-length = 100
|
|
33
|
+
indent-width = 4
|
|
34
|
+
|
|
35
|
+
target-version = "py313"
|
|
36
|
+
|
|
37
|
+
[lint]
|
|
38
|
+
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
|
|
39
|
+
# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
|
|
40
|
+
# McCabe complexity (`C901`) by default.
|
|
41
|
+
select = ["E4", "E7", "E9", "F", "I"]
|
|
42
|
+
ignore = []
|
|
43
|
+
|
|
44
|
+
# Allow fix for all enabled rules (when `--fix`) is provided.
|
|
45
|
+
fixable = ["ALL"]
|
|
46
|
+
unfixable = []
|
|
47
|
+
|
|
48
|
+
# Allow unused variables when underscore-prefixed.
|
|
49
|
+
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
|
|
50
|
+
|
|
51
|
+
[lint.isort]
|
|
52
|
+
default-section = "third-party"
|
|
53
|
+
lines-after-imports = 2
|
|
54
|
+
split-on-trailing-comma=false
|
|
55
|
+
lines-between-types = 1 # This adds 1 empty line between import sections
|
|
56
|
+
|
|
57
|
+
[lint.flake8-quotes]
|
|
58
|
+
inline-quotes = "single"
|
|
59
|
+
|
|
60
|
+
[format]
|
|
61
|
+
# Like Black, use double quotes for strings.
|
|
62
|
+
quote-style = "single"
|
|
63
|
+
|
|
64
|
+
# Like Black, indent with spaces, rather than tabs.
|
|
65
|
+
indent-style = "space"
|
|
66
|
+
|
|
67
|
+
# Like Black, respect magic trailing commas.
|
|
68
|
+
skip-magic-trailing-comma = true
|
|
69
|
+
|
|
70
|
+
# Like Black, automatically detect the appropriate line ending.
|
|
71
|
+
line-ending = "auto"
|
|
72
|
+
|
|
73
|
+
# Enable auto-formatting of code examples in docstrings. Markdown,
|
|
74
|
+
# reStructuredText code/literal blocks and doctests are all supported.
|
|
75
|
+
#
|
|
76
|
+
# This is currently disabled by default, but it is planned for this
|
|
77
|
+
# to be opt-out in the future.
|
|
78
|
+
docstring-code-format = false
|
|
79
|
+
|
|
80
|
+
# Set the line length limit used when formatting code snippets in
|
|
81
|
+
# docstrings.
|
|
82
|
+
#
|
|
83
|
+
# This only has an effect when the `docstring-code-format` setting is
|
|
84
|
+
# enabled.
|
|
85
|
+
docstring-code-line-length = "dynamic"
|
|
86
|
+
|
|
87
|
+
[lint.pydocstyle]
|
|
88
|
+
convention = "google"
|
|
89
|
+
|
|
File without changes
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This module defines the `Association` class. The `Association` class holds
|
|
3
|
+
parameters to for computing an association metric (scores) and for computing
|
|
4
|
+
the bipartite matching between (detection) reports and (tracked) targets.
|
|
5
|
+
Apart from the parameter storage, the class provides methods to generate
|
|
6
|
+
the metric and match drivers based on the selected types of metric and
|
|
7
|
+
matching method.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from typing import Sequence
|
|
11
|
+
|
|
12
|
+
from .association_method import AssociationMethod
|
|
13
|
+
from .association_metric import AssociationMetric
|
|
14
|
+
from .match_greedy import MatchDriverGreedy
|
|
15
|
+
from .match_hungarian import MatchDriverHungarian
|
|
16
|
+
from .metric_giou_aligned import MetricGIoUAligned
|
|
17
|
+
from .metric_mahalanobis import MetricMahalanobis
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Association:
|
|
21
|
+
"""
|
|
22
|
+
Represents an association mechanism for matching reports and targets
|
|
23
|
+
using configurable metrics and methods. Generates metric and match drivers.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(
|
|
27
|
+
self, num_x: int, num_z: int, ind_pos_size: Sequence[int] = (0, 1, 2, -3, -2, -1)
|
|
28
|
+
) -> None:
|
|
29
|
+
"""
|
|
30
|
+
Initializes the `Association` object with default parameters.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
num_x: Number of variables in the state vector.
|
|
34
|
+
num_z: Number of variables in the measurement vector.
|
|
35
|
+
ind_pos_size: indices to get positions and sizes of cuboids for GIoU.
|
|
36
|
+
By default, the indices will be 0,1,2,-3,-2,-1, i.e.
|
|
37
|
+
the center of the cuboid is taken as first three variables
|
|
38
|
+
of the measurement vector and sizes (dimensions) of the
|
|
39
|
+
cuboids are taken from the last three variables.
|
|
40
|
+
"""
|
|
41
|
+
self.threshold = 0.25 # Threshold for association
|
|
42
|
+
self.mah_pre_factor = 1.0 # Pre-factor for Mahalanobis distance
|
|
43
|
+
self.method = AssociationMethod.HUNGARIAN # Default matching method
|
|
44
|
+
self.metric = AssociationMetric.GIOU # Default metric
|
|
45
|
+
self.num_reports_max = 100 # Maximum number of reports
|
|
46
|
+
self.num_targets_max = 500 # Maximum number of targets
|
|
47
|
+
self.num_x = num_x # State vector dimensionality
|
|
48
|
+
self.num_z = num_z # Measurement vector dimensionality
|
|
49
|
+
self.ind_pos_size = ind_pos_size # Distribution of variables in the measurement vector.
|
|
50
|
+
|
|
51
|
+
def __repr__(self) -> str:
|
|
52
|
+
"""
|
|
53
|
+
Returns a string representation of the `Association` object.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
str: A string describing the association configuration.
|
|
57
|
+
"""
|
|
58
|
+
return (
|
|
59
|
+
f'Association({self.method.value} '
|
|
60
|
+
f'{self.metric.value} '
|
|
61
|
+
f'threshold {self.threshold} '
|
|
62
|
+
f'mah_pre_factor {self.mah_pre_factor})'
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
def set_ind_pos_size(self, ind_pos_size: Sequence[int]) -> None:
|
|
66
|
+
"""Set the location of positions and sizes of the cuboids relevant for GIoU metric.
|
|
67
|
+
|
|
68
|
+
The length of the `ind_pos_size` should be 6. The entries of the array points to
|
|
69
|
+
the locations in the measurement vector extracting the variables to form
|
|
70
|
+
a vector (pos_x, pos_y, pos_z, size_x, size_y, size_z). This vector will be
|
|
71
|
+
input for the GIoU aligned with Cartesian axes.
|
|
72
|
+
|
|
73
|
+
Note:
|
|
74
|
+
If we set this parameter, then we generally need another metric driver.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
ind_pos_size: the permutation pointer array.
|
|
78
|
+
"""
|
|
79
|
+
if len(ind_pos_size) != 6:
|
|
80
|
+
raise ValueError(f'Expect 6 elements in ind_pos_size, but got {len(ind_pos_size)}.')
|
|
81
|
+
self.ind_pos_size = ind_pos_size
|
|
82
|
+
|
|
83
|
+
def get_metric_driver(self) -> MetricMahalanobis | MetricGIoUAligned:
|
|
84
|
+
"""
|
|
85
|
+
Initializes and returns the metric driver based on the selected metric type.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
MetricMahalanobis | MetricGIoUAligned: The metric driver instance.
|
|
89
|
+
|
|
90
|
+
Raises:
|
|
91
|
+
ValueError: If the metric is not supported.
|
|
92
|
+
"""
|
|
93
|
+
if self.metric == AssociationMetric.MAHALANOBIS:
|
|
94
|
+
return MetricMahalanobis(
|
|
95
|
+
self.num_reports_max,
|
|
96
|
+
self.num_targets_max,
|
|
97
|
+
self.mah_pre_factor,
|
|
98
|
+
self.num_x,
|
|
99
|
+
self.num_z,
|
|
100
|
+
)
|
|
101
|
+
elif self.metric == AssociationMetric.GIOU:
|
|
102
|
+
return MetricGIoUAligned(
|
|
103
|
+
self.num_reports_max, self.num_targets_max, self.num_z, self.ind_pos_size
|
|
104
|
+
)
|
|
105
|
+
else:
|
|
106
|
+
raise ValueError('Unsupported metric.')
|
|
107
|
+
|
|
108
|
+
def get_match_driver(self) -> MatchDriverGreedy | MatchDriverHungarian:
|
|
109
|
+
"""
|
|
110
|
+
Initializes and returns the match driver based on the selected matching method.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
MatchDriverGreedy | MatchDriverHungarian: The match driver instance.
|
|
114
|
+
|
|
115
|
+
Raises:
|
|
116
|
+
ValueError: If the method is not supported.
|
|
117
|
+
"""
|
|
118
|
+
method = self.method
|
|
119
|
+
if method == AssociationMethod.GREEDY:
|
|
120
|
+
return MatchDriverGreedy(self.num_reports_max, self.num_targets_max)
|
|
121
|
+
elif method == AssociationMethod.HUNGARIAN:
|
|
122
|
+
return MatchDriverHungarian(self.num_reports_max, self.num_targets_max)
|
|
123
|
+
else:
|
|
124
|
+
raise ValueError('Unsupported matching method.')
|