|
@@ -6,6 +6,10 @@ namespace GNode
|
|
|
void TrackNode::work()
|
|
|
{
|
|
|
printf("TrackNode %s\n", name_.c_str());
|
|
|
+ for (const auto& input_buffer : input_buffers_)
|
|
|
+ {
|
|
|
+ track_map_[input_buffer.first] = std::make_shared<BYTETracker>(frame_rate_, track_buffer_);
|
|
|
+ }
|
|
|
while (running_)
|
|
|
{
|
|
|
bool has_data = false;
|
|
@@ -20,7 +24,7 @@ void TrackNode::work()
|
|
|
// printf("Node %s get data from %s\n", name_.c_str(), input_buffer.first.c_str());
|
|
|
|
|
|
// auto res = model_->forward(tensor::cvimg(image), image.cols, image.rows, 0.0f, 0.0f);
|
|
|
- if (!tracker_)
|
|
|
+ if (!track_map_[input_buffer.first] )
|
|
|
{
|
|
|
printf("track is nullptr\n");
|
|
|
continue;
|
|
@@ -28,7 +32,8 @@ void TrackNode::work()
|
|
|
std::vector<Object> objects;
|
|
|
for (const auto& box : metaData->boxes)
|
|
|
{
|
|
|
- if (box.label == track_label_) { // 只处理需要的 label
|
|
|
+ // 只处理需要的 label
|
|
|
+ if (box.label == track_label_) {
|
|
|
Object obj;
|
|
|
obj.rect.x = box.left;
|
|
|
obj.rect.y = box.top;
|
|
@@ -42,45 +47,12 @@ void TrackNode::work()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // ***** 关键调试打印:检查输入给 tracker 的 objects *****
|
|
|
- // printf("节点 %s: tracker_->update() 的输入 objects (共 %zu 个):\n", name_.c_str(), objects.size());
|
|
|
- // for (size_t i = 0; i < objects.size(); ++i) {
|
|
|
- // const auto& obj = objects[i];
|
|
|
- // printf(" Object %zu: Prob=%.2f, Rect=[%.1f, %.1f, %.1f, %.1f]\n",
|
|
|
- // i,
|
|
|
- // obj.prob, // 确保 Object 结构里有 score/prob
|
|
|
- // obj.rect.x, obj.rect.y, obj.rect.width, obj.rect.height); // 确保 Object 结构里有 rect
|
|
|
- // }
|
|
|
- // ***********************************************
|
|
|
- std::vector<STrack> output_stracks = tracker_->update(objects);
|
|
|
- // ***** 详细打印 tracker_->update() 的输出 *****
|
|
|
- // printf("节点 %s: tracker_->update() 返回了 %zu 个 STrack:\n", name_.c_str(), output_stracks.size());
|
|
|
- // for (size_t i = 0; i < output_stracks.size(); ++i) {
|
|
|
- // const auto& track = output_stracks[i];
|
|
|
- // const std::vector<float>& tlwh = track.tlwh;
|
|
|
- // printf(" Track %zu: ID=%d, Score=%.2f, TLWH=[%.1f, %.1f, %.1f, %.1f]\n",
|
|
|
- // i,
|
|
|
- // track.track_id,
|
|
|
- // track.score,
|
|
|
- // tlwh[0], tlwh[1], tlwh[2], tlwh[3]);
|
|
|
- // }
|
|
|
- // ***********************************************
|
|
|
-
|
|
|
- // 然后才开始添加到 metaData->track_boxes
|
|
|
- metaData->track_boxes.clear(); // 确保清空 (或者你已确认不需要)
|
|
|
- if (output_stracks.size() > objects.size())
|
|
|
- {
|
|
|
- printf("output_stracks size: %d, objects size: %d\n", output_stracks.size(), objects.size());
|
|
|
- }
|
|
|
+ std::vector<STrack> output_stracks = track_map_[input_buffer.first] ->update(objects);
|
|
|
|
|
|
for (const auto& track : output_stracks) {
|
|
|
const std::vector<float>& tlwh = track.tlwh;
|
|
|
metaData->track_boxes.emplace_back(tlwh[0], tlwh[1], tlwh[0] + tlwh[2], tlwh[1] + tlwh[3], track.score, track.track_id, track_label_);
|
|
|
}
|
|
|
- if (output_stracks.size() != metaData->track_boxes.size())
|
|
|
- {
|
|
|
- printf("output_stracks size: %d, metaData->track_boxes size: %d\n", output_stracks.size(), metaData->track_boxes.size());
|
|
|
- }
|
|
|
|
|
|
for (auto& output_buffer : output_buffers_)
|
|
|
{
|