Simplify triangulation API with config struct
This commit is contained in:
+32
-108
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user