Simplify triangulation API with config struct

This commit is contained in:
2026-03-12 00:08:56 +08:00
parent 7df34b18c3
commit c23f25f871
6 changed files with 158 additions and 198 deletions
+32 -108
View File
@@ -20,7 +20,6 @@ namespace
using PoseArray2D =
nb::ndarray<nb::numpy, const float, nb::shape<-1, -1, -1, 3>, nb::c_contig>;
using CountArray = nb::ndarray<nb::numpy, const uint32_t, nb::shape<-1>, nb::c_contig>;
using RoomArray = nb::ndarray<nb::numpy, const float, nb::shape<2, 3>, nb::c_contig>;
using PoseArray3DConst =
nb::ndarray<nb::numpy, const float, nb::shape<-1, -1, 4>, nb::c_contig>;
using PoseArray3D = nb::ndarray<nb::numpy, float, nb::shape<-1, -1, 4>, nb::c_contig>;
@@ -59,19 +58,6 @@ PoseBatch3DView pose_batch3d_view_from_numpy(const PoseArray3DConst &poses_3d)
};
}
std::array<std::array<float, 3>, 2> roomparams_from_numpy(const RoomArray &roomparams)
{
std::array<std::array<float, 3>, 2> result {};
for (size_t i = 0; i < 2; ++i)
{
for (size_t j = 0; j < 3; ++j)
{
result[i][j] = roomparams(i, j);
}
}
return result;
}
PoseArray3D pose_batch_to_numpy(PoseBatch3D batch)
{
auto *storage = new std::vector<float>(std::move(batch.data));
@@ -172,6 +158,13 @@ NB_MODULE(_core, m)
.def_rw("min_match_score", &TriangulationOptions::min_match_score)
.def_rw("min_group_size", &TriangulationOptions::min_group_size);
nb::class_<TriangulationConfig>(m, "TriangulationConfig")
.def(nb::init<>())
.def_rw("cameras", &TriangulationConfig::cameras)
.def_rw("roomparams", &TriangulationConfig::roomparams)
.def_rw("joint_names", &TriangulationConfig::joint_names)
.def_rw("options", &TriangulationConfig::options);
nb::class_<PairCandidate>(m, "PairCandidate")
.def(nb::init<>())
.def_rw("view1", &PairCandidate::view1)
@@ -268,148 +261,79 @@ NB_MODULE(_core, m)
"filter_pairs_with_previous_poses",
[](const PoseArray2D &poses_2d,
const CountArray &person_counts,
const std::vector<Camera> &cameras,
const std::vector<std::string> &joint_names,
const PoseArray3DConst &previous_poses_3d,
float min_match_score)
const TriangulationConfig &config,
const PoseArray3DConst &previous_poses_3d)
{
TriangulationOptions options;
options.min_match_score = min_match_score;
return filter_pairs_with_previous_poses(
pose_batch_view_from_numpy(poses_2d, person_counts),
cameras,
joint_names,
pose_batch3d_view_from_numpy(previous_poses_3d),
options);
config,
pose_batch3d_view_from_numpy(previous_poses_3d));
},
"poses_2d"_a,
"person_counts"_a,
"cameras"_a,
"joint_names"_a,
"previous_poses_3d"_a,
"min_match_score"_a = 0.95f);
"config"_a,
"previous_poses_3d"_a);
m.def(
"triangulate_debug",
[](const PoseArray2D &poses_2d,
const CountArray &person_counts,
const std::vector<Camera> &cameras,
const RoomArray &roomparams,
const std::vector<std::string> &joint_names,
float min_match_score,
size_t min_group_size)
const TriangulationConfig &config)
{
TriangulationOptions options;
options.min_match_score = min_match_score;
options.min_group_size = min_group_size;
return triangulate_debug(
pose_batch_view_from_numpy(poses_2d, person_counts),
cameras,
roomparams_from_numpy(roomparams),
joint_names,
nullptr,
options);
return triangulate_debug(pose_batch_view_from_numpy(poses_2d, person_counts), config);
},
"poses_2d"_a,
"person_counts"_a,
"cameras"_a,
"roomparams"_a,
"joint_names"_a,
"min_match_score"_a = 0.95f,
"min_group_size"_a = 1);
"config"_a);
m.def(
"triangulate_debug",
[](const PoseArray2D &poses_2d,
const CountArray &person_counts,
const std::vector<Camera> &cameras,
const RoomArray &roomparams,
const std::vector<std::string> &joint_names,
const PoseArray3DConst &previous_poses_3d,
float min_match_score,
size_t min_group_size)
const TriangulationConfig &config,
const PoseArray3DConst &previous_poses_3d)
{
const PoseBatch3DView previous_view = pose_batch3d_view_from_numpy(previous_poses_3d);
TriangulationOptions options;
options.min_match_score = min_match_score;
options.min_group_size = min_group_size;
return triangulate_debug(
pose_batch_view_from_numpy(poses_2d, person_counts),
cameras,
roomparams_from_numpy(roomparams),
joint_names,
&previous_view,
options);
config,
&previous_view);
},
"poses_2d"_a,
"person_counts"_a,
"cameras"_a,
"roomparams"_a,
"joint_names"_a,
"previous_poses_3d"_a,
"min_match_score"_a = 0.95f,
"min_group_size"_a = 1);
"config"_a,
"previous_poses_3d"_a);
m.def(
"triangulate_poses",
[](const PoseArray2D &poses_2d,
const CountArray &person_counts,
const std::vector<Camera> &cameras,
const RoomArray &roomparams,
const std::vector<std::string> &joint_names,
float min_match_score,
size_t min_group_size)
const TriangulationConfig &config)
{
TriangulationOptions options;
options.min_match_score = min_match_score;
options.min_group_size = min_group_size;
const PoseBatch3D poses_3d = triangulate_poses(
pose_batch_view_from_numpy(poses_2d, person_counts),
cameras,
roomparams_from_numpy(roomparams),
joint_names,
nullptr,
options);
const PoseBatch3D poses_3d =
triangulate_poses(pose_batch_view_from_numpy(poses_2d, person_counts), config);
return pose_batch_to_numpy(poses_3d);
},
"poses_2d"_a,
"person_counts"_a,
"cameras"_a,
"roomparams"_a,
"joint_names"_a,
"min_match_score"_a = 0.95f,
"min_group_size"_a = 1);
"config"_a);
m.def(
"triangulate_poses",
[](const PoseArray2D &poses_2d,
const CountArray &person_counts,
const std::vector<Camera> &cameras,
const RoomArray &roomparams,
const std::vector<std::string> &joint_names,
const PoseArray3DConst &previous_poses_3d,
float min_match_score,
size_t min_group_size)
const TriangulationConfig &config,
const PoseArray3DConst &previous_poses_3d)
{
const PoseBatch3DView previous_view = pose_batch3d_view_from_numpy(previous_poses_3d);
TriangulationOptions options;
options.min_match_score = min_match_score;
options.min_group_size = min_group_size;
const PoseBatch3D poses_3d = triangulate_poses(
pose_batch_view_from_numpy(poses_2d, person_counts),
cameras,
roomparams_from_numpy(roomparams),
joint_names,
&previous_view,
options);
config,
&previous_view);
return pose_batch_to_numpy(poses_3d);
},
"poses_2d"_a,
"person_counts"_a,
"cameras"_a,
"roomparams"_a,
"joint_names"_a,
"previous_poses_3d"_a,
"min_match_score"_a = 0.95f,
"min_group_size"_a = 1);
"config"_a,
"previous_poses_3d"_a);
}