Make triangulation a zero-copy pure function
This commit is contained in:
+8
-70
@@ -1,7 +1,7 @@
|
||||
#include <algorithm>
|
||||
#include <stdexcept>
|
||||
#include <utility>
|
||||
|
||||
#include "triangulator.hpp"
|
||||
#include "interface.hpp"
|
||||
|
||||
// =================================================================================================
|
||||
@@ -33,36 +33,19 @@ float &PoseBatch2D::at(size_t view, size_t person, size_t joint, size_t coord)
|
||||
return data[pose2d_offset(view, person, joint, coord, max_persons, num_joints)];
|
||||
}
|
||||
|
||||
const float &PoseBatch2DView::at(size_t view, size_t person, size_t joint, size_t coord) const
|
||||
{
|
||||
return data[pose2d_offset(view, person, joint, coord, max_persons, num_joints)];
|
||||
}
|
||||
|
||||
const float &PoseBatch2D::at(size_t view, size_t person, size_t joint, size_t coord) const
|
||||
{
|
||||
return data[pose2d_offset(view, person, joint, coord, max_persons, num_joints)];
|
||||
}
|
||||
|
||||
RaggedPoses2D PoseBatch2D::to_nested() const
|
||||
PoseBatch2DView PoseBatch2D::view() const
|
||||
{
|
||||
if (person_counts.size() != num_views)
|
||||
{
|
||||
throw std::invalid_argument("PoseBatch2D person_counts size must match num_views.");
|
||||
}
|
||||
|
||||
RaggedPoses2D poses_2d(num_views);
|
||||
for (size_t view = 0; view < num_views; ++view)
|
||||
{
|
||||
const size_t num_persons = person_counts[view];
|
||||
poses_2d[view].resize(num_persons);
|
||||
for (size_t person = 0; person < num_persons; ++person)
|
||||
{
|
||||
poses_2d[view][person].resize(num_joints);
|
||||
for (size_t joint = 0; joint < num_joints; ++joint)
|
||||
{
|
||||
for (size_t coord = 0; coord < 3; ++coord)
|
||||
{
|
||||
poses_2d[view][person][joint][coord] = at(view, person, joint, coord);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return poses_2d;
|
||||
return PoseBatch2DView {data.data(), person_counts.data(), num_views, max_persons, num_joints};
|
||||
}
|
||||
|
||||
PoseBatch2D PoseBatch2D::from_nested(const RaggedPoses2D &poses_2d)
|
||||
@@ -169,48 +152,3 @@ PoseBatch3D PoseBatch3D::from_nested(const NestedPoses3D &poses_3d)
|
||||
}
|
||||
return batch;
|
||||
}
|
||||
|
||||
// =================================================================================================
|
||||
// =================================================================================================
|
||||
|
||||
Triangulator::Triangulator(float min_match_score, size_t min_group_size)
|
||||
: triangulator(std::make_unique<TriangulatorInternal>(min_match_score, min_group_size))
|
||||
{
|
||||
}
|
||||
|
||||
Triangulator::~Triangulator() = default;
|
||||
|
||||
// =================================================================================================
|
||||
|
||||
PoseBatch3D Triangulator::triangulate_poses(
|
||||
const PoseBatch2D &poses_2d,
|
||||
const std::vector<Camera> &cameras,
|
||||
const std::array<std::array<float, 3>, 2> &roomparams,
|
||||
const std::vector<std::string> &joint_names)
|
||||
{
|
||||
return PoseBatch3D::from_nested(
|
||||
triangulator->triangulate_poses(poses_2d.to_nested(), cameras, roomparams, joint_names));
|
||||
}
|
||||
|
||||
NestedPoses3D Triangulator::triangulate_poses(
|
||||
const RaggedPoses2D &poses_2d,
|
||||
const std::vector<Camera> &cameras,
|
||||
const std::array<std::array<float, 3>, 2> &roomparams,
|
||||
const std::vector<std::string> &joint_names)
|
||||
{
|
||||
return triangulator->triangulate_poses(poses_2d, cameras, roomparams, joint_names);
|
||||
}
|
||||
|
||||
// =================================================================================================
|
||||
|
||||
void Triangulator::reset()
|
||||
{
|
||||
triangulator->reset();
|
||||
}
|
||||
|
||||
// =================================================================================================
|
||||
|
||||
void Triangulator::print_stats()
|
||||
{
|
||||
triangulator->print_stats();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user