61 if (!localRobot || !running3D_is_possible || !running3D)
67 localRobot, robotStateInterface, timestamp_of_update);
70 openposeResult3D.clear();
72 for (
const auto& entities_iterator : openposeResult)
74 const std::string& name = entities_iterator->first;
75 const Entity2D& entity = entities_iterator->second;
77 if (entity.keypointMap.size() == 0)
82 std::map<std::string, int>
84 std::vector<int> depthsCopy;
87 for (
const auto& entity_iterator : entity.keypointMap)
89 const std::string& kp_name = entities_iterator->first;
90 const Keypoint2D& point = entities_iterator->second;
92 int depth = getMedianDepthFromImage(
93 static_cast<int>(point.x),
static_cast<int>(point.y),
radius);
94 depthStorage[kp_name] = depth;
95 depthsCopy.push_back(depth);
99 std::sort(depthsCopy.begin(), depthsCopy.end());
100 const int medianDepth = depthsCopy.at(depthsCopy.size() / 2);
101 for (
auto& depthStorage_iterator : depthStorage)
103 const std::string& storage_name = depthStorage_iterator->first;
104 int& depth = depthStorage_iterator->second;
106 if (depth > medianDepth + depthThreshold || depth < medianDepth - depthThreshold)
114 openposeResult3D[name] = Entity3D();
115 for (
const auto& entity_iterator : entity.keypointMap)
117 const std::string& kp_name = entity_iterator->first;
118 const Keypoint3D& point = entity_iterator->second;
121 imagePoint.x = point.x;
122 imagePoint.y = point.y;
128 static_cast<float>(depthStorage.at(i)),
129 useDistortionParameters);
132 openposeResult3D[name].keypointMap[kp_name].x = result.x;
133 openposeResult3D[name].keypointMap[kp_name].y = result.y;
134 openposeResult3D[name].keypointMap[kp_name].z = result.z;