SAFR Windows SDK
All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Properties Events
RealNetworks.ArgusKit.TrackedObject Class Referenceabstract

Represents an object that was detected and possibly recognized by the object tracker. More...

Inheritance diagram for RealNetworks.ArgusKit.TrackedObject:
RealNetworks.ArgusKit.TrackedBadge RealNetworks.ArgusKit.TrackedFace RealNetworks.ArgusKit.TrackedRecognizedObject

Public Types

enum  AttributeSet {
  AttributeSet.Empty = 0, AttributeSet.Unrecognized = 1, AttributeSet.Recognized = 2, AttributeSet.Identified = 4,
  AttributeSet.New = 8, AttributeSet.Lingering = 16, AttributeSet.Speculated = 32, AttributeSet.Stranger = 64,
  AttributeSet.Concern = 128, AttributeSet.Threat = 256
}
 

Public Member Functions

abstract TrackedObject Copy ()
 Returns a copy of the receiver. More...
 
override bool Equals (object obj)
 Returns true if two tracked objects are the same. Two tracked objects are considered the same if they share the same local id. More...
 
bool Equals (TrackedObject other)
 Returns true if two tracked objects are the same. Two tracked objects are considered the same if they share the same local id. More...
 
override int GetHashCode ()
 Returns the receiver's hash code. More...
 
override string ToString ()
 Returns a debug description. More...
 
void UpdateLiveness (uint evaluationWindowSize, uint fakeEvaluationWindowSize, float minConfirmationRatio, float livenessThreshold, float livenessFakeThreshold)
 

Static Public Member Functions

static bool operator== (TrackedObject lhs, TrackedObject rhs)
 Returns true if two tracked objects are the same. Two tracked objects are considered the same if they share the same local id. More...
 
static bool operator!= (TrackedObject lhs, TrackedObject rhs)
 Returns true if the two tracked objects are different. More...
 

Public Attributes

bool IsSpeculated => MaxSimilarityScore.HasValue && MaxSimilarityScore.Value < 1
 MaxSimilarityScore is less than 1. More...
 

Properties

DetectedObjectType ObjectType [get]
 Type of detected object this is tracking. More...
 
Int64 LocalId [get]
 The local identifier for this face. This identifier is assigned by the face detector and remains valid throughout the lifetime of the face object. The local identifier is unique with respect to the local machine. More...
 
Person Person [get, set]
 Returns the person associated with this tracked object; null is returned if the object is not a person. More...
 
bool IsNew [get, set]
 Returns true if this is a face that the recognizer has never seen before and thus it just created a person ID for it. More...
 
DetectedFace Face [get]
 Returns face representation if detected object is a face. Will be deprecated soon. Use DetectedObject instead. More...
 
IDetectedObject DetectedObject [get, set]
 Returns the most recently detected object. More...
 
bool Occluded [get, set]
 True if the face is partially covered by some other tracked face. More...
 
bool Isolated [get, set]
 True if the face does not intersect any other tracked face. More...
 
TrackedObjectState State = TrackedObjectState.Detected [get, set]
 Returns the current state of the tracked face. More...
 
bool? AllowRecognizerToLearn [get, set]
 
PredictedFace MostRecentPredictedFace [get, set]
 The face that was predicted for the current frame. Nil means that no prediction was possible. More...
 
Timestamp TimeOfInitialDetection [get]
 The time when this face was detected for the first time. More...
 
int RecognitionCount = 0 [get, set]
 The number of recognition attempts. More...
 
bool IsLingering [get]
 Returns true if the face is currently in limbo. Meaning that the face has not been detected in the most recent frames although I think it should still be visible to the camera. It's just that the face is currently not detectable because e.g. the person is looking down, etc, pp. We continue tracking the face for a couple frames before we drop it for good. The face will move out of the in limbo state if we are again able to detect it after a few frames. More...
 
int LingeringCount = 0 [get, set]
 The number of frames for which this face has been lingering. More...
 
bool IsZombie [get]
 Returns true if the tracked face is a zombie. A zombie is a tracked face that has disappeared from the video / screen but for which there is an recognition attempt outstanding. The zombie will be kept around until the recognition attempt has completed. More...
 
RecognitionAttemptActiveRecognitionAttempt [get, set]
 Returns information about the recognition attempt that is currently executing. More...
 
RecognitionAttemptMostRecentRecognitionAttempt [get, set]
 Returns the outcome of the most recent recognition attempt. Nil is returned if no attempt to recognize the face has been made yet. More...
 
RecognitionCandidateMostRecentPersistedCandidate [get, set]
 The most recently persisted face. More...
 
RecognitionAttemptMostRecentPersistenceAttempt [get, set]
 The most recent face persistence attempt. More...
 
