Face Engine SDK 5.25.0
A face detection, recognition and tracking engine.
Loading...
Searching...
No Matches
IDescriptor.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <fsdk/IObject.h>
11#include <fsdk/IDetector.h>
12#include <fsdk/FSDKError.h>
13#include <fsdk/Types.h>
14
15#include <limits>
16
17namespace fsdk {
18
19#ifndef DOXYGEN_SHOULD_SKIP_THIS
20 DECLARE_SMARTPTR(IDescriptor);
21 DECLARE_SMARTPTR(IDescriptorBatch);
22 DECLARE_SMARTPTR(IDescriptorMatcher);
23 DECLARE_SMARTPTR(IDescriptorExtractor);
24#endif
25
36 float distance;
37 float similarity;
38
42 MatchingResult(void) noexcept
43 : distance(std::numeric_limits<float>::infinity())
44 , similarity(0.f) {
45 }
46
52 MatchingResult(float distance, float similarity) noexcept
55 }
56 };
57
66
75
95
105 virtual uint32_t getModelVersion() const noexcept = 0;
106
112 virtual DescriptorType getDescriptorType() const noexcept = 0;
113
119 virtual uint32_t getDescriptorLength() const noexcept = 0;
120
128 virtual bool getDescriptor(uint8_t* buffer) const noexcept = 0;
129
134 virtual void setDescriptor(const uint8_t* buffer) noexcept = 0;
135 };
136
153 enum class Error : uint32_t {
154 Ok,
156 BatchFull,
157 Incompatible,
158 Internal,
159 IoError,
160 OutOfRange,
161 };
162
170 virtual Result<Error> add(IDescriptor* descriptor) noexcept = 0;
171
188 virtual Result<Error> add(IDescriptorBatch* batch, uint32_t offset = 0) noexcept = 0;
189
205 virtual Result<Error> add(IDescriptorBatch* batch, uint32_t offset, uint32_t count) noexcept = 0;
206
215 virtual Result<Error> removeFast(uint32_t index) noexcept = 0;
216
225 virtual Result<Error> removeSlow(uint32_t index) noexcept = 0;
226
235 virtual Result<MultiError<ISerializableObject::Error, Error>> loadAndAdd(IArchive* archive) = 0;
236
241 virtual uint32_t getMaxCount() const noexcept = 0;
242
247 virtual uint32_t getCount() const noexcept = 0;
248
255 virtual uint32_t getModelVersion() const noexcept = 0;
256
263 virtual DescriptorType getDescriptorType() const noexcept = 0;
264
269 virtual uint32_t getDescriptorLength() const noexcept = 0;
270
277 virtual ResultValue<FSDKError, IDescriptorPtr> getDescriptorSlow(uint32_t index) const noexcept = 0;
278
286 virtual ResultValue<FSDKError, IDescriptorPtr> getDescriptorFast(uint32_t index) noexcept = 0;
287 };
288
292 template <>
294 static bool isOk(IDescriptorBatch::Error error) noexcept {
295 return error == IDescriptorBatch::Error::Ok;
296 }
297
298 static const char* toString(IDescriptorBatch::Error error) noexcept {
299 switch(error) {
301 return "Ok";
303 return "Error during reading/writing";
305 return "Internal error";
307 return "Batch is full";
309 return "Descriptor out of range";
311 return "Incompatible descriptor";
313 return "Invalid input";
314 default:
315 return "Unknown error";
316 }
317 }
318 };
319
338 extractFromWarpedImage(const Image& warp, IDescriptor* descriptor) const noexcept = 0;
339
358 Span<const Image> warps,
359 IDescriptorBatch* descriptorBatch,
360 IDescriptor* aggregation,
361 Span<float> garbageScoreBatch) const noexcept = 0;
362
379 Span<const Image> warps,
380 IDescriptorBatch* descriptorBatch,
381 Span<float> garbageScoreBatch) const noexcept = 0;
382
393 virtual Result<FSDKError>
394 validate(Span<const Image> warps, Span<Result<FSDKError>> errors) const noexcept = 0;
395
400 virtual uint32_t getModelVersion() const noexcept = 0;
401
406 virtual DescriptorType getDescriptorType() const noexcept = 0;
407
411 using FutureResult = vlc::future<float>;
412
431 virtual FutureResult extractFromWarpedImageBatchAsync(
432 Span<const Image> warps,
433 IDescriptorBatch* descriptorBatch,
434 IDescriptor* aggregation,
435 Span<float> garbageScoreBatch) const = 0;
436 };
437
460 match(const IDescriptor* first, const IDescriptor* second) noexcept = 0;
461
476 const IDescriptor* reference,
477 const IDescriptorBatch* candidates,
478 Span<MatchingResult> results) noexcept = 0;
479
484 virtual uint32_t getModelVersion() const noexcept = 0;
485
495 virtual Result<FSDKError> calcSimilarity(Span<MatchingResult> distances) const noexcept = 0;
496
506 virtual Result<FSDKError> calcDistance(Span<MatchingResult> similarities) const noexcept = 0;
507 };
508
510} // namespace fsdk
Span. @detail Not owning data view. It incapsulated pointer to the continuous array with one or more ...
Definition Span.h:14
#define DECLARE_SMARTPTR(X)
Smart ptr declaration helper macro.
Definition Def.h:56
DescriptorType
Descriptor type enum. Determines which type of descriptor to use.
Definition IDescriptor.h:62
HumanDescriptorVersion
Human descriptor model versions. Determines which version of human descriptor to use.
Definition IDescriptor.h:80
DescriptorVersion
Minimum descriptor model version. Determines which minimum version of descriptor to use.
Definition IDescriptor.h:71
@ DT_HUMAN
human descriptor.
Definition IDescriptor.h:64
@ DT_FACE
face descriptor.
Definition IDescriptor.h:63
@ HDV_PRECISE_V3
precise human descriptor, heavy and slow.
Definition IDescriptor.h:88
@ HDV_REGULAR_V3
regular human descriptor.
Definition IDescriptor.h:89
@ HDV_REGULAR_HUMAN_DESCRIPTOR_VERSION
regular human descriptor.
Definition IDescriptor.h:83
@ HDV_TRACKER_V2
human tracking descriptor, light and fast version.
Definition IDescriptor.h:84
@ HDV_PRECISE_V5
precise human descriptor, heavy and slow.
Definition IDescriptor.h:92
@ HDV_REGULAR_V5
regular human descriptor.
Definition IDescriptor.h:93
@ HDV_PRECISE_V2
precise human descriptor, heavy and slow.
Definition IDescriptor.h:85
@ HDV_PRECISE_V4
precise human descriptor, heavy and slow.
Definition IDescriptor.h:90
@ HDV_TRACKER_HUMAN_DESCRIPTOR_VERSION
human tracking descriptor, light and fast version.
Definition IDescriptor.h:81
@ HDV_REGULAR_V4
regular human descriptor.
Definition IDescriptor.h:91
@ HDV_PRECISE_HUMAN_DESCRIPTOR_VERSION
precise human descriptor, heavy and slow.
Definition IDescriptor.h:82
@ HDV_REGULAR_V2
regular human descriptor.
Definition IDescriptor.h:86
@ HDV_TRACKER_V3
human tracking descriptor, light and fast version.
Definition IDescriptor.h:87
@ DV_MIN_FACE_DESCRIPTOR_VERSION
face descriptor.
Definition IDescriptor.h:72
@ DV_MIN_HUMAN_DESCRIPTOR_VERSION
human descriptor.
Definition IDescriptor.h:73
SDK namespace.
Definition IAGSEstimator.h:8
FSDKError
Common SDK error codes.
Definition FSDKError.h:17
@ Internal
Internal error.
@ InvalidInput
Invalid input.
const char * toString(Image::MemoryResidence residence)
Returns a string representation of a MemoryResidence type.
Definition Result.h:8
Archive interface.
Definition IObject.h:38
Data storage object interface helper.
Definition IObject.h:167
Descriptor batch interface.
Definition IDescriptor.h:148
virtual Result< Error > add(IDescriptor *descriptor) noexcept=0
Add a descriptor to the batch.
virtual Result< Error > add(IDescriptorBatch *batch, uint32_t offset=0) noexcept=0
Add a given descriptor batch content to the current batch. Descriptors to copy from the source batch ...
Error
Descriptor batch error enumeration.
Definition IDescriptor.h:153
@ Incompatible
Trying to add an incompatible descriptor.
@ OutOfRange
Error while accessing descriptor out of range.
@ Internal
An internal processing error (Ex: memopry allocation or misalignment).
@ InvalidInput
Invalid input (Ex: null pointer while a valid object is expected).
@ IoError
Error while trying open/read/write file.
Descriptor extractor interface.
Definition IDescriptor.h:324
virtual ResultValue< FSDKError, float > extractFromWarpedImage(const Image &warp, IDescriptor *descriptor) const noexcept=0
Extract descriptor from a warped image.
virtual Result< FSDKError > validate(Span< const Image > warps, Span< Result< FSDKError > > errors) const noexcept=0
Validate input of multiple frames in a single function call.
vlc::future< float > FutureResult
Common aliases for BestShotQuality asynchronous interface.
Definition IDescriptor.h:411
virtual uint32_t getModelVersion() const noexcept=0
Get algorithm model version this extractor works with.
virtual ResultValue< FSDKError, float > extractFromWarpedImageBatch(Span< const Image > warps, IDescriptorBatch *descriptorBatch, IDescriptor *aggregation, Span< float > garbageScoreBatch) const noexcept=0
Extract batch of descriptors from a batch of images and perform aggregation.
virtual Result< FSDKError > extractFromWarpedImageBatch(Span< const Image > warps, IDescriptorBatch *descriptorBatch, Span< float > garbageScoreBatch) const noexcept=0
Extract batch of descriptors from a batch of images.
Descriptor interface.
Definition IDescriptor.h:100
virtual uint32_t getDescriptorLength() const noexcept=0
return size of descriptor in bytes.
virtual DescriptorType getDescriptorType() const noexcept=0
Get type of descriptor.
virtual void setDescriptor(const uint8_t *buffer) noexcept=0
Copy descriptor from user providedbuffer.
virtual uint32_t getModelVersion() const noexcept=0
Get algorithm model version this descriptor was created with.
virtual bool getDescriptor(uint8_t *buffer) const noexcept=0
Copy descriptor data to user provided buffer.
Descriptor matcher interface.
Definition IDescriptor.h:451
virtual Result< FSDKError > match(const IDescriptor *reference, const IDescriptorBatch *candidates, Span< MatchingResult > results) noexcept=0
Match descriptors 1:M.
virtual uint32_t getModelVersion() const noexcept=0
Get algorithm model version this matcher works with.
virtual ResultValue< FSDKError, MatchingResult > match(const IDescriptor *first, const IDescriptor *second) noexcept=0
Match descriptors 1:1.
Base strong reference counted object interface.
Definition IRefCounted.h:37
Serializable object interface.
Definition IObject.h:71
Error
Serialization nerror codes.
Definition IObject.h:76
Image.
Definition Image.h:38
Result of descriptor matching.
Definition IDescriptor.h:35
MatchingResult(void) noexcept
Initializes result to default values.
Definition IDescriptor.h:42
float distance
distance between descriptor vectors.
Definition IDescriptor.h:36
MatchingResult(float distance, float similarity) noexcept
Initializes result.
Definition IDescriptor.h:52
float similarity
similarity (normalized in [0..1] range).
Definition IDescriptor.h:37
An error structure designed for functions which can return errors from different enum classes.
Definition MultiError.h:14
A structure that encapsulates an action result enumeration.
Definition Result.h:27
Addon for Result to output some value aside the result. Specialization for copiable types.
Definition ResultValue.h:21