|
@@ -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_)
|
|
|
{
|