Slightly improved tracker.

This commit is contained in:
Daniel
2025-10-21 16:20:51 +02:00
parent eafa178e26
commit 8fdf0d4096
4 changed files with 691 additions and 683 deletions

File diff suppressed because it is too large Load Diff

View File

@ -156,7 +156,7 @@ std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::
} }
} }
// Remove old tracks // Remove old track entries
timestamps.push_back(timestamp); timestamps.push_back(timestamp);
if (timestamps.size() > history_size) if (timestamps.size() > history_size)
{ {
@ -166,8 +166,21 @@ std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::
for (size_t i = 0; i < pose_tracks.size();) for (size_t i = 0; i < pose_tracks.size();)
{ {
auto &track = pose_tracks[i]; auto &track = pose_tracks[i];
double last_timestamp = track.timestamps.back(); for (size_t j = 0; j < track.timestamps.size();)
if (last_timestamp < max_age) {
double ts = track.timestamps[j];
if (ts < max_age)
{
track.core_poses.erase(track.core_poses.begin() + j);
track.full_poses.erase(track.full_poses.begin() + j);
track.timestamps.erase(track.timestamps.begin() + j);
}
else
{
j++;
}
}
if (track.timestamps.size() == 0)
{ {
pose_tracks.erase(pose_tracks.begin() + i); pose_tracks.erase(pose_tracks.begin() + i);
} }
@ -177,23 +190,15 @@ std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::
} }
} }
// Remove old poses from tracks
for (auto &track : pose_tracks)
{
while (track.core_poses.size() > history_size)
{
track.core_poses.erase(track.core_poses.begin());
track.full_poses.erase(track.full_poses.begin());
track.timestamps.erase(track.timestamps.begin());
}
}
// Refine poses // Refine poses
std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> tracked_poses; std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> tracked_poses;
for (size_t i = 0; i < pose_tracks.size(); ++i) for (size_t i = 0; i < pose_tracks.size(); ++i)
{ {
auto &track = pose_tracks[i]; auto &track = pose_tracks[i];
if (track.core_poses.size() > 0) // Create a refined pose for current tracks, or old tracks with a bit history,
// to avoid continuing tracks of flickering persons
if (track.core_poses.size() >= std::ceil(history_size / 2.0) ||
track.timestamps.back() == timestamps.back())
{ {
std::vector<std::array<float, 4>> refined_pose = refine_pose(track); std::vector<std::array<float, 4>> refined_pose = refine_pose(track);
tracked_poses.emplace_back(track.id, refined_pose); tracked_poses.emplace_back(track.id, refined_pose);
@ -205,7 +210,8 @@ std::vector<std::tuple<size_t, std::vector<std::array<float, 4>>>> PoseTracker::
// ================================================================================================= // =================================================================================================
std::tuple<int, float> PoseTracker::match_to_track(const std::vector<std::array<float, 4>> &core_pose_3d) std::tuple<int, float> PoseTracker::match_to_track(
const std::vector<std::array<float, 4>> &core_pose_3d)
{ {
int best_track = -1; int best_track = -1;
float best_distance_sq = max_distance * max_distance; float best_distance_sq = max_distance * max_distance;

View File

@ -128,6 +128,8 @@ datasets = {
"path": "/datasets/chi3d/skelda/all.json", "path": "/datasets/chi3d/skelda/all.json",
"take_interval": 5, "take_interval": 5,
"fps": 50, "fps": 50,
"min_match_score": 0.92,
"min_bbox_area": 0.2 * 0.2,
"max_track_distance": 0.3 + default_max_movement_speed / (50 / 5), "max_track_distance": 0.3 + default_max_movement_speed / (50 / 5),
}, },
"tsinghua": { "tsinghua": {
@ -193,7 +195,7 @@ datasets = {
"subset": "volleyball", "subset": "volleyball",
"min_match_score": 0.95, "min_match_score": 0.95,
"min_group_size": 7, "min_group_size": 7,
"min_bbox_score": 0.25, "min_bbox_score": 0.20,
"min_bbox_area": 0.05 * 0.05, "min_bbox_area": 0.05 * 0.05,
"max_movement_speed": 4.0 * 1.5, "max_movement_speed": 4.0 * 1.5,
"max_track_distance": 0.3 + (4.0 * 1.5) / (20 / 2), "max_track_distance": 0.3 + (4.0 * 1.5) / (20 / 2),

2
skelda

Submodule skelda updated: 56dc0c18ac...d48d65b961