Commit 446376f6 authored by oscar's avatar oscar

提交对iou算法的顺序的调整。

parent e1b94301
......@@ -26,6 +26,9 @@ public:
virtual bool IsLost();
virtual int GetMeasureData(std::vector<float>& data);
virtual int GetIouDataOrder(std::vector<int>& order) = 0;
virtual int GetKFDataOrder(std::vector<int>& order) = 0;
virtual double CalculateIou(const std::vector<float>& data) = 0;
......
......@@ -208,6 +208,7 @@ void BaseTracker<T>::AssociateDetectionsToTrackers(const std::vector<std::vector
else
{
std::vector<std::vector<float> > tracker_states;
std::vector<int> iouOrder;
for (auto& iter : tracks)
{
std::vector<float> measure;
......@@ -219,6 +220,10 @@ void BaseTracker<T>::AssociateDetectionsToTrackers(const std::vector<std::vector
{
SDK_LOG(SDK_INFO, "GetMeasureData failed");
}
if (iouOrder.empty())
{
iter.second->GetIouDataOrder(iouOrder);
}
}
int measure_size = detections.size() > 0 ? detections[0].size() : 0;
int tra_size = tracker_states.size() > 0 ? tracker_states[0].size() : 0;
......@@ -234,14 +239,14 @@ void BaseTracker<T>::AssociateDetectionsToTrackers(const std::vector<std::vector
{
for (int j = 0; j < measure_size; j++)
{
detect_ptr.get()[i * measure_size + j] = detections[i][j];
detect_ptr.get()[i * measure_size + j] = detections[i][iouOrder[j]];
}
}
for (int i = 0; i < tracker_states.size(); i++)
{
for (int j = 0; j < tra_size; j++)
{
tracker_ptr.get()[i * tra_size + j] = tracker_states[i][j];
tracker_ptr.get()[i * tra_size + j] = tracker_states[i][iouOrder[j]];
}
}
//std::string dete_str = GetMatrixStr(detect_ptr.get(), measure_size, detections.size());
......
......@@ -170,21 +170,48 @@ double Track3D::CalculateIou(const std::vector<float>& data)
}
int Track3D::GetMeasureData(std::vector<float>& data)
//int Track3D::GetMeasureData(std::vector<float>& data)
//{
// std::vector<float> measure;
// if (BaseTrack::GetMeasureData(measure) == 0)
// {
// //获取的数据是外面的传入的顺序:x,y,z,theta,l,w,h
// //需要转为:x,y,z,l,w,h,thetha
// data.push_back(measure[0]);
// data.push_back(measure[1]);
// data.push_back(measure[2]);
// data.push_back(measure[4]);
// data.push_back(measure[5]);
// data.push_back(measure[6]);
// data.push_back(measure[3]);
// return 0;
// }
// return -1;
//}
int Track3D::GetIouDataOrder(std::vector<int>& order)
{
std::vector<float> measure;
if (BaseTrack::GetMeasureData(measure) == 0)
{
//获取的数据是外面的传入的顺序:x,y,z,theta,l,w,h
//需要转为:x,y,z,l,w,h,thetha
data.push_back(measure[0]);
data.push_back(measure[1]);
data.push_back(measure[2]);
data.push_back(measure[4]);
data.push_back(measure[5]);
data.push_back(measure[6]);
data.push_back(measure[3]);
return 0;
}
return -1;
//获取的数据是外面的传入的顺序:x,y,z,theta,l,w,h
//计算iou需要转为:x,y,z,l,w,h,thetha
order.push_back(0);
order.push_back(1);
order.push_back(2);
order.push_back(4);
order.push_back(5);
order.push_back(6);
order.push_back(3);
return 0;
}
int Track3D::GetKFDataOrder(std::vector<int>& order)
{
//获取的数据是外面的传入的顺序:x,y,z,theta,l,w,h
//计算kf需要转为没有变化就返回-1
order.push_back(0);
order.push_back(1);
order.push_back(2);
order.push_back(3);
order.push_back(4);
order.push_back(5);
order.push_back(6);
return 0;
}
......@@ -21,7 +21,8 @@ public:
virtual double CalculateIou(const std::vector<float>& data);
virtual int GetMeasureData(std::vector<float>& data);
virtual int GetIouDataOrder(std::vector<int>& order);
virtual int GetKFDataOrder(std::vector<int>& order);
trackOjbPtr m_obj = nullptr;
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment