Parser.cpp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. //
  2. // Created by wrede on 22.04.16.
  3. //
  4. #include "Parser.h"
  5. #include "MyMath.h"
  6. #include "Logger.h"
  7. #include "../core/ObjectDataAngular.h"
  8. namespace util
  9. {
  10. void Parser::ParseObjectDataMap(const std::vector<std::string>& keys,
  11. const Vector3d& values,
  12. core::DetectionSequence& sequence)
  13. {
  14. util::Logger::LogInfo("Parsing ObjectDataMap");
  15. for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
  16. {
  17. for (size_t object_i = 0; object_i < values[frame_i].size();
  18. ++object_i)
  19. {
  20. core::ObjectDataMapPtr object(
  21. new core::ObjectDataMap(frame_i, keys,
  22. values[frame_i][object_i]));
  23. sequence.AddObject(object);
  24. }
  25. }
  26. }
  27. void Parser::ParseObjectData3D(const Vector3d& values,
  28. core::DetectionSequence& sequence)
  29. {
  30. util::Logger::LogInfo("Parsing ObjectData3D");
  31. // Calculate max and min score to normalize the score
  32. double max_score = std::numeric_limits<double>::min();
  33. double min_score = std::numeric_limits<double>::max();
  34. for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
  35. {
  36. for (size_t object_i = 0; object_i < values[frame_i].size();
  37. ++object_i)
  38. {
  39. double score = values[frame_i][object_i][1];
  40. if (score > max_score)
  41. {
  42. max_score = score;
  43. }
  44. if (score < min_score)
  45. {
  46. min_score = score;
  47. }
  48. }
  49. }
  50. // Create objects
  51. for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
  52. {
  53. for (size_t object_i = 0; object_i < values[frame_i].size();
  54. ++object_i)
  55. {
  56. double score = values[frame_i][object_i][1];
  57. double x = values[frame_i][object_i][2];
  58. double y = values[frame_i][object_i][3];
  59. double z = 0.0;
  60. cv::Point3d point(x, y, z);
  61. core::ObjectData3DPtr object(new core::ObjectData3D(frame_i, point));
  62. object->SetDetectionScore(util::MyMath::InverseLerp(min_score, max_score, score));
  63. sequence.AddObject(object);
  64. }
  65. }
  66. }
  67. void Parser::ParseObjectDataAngular(const Vector3d& values,
  68. core::DetectionSequence& sequence)
  69. {
  70. util::Logger::LogInfo("Parsing ObjectDataAngular");
  71. // Calculate max and min score to normalize the score
  72. double max_score = std::numeric_limits<double>::min();
  73. double min_score = std::numeric_limits<double>::max();
  74. for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
  75. {
  76. for (size_t object_i = 0; object_i < values[frame_i].size();
  77. ++object_i)
  78. {
  79. double score = values[frame_i][object_i][1];
  80. if (score > max_score)
  81. {
  82. max_score = score;
  83. }
  84. if (score < min_score)
  85. {
  86. min_score = score;
  87. }
  88. }
  89. }
  90. // Create objects
  91. for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
  92. {
  93. for (size_t object_i = 0; object_i < values[frame_i].size();
  94. ++object_i)
  95. {
  96. double angle = (values[frame_i][object_i][0] * 3.14159) / 180.0;
  97. double score = values[frame_i][object_i][1];
  98. double x = values[frame_i][object_i][2];
  99. double y = values[frame_i][object_i][3];
  100. double z = 0.0;
  101. cv::Point3d point(x, y, z);
  102. core::ObjectDataAngularPtr object(new core::ObjectDataAngular(frame_i, point, angle));
  103. object->SetDetectionScore(util::MyMath::InverseLerp(min_score, max_score, score));
  104. sequence.AddObject(object);
  105. }
  106. }
  107. }
  108. void Parser::ParseObjectDataAngular(const Vector3d& values,
  109. core::DetectionSequence& sequence,
  110. double temporal_weight,
  111. double spatial_weight,
  112. double angular_weight)
  113. {
  114. util::Logger::LogInfo("Parsing ObjectDataAngular");
  115. // Calculate max and min score to normalize the score
  116. double max_score = std::numeric_limits<double>::min();
  117. double min_score = std::numeric_limits<double>::max();
  118. for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
  119. {
  120. for (size_t object_i = 0; object_i < values[frame_i].size();
  121. ++object_i)
  122. {
  123. double score = values[frame_i][object_i][1];
  124. if (score > max_score)
  125. {
  126. max_score = score;
  127. }
  128. if (score < min_score)
  129. {
  130. min_score = score;
  131. }
  132. }
  133. }
  134. // Create objects
  135. for (size_t frame_i = 0; frame_i < values.size(); ++frame_i)
  136. {
  137. for (size_t object_i = 0; object_i < values[frame_i].size();
  138. ++object_i)
  139. {
  140. double angle = (values[frame_i][object_i][0] * 3.14159) / 180.0;
  141. double score = values[frame_i][object_i][1];
  142. double x = values[frame_i][object_i][2];
  143. double y = values[frame_i][object_i][3];
  144. double z = 0.0;
  145. cv::Point3d point(x, y, z);
  146. core::ObjectDataAngularPtr object(
  147. new core::ObjectDataAngular(frame_i, point, angle,
  148. temporal_weight,
  149. spatial_weight,
  150. angular_weight));
  151. object->SetDetectionScore(util::MyMath::InverseLerp(min_score, max_score, score));
  152. sequence.AddObject(object);
  153. }
  154. }
  155. }
  156. }