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 const auto* instance =
353 isEntitySpecified(memoryID) and queryResult.memory.hasEntity(memoryID)
354 ? queryResult.memory.getEntity(memoryID).findLatestInstance()
356 if (instance !=
nullptr)
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 const auto* instance =
379 isEntitySpecified(memoryID) and queryResult.memory.hasEntity(memoryID)
380 ? queryResult.memory.getEntity(memoryID).findLatestInstance()
382 if (instance !=
nullptr)
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 const auto* instance =
403 isEntitySpecified(memoryID) and queryResult.memory.hasEntity(memoryID)
404 ? queryResult.memory.getEntity(memoryID).findLatestInstance()
406 if (instance !=
nullptr)
409 const auto data = instance->dataAs<armarx::human::arondto::Person>();
411 auto& profile = resolvedInstance.
profile.emplace();
417 <<
"Requested profile but failed to resolve "
423 resolvedInstance.
globalPose = personInstance.globalPose;
426 return resolvedInstance;
432 result.personInstances | ranges::views::transform(resolve) | ranges::to_vector;
434 resultResolved.
status = ResultResolved::Status::Success;
436 return resultResolved;