Parser.cpp 6.2 KB

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