leon 1 сар өмнө
parent
commit
69dc6c506e

+ 19 - 6
src/nodes/track/trackNode.cpp

@@ -4,6 +4,9 @@ namespace GNode
 {
 
 
+constexpr float EPSILON = 1e-3; // 根据实际情况调整
+
+
 void TrackNode::work()
 {
     printf("TrackNode %s\n", name_.c_str());
@@ -42,12 +45,22 @@ void TrackNode::work()
             {
                 vector<float> tlwh = output_stracks[i].tlwh;
                 int track_id = output_stracks[i].track_id;
-                std::for_each(metaData->boxes.begin(), metaData->boxes.end(), [track_id, tlwh](data::Box& box) {
-                    if (box.left == tlwh[0] && box.top == tlwh[1] && box.right - box.left == tlwh[2] && box.bottom - box.top == tlwh[3])
-                    {
-                        box.track_id = track_id;
-                    }
-                });
+                printf("track id : %d\n", track_id);
+
+                std::for_each(metaData->boxes.begin(), metaData->boxes.end(),
+                    [track_id, &tlwh](data::Box& box) { // 注意这里改为引用捕获 tlwh
+                        bool width_match  = std::abs((box.right - box.left) - tlwh[2]) < EPSILON;
+                        bool height_match = std::abs((box.bottom - box.top) - tlwh[3]) < EPSILON;
+                        printf("width_match: %d, height_match: %d\n", width_match, height_match);
+                        if (std::abs(box.left - tlwh[0]) < EPSILON &&
+                            std::abs(box.top - tlwh[1]) < EPSILON &&
+                            width_match &&
+                            height_match) 
+                        {
+                            box.track_id = track_id;
+                            // 如果只需修改第一个匹配项,可在此抛出异常或记录状态
+                        }
+                    });
             }
             for (auto& output_buffer : output_buffers_)
             {