double IdentityRecognitionThresholdBoost [get, set]
 The amount to boost the identityRecognitionThreshold (property in the face recognizer configuration) by for this specific tracked object when a recognition attempt is made. More...
 
bool CompletedSuccessfulRecognitionAttempt [get, set]
 This is true if we completed at least one successful recognition attempt. The recognition attempt doesn't have to return any results it just needs to be successful, which means no error response. This can be used to determine if a successful recognition attempt was made for the tracked object at any time and allows the tracked object to be treated differently if no successful recognitions attempts were made. Sometimes a tracked object may never make any recognition attempts because the object doesn't meet various requirements as defined in the object tracker configuration. As an example this can be used to differentiate between unknown faces (no successful recognitions) and strangers (at least one successful recognition, but not recognized). More...
 
bool CompletedSuccessfulIdentificationAttempt [get, set]
 This is true if we completed at least one successful identification attempt. The difference between identification and recognition is the criteria is usually more strict and requires a better image for the tracked object. We may attempt several recognition attempts before an identification attempt is made unless the initial image is good. Sometimes we may never do an identification attempt if the image isn't of good enough quality. This can be used to determine if the tracked object ever made an identification attempt, which typically means we got a good quality image. As an example, this can be to classify an object into a different class based on if an identification attempt was attempted versus just a recognition attempt. More...
 
Person PersonPendingIdentityVerification = null [get, set]
 When combining the person identities from tracked person objects and tracked faces there are some cases where we need to verify the person outside of recognition. For example, if we have a tracked face and tracked person that were matched up and then we lose the tracked face for a while (the person turns around) and then it comes back we don't want to assume it is the correct face. We run a verification against the previous person since it is possible recognitions fail if the person is different and not known by the system. This is valid while we are pending the verification. More...
 
RecognitionAttemptActiveIdentityVerificationAttempt = null [get, set]
 This is valid during the verification attempt. In the future we will do more verification instead of recognition when we are tracking known identities because it is faster than doing a full recognition each time. We would only do recognitions if we need to reconfirm the full identity, whereas during tracking we just need a more lightweight verification check to make sure we are tracking the same person. In order to switch over to this we need server support to return many of the same attributes that are returned in the recognition so this is pushed back for now. More...
 
bool IdentityVerificationComplete = false [get, set]
 This is true if identity verification has completed on this tracked object. More...
 
int ConsecutiveFailedIdentityVerifications = 0 [get, set]
 The number of consecutive failed identity verifications. Once we go over a minimum threshold we no longer attempt to verify the identity and assume it was wrong. More...
 
bool? ReceivedPositiveFaceConfirmation = null [get, set]
 
double? MaxSimilarityScore = null [get, set]
 Max match percentage during lifetime of the tracked object. Range is from zero to above one. More...
 
AttributeSet Attributes [get]
 Returns the attributes. More...
 
bool IsStranger [get]
 Returns true if the receiver is considered to be a stranger. More...
 
bool IsRecognizedOnDetection [get]
 Returns true if no further recognition needed. More...
 
bool IsTrackedPerson [get]
 Returns true for Person object. More...
 
bool IsTrackedFace [get]
 Returns true for Face object. More...
 
bool?? LivenessConfirmed [get]
 
double?? LivenessConfidence [get]
 

Detailed Description

Represents an object that was detected and possibly recognized by the object tracker.

Member Enumeration Documentation

◆ AttributeSet

Enumerator
Empty 
Unrecognized 
Recognized 
Identified 
New 
Lingering 
Speculated 
Stranger 
Concern 
Threat 

Member Function Documentation

◆ Copy()

abstract TrackedObject RealNetworks.ArgusKit.TrackedObject.Copy ( )
pure virtual

◆ Equals() [1/2]

override bool RealNetworks.ArgusKit.TrackedObject.Equals ( object  obj)

Returns true if two tracked objects are the same. Two tracked objects are considered the same if they share the same local id.

Parameters
objthe other tracked object
Returns
true or false

◆ Equals() [2/2]

bool RealNetworks.ArgusKit.TrackedObject.Equals ( TrackedObject  other)

Returns true if two tracked objects are the same. Two tracked objects are considered the same if they share the same local id.

Parameters
otherthe other tracked object
Returns
true or false

◆ GetHashCode()

override int RealNetworks.ArgusKit.TrackedObject.GetHashCode ( )

Returns the receiver's hash code.

Returns
the hash code

◆ operator!=()

static bool RealNetworks.ArgusKit.TrackedObject.operator!= ( TrackedObject  lhs,
TrackedObject  rhs 
)
static

Returns true if the two tracked objects are different.

Parameters
lhsone tracked object
rhsthe other tracked object
Returns
true or false

◆ operator==()

static bool RealNetworks.ArgusKit.TrackedObject.operator== ( TrackedObject  lhs,
TrackedObject  rhs 
)
static

Returns true if two tracked objects are the same. Two tracked objects are considered the same if they share the same local id.

Parameters
lhsone tracked object
rhsother tracked object
Returns
true or false

◆ ToString()

override string RealNetworks.ArgusKit.TrackedObject.ToString ( )

Returns a debug description.

Returns
the description

◆ UpdateLiveness()

void RealNetworks.ArgusKit.TrackedObject.UpdateLiveness ( uint  evaluationWindowSize,
uint  fakeEvaluationWindowSize,
float  minConfirmationRatio,
float  livenessThreshold,
float  livenessFakeThreshold 
)

Member Data Documentation

◆ IsSpeculated

bool RealNetworks.ArgusKit.TrackedObject.IsSpeculated => MaxSimilarityScore.HasValue && MaxSimilarityScore.Value < 1

MaxSimilarityScore is less than 1.

Property Documentation

◆ ActiveIdentityVerificationAttempt

RecognitionAttempt? RealNetworks.ArgusKit.TrackedObject.ActiveIdentityVerificationAttempt = null
getset

This is valid during the verification attempt. In the future we will do more verification instead of recognition when we are tracking known identities because it is faster than doing a full recognition each time. We would only do recognitions if we need to reconfirm the full identity, whereas during tracking we just need a more lightweight verification check to make sure we are tracking the same person. In order to switch over to this we need server support to return many of the same attributes that are returned in the recognition so this is pushed back for now.

◆ ActiveRecognitionAttempt

RecognitionAttempt? RealNetworks.ArgusKit.TrackedObject.ActiveRecognitionAttempt
getset

Returns information about the recognition attempt that is currently executing.

◆ AllowRecognizerToLearn

bool? RealNetworks.ArgusKit.TrackedObject.AllowRecognizerToLearn
getset

The object tracker has this same property at the global level.

This property in the tracked object allows a client to override the global behavior on a per object basis. For example, if allowRecognizerToLearn is false in the object tracker then no new faces can be learned however if this is set to true on a specific tracked object then just this one object can be learned.

This should only be set to something if an override is desired otherwise it will default to the global behavior

◆ Attributes

AttributeSet RealNetworks.ArgusKit.TrackedObject.Attributes
get

Returns the attributes.

◆ CompletedSuccessfulIdentificationAttempt

bool RealNetworks.ArgusKit.TrackedObject.CompletedSuccessfulIdentificationAttempt
getset

This is true if we completed at least one successful identification attempt. The difference between identification and recognition is the criteria is usually more strict and requires a better image for the tracked object. We may attempt several recognition attempts before an identification attempt is made unless the initial image is good. Sometimes we may never do an identification attempt if the image isn't of good enough quality. This can be used to determine if the tracked object ever made an identification attempt, which typically means we got a good quality image. As an example, this can be to classify an object into a different class based on if an identification attempt was attempted versus just a recognition attempt.

◆ CompletedSuccessfulRecognitionAttempt

bool RealNetworks.ArgusKit.TrackedObject.CompletedSuccessfulRecognitionAttempt
getset

This is true if we completed at least one successful recognition attempt. The recognition attempt doesn't have to return any results it just needs to be successful, which means no error response. This can be used to determine if a successful recognition attempt was made for the tracked object at any time and allows the tracked object to be treated differently if no successful recognitions attempts were made. Sometimes a tracked object may never make any recognition attempts because the object doesn't meet various requirements as defined in the object tracker configuration. As an example this can be used to differentiate between unknown faces (no successful recognitions) and strangers (at least one successful recognition, but not recognized).

◆ ConsecutiveFailedIdentityVerifications

int RealNetworks.ArgusKit.TrackedObject.ConsecutiveFailedIdentityVerifications = 0
getset

The number of consecutive failed identity verifications. Once we go over a minimum threshold we no longer attempt to verify the identity and assume it was wrong.

◆ DetectedObject

IDetectedObject RealNetworks.ArgusKit.TrackedObject.DetectedObject
getset

Returns the most recently detected object.

◆ Face

DetectedFace RealNetworks.ArgusKit.TrackedObject.Face
get

Returns face representation if detected object is a face. Will be deprecated soon. Use DetectedObject instead.

◆ IdentityRecognitionThresholdBoost

double RealNetworks.ArgusKit.TrackedObject.IdentityRecognitionThresholdBoost
getset

The amount to boost the identityRecognitionThreshold (property in the face recognizer configuration) by for this specific tracked object when a recognition attempt is made.

◆ IdentityVerificationComplete

bool RealNetworks.ArgusKit.TrackedObject.IdentityVerificationComplete = false
getset

This is true if identity verification has completed on this tracked object.

◆ IsLingering

bool RealNetworks.ArgusKit.TrackedObject.IsLingering
get

Returns true if the face is currently in limbo. Meaning that the face has not been detected in the most recent frames although I think it should still be visible to the camera. It's just that the face is currently not detectable because e.g. the person is looking down, etc, pp. We continue tracking the face for a couple frames before we drop it for good. The face will move out of the in limbo state if we are again able to detect it after a few frames.

◆ IsNew

bool RealNetworks.ArgusKit.TrackedObject.IsNew
getset

Returns true if this is a face that the recognizer has never seen before and thus it just created a person ID for it.

◆ Isolated

bool RealNetworks.ArgusKit.TrackedObject.Isolated
getset

True if the face does not intersect any other tracked face.

◆ IsRecognizedOnDetection

bool RealNetworks.ArgusKit.TrackedObject.IsRecognizedOnDetection
get

Returns true if no further recognition needed.

◆ IsStranger

bool RealNetworks.ArgusKit.TrackedObject.IsStranger
get

Returns true if the receiver is considered to be a stranger.

◆ IsTrackedFace

bool RealNetworks.ArgusKit.TrackedObject.IsTrackedFace
get

Returns true for Face object.

◆ IsTrackedPerson

bool RealNetworks.ArgusKit.TrackedObject.IsTrackedPerson
get

Returns true for Person object.

◆ IsZombie

bool RealNetworks.ArgusKit.TrackedObject.IsZombie
get

Returns true if the tracked face is a zombie. A zombie is a tracked face that has disappeared from the video / screen but for which there is an recognition attempt outstanding. The zombie will be kept around until the recognition attempt has completed.

◆ LingeringCount

int RealNetworks.ArgusKit.TrackedObject.LingeringCount = 0
getset

The number of frames for which this face has been lingering.

◆ LivenessConfidence

double?? RealNetworks.ArgusKit.TrackedObject.LivenessConfidence
get

◆ LivenessConfirmed

bool?? RealNetworks.ArgusKit.TrackedObject.LivenessConfirmed
get

◆ LocalId

Int64 RealNetworks.ArgusKit.TrackedObject.LocalId
get

The local identifier for this face. This identifier is assigned by the face detector and remains valid throughout the lifetime of the face object. The local identifier is unique with respect to the local machine.

◆ MaxSimilarityScore

double? RealNetworks.ArgusKit.TrackedObject.MaxSimilarityScore = null
getset

Max match percentage during lifetime of the tracked object. Range is from zero to above one.

◆ MostRecentPersistedCandidate

RecognitionCandidate? RealNetworks.ArgusKit.TrackedObject.MostRecentPersistedCandidate
getset

The most recently persisted face.

◆ MostRecentPersistenceAttempt

RecognitionAttempt? RealNetworks.ArgusKit.TrackedObject.MostRecentPersistenceAttempt
getset

The most recent face persistence attempt.

◆ MostRecentPredictedFace

PredictedFace RealNetworks.ArgusKit.TrackedObject.MostRecentPredictedFace
getset

The face that was predicted for the current frame. Nil means that no prediction was possible.

◆ MostRecentRecognitionAttempt

RecognitionAttempt? RealNetworks.ArgusKit.TrackedObject.MostRecentRecognitionAttempt
getset

Returns the outcome of the most recent recognition attempt. Nil is returned if no attempt to recognize the face has been made yet.

◆ ObjectType

DetectedObjectType RealNetworks.ArgusKit.TrackedObject.ObjectType
get

Type of detected object this is tracking.

◆ Occluded

bool RealNetworks.ArgusKit.TrackedObject.Occluded
getset

True if the face is partially covered by some other tracked face.

◆ Person

Person RealNetworks.ArgusKit.TrackedObject.Person
getset

Returns the person associated with this tracked object; null is returned if the object is not a person.

◆ PersonPendingIdentityVerification

Person RealNetworks.ArgusKit.TrackedObject.PersonPendingIdentityVerification = null
getset

When combining the person identities from tracked person objects and tracked faces there are some cases where we need to verify the person outside of recognition. For example, if we have a tracked face and tracked person that were matched up and then we lose the tracked face for a while (the person turns around) and then it comes back we don't want to assume it is the correct face. We run a verification against the previous person since it is possible recognitions fail if the person is different and not known by the system. This is valid while we are pending the verification.

◆ ReceivedPositiveFaceConfirmation

bool? RealNetworks.ArgusKit.TrackedObject.ReceivedPositiveFaceConfirmation = null
getset

◆ RecognitionCount

int RealNetworks.ArgusKit.TrackedObject.RecognitionCount = 0
getset

The number of recognition attempts.

◆ State

TrackedObjectState RealNetworks.ArgusKit.TrackedObject.State = TrackedObjectState.Detected
getset

Returns the current state of the tracked face.

◆ TimeOfInitialDetection

Timestamp RealNetworks.ArgusKit.TrackedObject.TimeOfInitialDetection
get

The time when this face was detected for the first time.