143 ARMARX_DEBUG <<
"[MappingDataReader] result: " << qResult;
148 return {.personInstances = {},
156 if (
query.providerName.empty())
160 std::vector<PersonInstance> allPersonInstances;
162 coreSegment.forEachProviderSegment(
163 [&allPersonInstances, &
query](
const auto& providerSegment)
165 const std::vector<PersonInstance> personInstances =
167 if (personInstances.size() > 0)
170 <<
" person instances in provider segment `"
171 << providerSegment.name() <<
"` that are not too old.";
176 <<
" person instances in provider segment `"
177 << providerSegment.name() <<
"` that are not too old.";
180 std::copy(personInstances.begin(),
181 personInstances.end(),
182 std::back_inserter(allPersonInstances));
185 if (allPersonInstances.empty())
188 return {.personInstances = {},
190 .errorMessage =
"No entities"};
199 if (not coreSegment.hasProviderSegment(
query.providerName))
202 <<
"` does not exist (yet).";
209 coreSegment.getProviderSegment(
query.providerName);
211 if (providerSegment.
empty())
214 return {.personInstances = {},
216 .errorMessage =
"No entities"};
223 const auto personInstances =
244 <<
"Query for person instances failed: " << result.errorMessage;
246 .status = result.status,
247 .errorMessage = result.errorMessage};
252 return memoryId.hasMemoryName() and memoryId.hasCoreSegmentName() and
253 memoryId.hasProviderSegmentName() and memoryId.hasEntityName() and
254 memoryId.hasTimestamp() and memoryId.hasInstanceIndex();
259 return memoryId.hasMemoryName() and memoryId.hasCoreSegmentName() and
260 memoryId.hasProviderSegmentName() and memoryId.hasEntityName();
265 const auto [allMemoryIds, allLatestMemoryIds] = [&]
267 std::vector<MemoryID> allLatestMemoryIds;
268 std::vector<MemoryID> allMemoryIds;
269 for (
const auto& personInstance : result.personInstances)
273 if (isFullySpecified(personInstance.faceRecognitionID))
275 allMemoryIds.push_back(personInstance.faceRecognitionID);
277 else if (isEntitySpecified(personInstance.faceRecognitionID))
279 allLatestMemoryIds.push_back(personInstance.faceRecognitionID);
283 ARMARX_DEBUG <<
"Face recognition ID is not even entity specified: "
284 <<
QUOTED(personInstance.faceRecognitionID);
290 if (isFullySpecified(personInstance.poseID))
292 allMemoryIds.push_back(personInstance.poseID);
294 else if (isEntitySpecified(personInstance.poseID))
296 allLatestMemoryIds.push_back(personInstance.poseID);
300 ARMARX_DEBUG <<
"Human pose ID is not even entity specified: "
301 <<
QUOTED(personInstance.poseID);
307 if (isFullySpecified(personInstance.profileID))
309 allMemoryIds.push_back(personInstance.profileID);
311 else if (isEntitySpecified(personInstance.profileID))
313 allLatestMemoryIds.push_back(personInstance.profileID);
317 ARMARX_DEBUG <<
"Profile ID is not even entity specified: "
318 <<
QUOTED(personInstance.profileID);
322 return std::pair{allMemoryIds, allLatestMemoryIds};
325 ARMARX_DEBUG <<
"Need to query " << allMemoryIds.size() <<
" memory elements";
331 for (
const auto& memId : allLatestMemoryIds)
349 ARMARX_DEBUG <<
"Face recognition: " << personInstance.faceRecognitionID;
350 const auto& memoryID = personInstance.faceRecognitionID;
352 if (isEntitySpecified(memoryID) and queryResult.memory.hasEntity(memoryID))
355 const auto& entity = queryResult.memory.getEntity(memoryID);
356 const auto instance = entity.getLatestInstance();
360 instance.dataAs<armarx::human::arondto::FaceRecognition>();
368 <<
"Requested face detection but failed to resolve "
375 ARMARX_DEBUG <<
"Human pose id: " << personInstance.poseID;
376 const auto& memoryID = personInstance.poseID;
378 if (isEntitySpecified(memoryID) and queryResult.memory.hasEntity(memoryID))
380 const auto& entity = queryResult.memory.getEntity(memoryID);
381 const auto instance = entity.getLatestInstance();
384 const auto data = instance.dataAs<armarx::human::arondto::HumanPose>();
386 auto& humanPose = resolvedInstance.
humanPose.emplace();
392 <<
"Requested human pose but failed to resolve "
400 const auto& memoryID = personInstance.profileID;
402 if (isEntitySpecified(memoryID) and queryResult.memory.hasEntity(memoryID))
405 const auto& entity = queryResult.memory.getEntity(memoryID);
406 const auto instance = entity.getLatestInstance();
410 const auto data = instance.dataAs<armarx::human::arondto::Person>();
412 auto& profile = resolvedInstance.
profile.emplace();
418 <<
"Requested profile but failed to resolve "
424 resolvedInstance.
globalPose = personInstance.globalPose;
427 return resolvedInstance;
433 result.personInstances | ranges::views::transform(resolve) | ranges::to_vector;
435 resultResolved.
status = ResultResolved::Status::Success;
437 return resultResolved;