UpdateConsumer Class Reference

Core logic for fusing face recognition and pose tracking into PersonInstance entities. More...

#include <VisionX/components/person_instance_updater/UpdateConsumer.h>

Classes

struct  Properties
 

Public Member Functions

void consumeFaceRecognitionUpdate (const armarx::armem::human::FaceRecognition &faceRecognition, const armarx::armem::MemoryID &faceRecognitionID)
 Process a new face recognition result.
 
void consumePoseUpdate (const armarx::armem::human::HumanPose &humanPose, const armarx::armem::MemoryID &poseID)
 Process a new human pose update.
 
void consumeProfileUpdate (const armarx::human::arondto::Person &profile, const armarx::armem::MemoryID &profileID)
 Process a profile update (not yet implemented).
 
bool isBusy ()
 Check if the consumer is currently processing an update.
 
 UpdateConsumer (armarx::armem::client::MemoryNameSystem &mns, const Properties &properties)
 

Detailed Description

Core logic for fusing face recognition and pose tracking into PersonInstance entities.

This class handles the complex task of matching and linking face recognition data with body pose tracking data to maintain a unified representation of tracked people.

Matching Strategy:

  • Face -> PersonInstance: Match by profile ID, then try to link with a nearby pose
  • Pose -> PersonInstance: Match by tracking ID or spatial proximity to a recognized face
  • Ensures tracking ID uniqueness: only one PersonInstance per tracking ID

Key Operations:

Definition at line 35 of file UpdateConsumer.h.

Constructor & Destructor Documentation

◆ UpdateConsumer()

Definition at line 42 of file UpdateConsumer.cpp.

+ Here is the call graph for this function:

Member Function Documentation

◆ consumeFaceRecognitionUpdate()

void consumeFaceRecognitionUpdate ( const armarx::armem::human::FaceRecognition & faceRecognition,
const armarx::armem::MemoryID & faceRecognitionID )

Process a new face recognition result.

Process a face recognition update:

Workflow:

  1. Find existing PersonInstance by profile ID
  2. If found: Update face data and validate pose link is still plausible
  3. If not found: Create new PersonInstance
  4. Try to match with a nearby pose (within maxFaceHeadDistance)
  5. Ensure tracking ID uniqueness across all PersonInstances
  1. Find existing PersonInstance by profile ID
  2. If found and has valid pose: check if pose is still plausible (nearby)
    • If implausible: clear pose link and try to find new matching pose
  3. If found but no pose: try to find matching pose by proximity
  4. If not found: create new PersonInstance and try to find matching pose
  5. Ensure tracking ID uniqueness: remove pose links from other PersonInstances that were using the same tracking ID

Definition at line 100 of file UpdateConsumer.cpp.

+ Here is the call graph for this function:

◆ consumePoseUpdate()

void consumePoseUpdate ( const armarx::armem::human::HumanPose & humanPose,
const armarx::armem::MemoryID & poseID )

Process a new human pose update.

Process a pose update:

Workflow:

  1. Search for PersonInstance with matching tracking ID
  2. If not found, try to match by spatial proximity to a recognized face
  3. If matched: Update PersonInstance with new pose
  4. If not matched: Create new PersonInstance based on pose alone
  1. Search for PersonInstance with matching tracking ID
  2. If not found, try to match by spatial proximity to a recognized face
  3. If matched: Update PersonInstance with new pose ID
  4. If not matched: Create new PersonInstance based on pose alone

Note: Whenever a pose can be plausibly matched to a recognized face, it will be. Matched instances get their poseId's updated. If no match is available, a new one is created.

Definition at line 331 of file UpdateConsumer.cpp.

+ Here is the call graph for this function:

◆ consumeProfileUpdate()

void consumeProfileUpdate ( const armarx::human::arondto::Person & profile,
const armarx::armem::MemoryID & profileID )

Process a profile update (not yet implemented).

Definition at line 461 of file UpdateConsumer.cpp.

◆ isBusy()

bool isBusy ( )

Check if the consumer is currently processing an update.

Returns
true if busy (mutex locked), false otherwise.

Definition at line 1076 of file UpdateConsumer.cpp.


The documentation for this class was generated from the following files: