11#include "enrollment/Export.h"
17#include <shared_mutex>
18#include <unordered_map>
26 class ModalitiesGalleryReference
39 [[nodiscard]]
virtual size_t GetIndex()
const = 0;
41 ModalitiesGalleryReference() =
default;
42 virtual ~ModalitiesGalleryReference() =
default;
43 ModalitiesGalleryReference(
const ModalitiesGalleryReference&) =
default;
44 ModalitiesGalleryReference(ModalitiesGalleryReference&&) =
default;
45 ModalitiesGalleryReference& operator=(
const ModalitiesGalleryReference&) =
default;
46 ModalitiesGalleryReference& operator=(ModalitiesGalleryReference&&) =
default;
59 [[nodiscard]]
size_t GetIndex() const final
77 static std::shared_ptr<ModalitiesGalleryIndexedTemplate>
Downcast(
78 std::shared_ptr<ModalitiesGalleryReference>& reference)
80 return std::dynamic_pointer_cast<ModalitiesGalleryIndexedTemplate>(reference);
90 , c(std::move(reference))
96 std::shared_ptr<ModalitiesTemplate> c;
164 " of Modalities Gallery is unknown");
184 writer.Write(
"tc", threads);
185 writer.Write(
"t",
static_cast<int>(type));
215 static constexpr unsigned int DefaultThreads = 1;
216 unsigned int threads = DefaultThreads;
307 class ModalitiesGallery
316 static std::shared_ptr<ModalitiesGallery>
Create()
331 return std::shared_ptr<ModalitiesGallery>(
343 return std::shared_ptr<ModalitiesGallery>(
375 void Add(std::shared_ptr<ModalitiesGalleryReference> reference)
377 if (reference ==
nullptr)
382 const auto id = reference->GetIndex();
386 const std::unique_lock lock(mux);
387 gallery->Add(
id, reference->GetModalitiesTemplates());
388 references[id] = std::move(reference);
404 const std::unique_lock lock(mux);
405 gallery->Remove(index);
406 references.erase(index);
412 class ModalitiesCandidates
420 [[nodiscard]] std::vector<std::shared_ptr<ModalitiesGalleryReference>>
GetPrintCandidates()
const
429 [[nodiscard]] std::vector<std::shared_ptr<ModalitiesGalleryReference>>
GetFaceCandidates()
const
438 [[nodiscard]] std::vector<std::shared_ptr<ModalitiesGalleryReference>>
GetIrisCandidates()
const
446 [[nodiscard]] std::shared_ptr<ModalitiesTemplate>
GetProbe()
const
452 std::vector<std::shared_ptr<ModalitiesGalleryReference>> fs,
453 std::vector<std::shared_ptr<ModalitiesGalleryReference>> is,
454 std::shared_ptr<ModalitiesTemplate> probe)
455 : prints(std::move(ps))
456 , faces(std::move(fs))
457 , irises(std::move(is))
458 , p(std::move(probe))
461 ModalitiesCandidates() =
delete;
462 ~ModalitiesCandidates() =
default;
463 ModalitiesCandidates(
const ModalitiesCandidates&) =
default;
464 ModalitiesCandidates(ModalitiesCandidates&&) =
default;
465 ModalitiesCandidates& operator=(
const ModalitiesCandidates&) =
default;
466 ModalitiesCandidates& operator=(ModalitiesCandidates&&) =
default;
469 std::vector<std::shared_ptr<ModalitiesGalleryReference>> prints;
470 std::vector<std::shared_ptr<ModalitiesGalleryReference>> faces;
471 std::vector<std::shared_ptr<ModalitiesGalleryReference>> irises;
472 std::shared_ptr<ModalitiesTemplate> p;
498 const std::shared_ptr<ModalitiesTemplate>& probe,
499 size_t maxCandidates)
const
503 const std::shared_lock lock(mux);
505 auto modalityIdentifiers = gallery->IdentifyModalities(probe, maxCandidates);
506 const auto& printIds = modalityIdentifiers->GetPrintIdentifiers();
507 std::vector<std::shared_ptr<ModalitiesGalleryReference>> pc(printIds.size());
509 printIds.begin(), printIds.end(), pc.begin(), [&](
const auto& t) { return references.at(t); });
510 const auto& faceIds = modalityIdentifiers->GetFaceIdentifiers();
511 std::vector<std::shared_ptr<ModalitiesGalleryReference>> fc(faceIds.size());
512 std::transform(faceIds.begin(), faceIds.end(), fc.begin(), [&](
const auto& t) { return references.at(t); });
513 const auto& irisIds = modalityIdentifiers->GetIrisIdentifiers();
514 std::vector<std::shared_ptr<ModalitiesGalleryReference>> ic(irisIds.size());
515 std::transform(irisIds.begin(), irisIds.end(), ic.begin(), [&](
const auto& t) { return references.at(t); });
517 return std::make_shared<ModalitiesCandidates>(std::move(pc), std::move(fc), std::move(ic), probe);
531 [[nodiscard]] std::shared_ptr<ModalitiesGalleryReference>
GetCandidate()
const
546 : c(std::move(candidate))
547 , s(std::move(score))
550 ~Candidate() =
default;
551 Candidate(
const Candidate&) =
default;
552 Candidate(Candidate&&) =
default;
553 Candidate& operator=(
const Candidate&) =
default;
554 Candidate& operator=(Candidate&&) =
default;
557 std::shared_ptr<ModalitiesGalleryReference> c;
576 const std::shared_ptr<ModalitiesCandidates>& identifiedModalityCandidates,
577 size_t maxCandidates)
583 std::make_shared<NullLogger>() };
585 const auto& probe = identifiedModalityCandidates->GetProbe();
586 const auto& probePrints = probe->GetPrintTemplates();
587 if (!std::all_of(probePrints.begin(),
589 [](
const auto& print) { return print->HasIcsRepresentation(); }))
593 for (
const auto& c : identifiedModalityCandidates->GetPrintCandidates())
595 const auto& candidate = c->GetModalitiesTemplates();
596 const auto& candidatePrints = candidate->GetPrintTemplates();
597 if (std::any_of(candidatePrints.begin(),
598 candidatePrints.end(),
599 [](
const auto& print) { return !print->HasIcsRepresentation(); }))
605 return Consolidate(identifiedModalityCandidates, maxCandidates, matcher);
621 const std::shared_ptr<ModalitiesCandidates>& identifiedModalityCandidates,
622 size_t maxCandidates,
625 std::unordered_map<size_t, std::shared_ptr<ModalitiesGalleryReference>> uniqueCandidates;
627 for (
const auto& c : identifiedModalityCandidates->GetPrintCandidates())
629 uniqueCandidates[c->GetIndex()] = c;
631 for (
const auto& c : identifiedModalityCandidates->GetFaceCandidates())
633 uniqueCandidates[c->GetIndex()] = c;
635 for (
const auto& c : identifiedModalityCandidates->GetIrisCandidates())
637 uniqueCandidates[c->GetIndex()] = c;
640 const auto& probe = identifiedModalityCandidates->GetProbe();
642 std::vector<Candidate> result;
643 for (
const auto& [_, c] : uniqueCandidates)
645 const auto& candidate = c->GetModalitiesTemplates();
646 auto score = probe->SimilarWith(*candidate, matcher);
647 result.emplace_back(c, score);
653 [](
const auto& a,
const auto& b)
655 auto as = a.GetScore();
656 auto bs = b.GetScore();
657 constexpr unsigned int FaceNormalizerConstant = 10;
659 { as.GetPrintScore(), as.GetFaceScore() * FaceNormalizerConstant, as.GetIrisScore() }) >
661 { bs.GetPrintScore(), bs.GetFaceScore() * FaceNormalizerConstant, bs.GetIrisScore() });
664 if (result.size() > maxCandidates)
666 result.resize(maxCandidates);
700 [[nodiscard]] std::vector<Candidate>
Identify(
const std::shared_ptr<ModalitiesTemplate>& probe,
701 size_t maxCandidates)
const
704 return Consolidate(modalitiesCandidates, maxCandidates, consolidateMatcher);
714 mutable std::shared_mutex mux;
715 std::shared_ptr<IndexedModalitiesGallery> gallery;
718 : gallery(std::move(g))
722 std::unordered_map<size_t, std::shared_ptr<ModalitiesGalleryReference>> references;
723 ModalitiesVerifyMatcher::Config matcherConfig;
724 ModalitiesVerifyMatcher consolidateMatcher = { matcherConfig,
727 std::make_shared<NullLogger>() };
@ PRINT_EMBEDDING
The gallery identification of candidates is based on print EmbeddingTemplate.
Definition IndexedModalitiesGallery.h:72
@ PRINT_ICS_TEMPLATE
The gallery identification of candidates is based on print ICSTemplate.
Definition IndexedModalitiesGallery.h:67
ModalitiesGalleryType
Type of ModalitiesGallery.
Definition ModalitiesGallery.h:102
@ PRINT_EMBEDDING
The gallery identification of candidates is based on print EmbeddingTemplate.
Definition ModalitiesGallery.h:110
@ PRINT_ICS_TEMPLATE
The gallery identification of candidates is based on print ICSTemplate.
Definition ModalitiesGallery.h:105
Base exception for all enrollment-sdk invalid argument exceptions.
Definition EnrollmentException.h:96
Base exception for all enrollment-sdk runtime exceptions.
Definition EnrollmentException.h:84
static std::shared_ptr< MultiModalityExecutor > Get()
Provides current executor.
Definition MultiModalityExecutor.h:440
IndexedModalitiesGallery configuration.
Definition IndexedModalitiesGallery.h:80
void SetGalleryType(IndexedModalitiesGalleryType value)
Set type of Modalities Gallery.
Definition IndexedModalitiesGallery.h:116
void SetThreadsCount(unsigned int value)
Set number of threads used by gallery.
Definition IndexedModalitiesGallery.h:89
static std::shared_ptr< IndexedModalitiesGallery > Create(IndexedModalitiesGalleryConfig config)
Create indexed gallery of references.
Definition IndexedModalitiesGallery.h:211
ModalitiesGallery configuration.
Definition ModalitiesGallery.h:118
void WriteTo(Writer &writer) const final
Function serializes configuration via provided Writer.
Definition ModalitiesGallery.h:181
IndexedModalitiesGalleryConfig ToIndexedModalitiesGalleryConfig() const
Function converts configuration to IndexedModalitiesGalleryConfig.
Definition ModalitiesGallery.h:190
unsigned int GetThreadCount() const
Get number of processing threads.
Definition ModalitiesGallery.h:141
ModalitiesGalleryType GetGalleryType() const
Get type of Modalities Gallery.
Definition ModalitiesGallery.h:172
void SetThreadsCount(unsigned int value)
Set number of threads used by gallery.
Definition ModalitiesGallery.h:127
void SetGalleryType(ModalitiesGalleryType value)
Set type of Modalities Gallery.
Definition ModalitiesGallery.h:153
ModalitiesGalleryConfig()=default
Default configuration is.
ModalitiesGalleryIndexedTemplate(size_t index, std::shared_ptr< ModalitiesTemplate > reference)
Create indexed reference with given index and template.
Definition ModalitiesGallery.h:87
size_t GetIndex() const final
Provides reference index.
Definition ModalitiesGallery.h:58
static std::shared_ptr< ModalitiesGalleryIndexedTemplate > Downcast(std::shared_ptr< ModalitiesGalleryReference > &reference)
Downcasts ModalitiesGalleryIndexedTemplate interface into indexed reference.
Definition ModalitiesGallery.h:76
std::shared_ptr< ModalitiesTemplate > GetModalitiesTemplates() const final
Provides reference ModalitiesTemplate.
Definition ModalitiesGallery.h:66
virtual size_t GetIndex() const =0
Provides unique reference index.
virtual std::shared_ptr< ModalitiesTemplate > GetModalitiesTemplates() const =0
Provides reference ModalitiesTemplate.
Found candidate.
Definition ModalitiesGallery.h:524
ModalityScore GetScore() const
Return score for candidate.
Definition ModalitiesGallery.h:538
std::shared_ptr< ModalitiesGalleryReference > GetCandidate() const
Return identified candidate.
Definition ModalitiesGallery.h:530
Contains candidates per each modality.
Definition ModalitiesGallery.h:412
std::vector< std::shared_ptr< ModalitiesGalleryReference > > GetPrintCandidates() const
Returns best candidates for print modality.
Definition ModalitiesGallery.h:419
std::vector< std::shared_ptr< ModalitiesGalleryReference > > GetIrisCandidates() const
Returns best candidates for iris modality.
Definition ModalitiesGallery.h:437
std::shared_ptr< ModalitiesTemplate > GetProbe() const
Returns probe for which candidates are searched.
Definition ModalitiesGallery.h:445
std::vector< std::shared_ptr< ModalitiesGalleryReference > > GetFaceCandidates() const
Returns best candidates for face modality.
Definition ModalitiesGallery.h:428
Gallery of references.
Definition ModalitiesGallery.h:307
static std::vector< Candidate > Consolidate(const std::shared_ptr< ModalitiesCandidates > &identifiedModalityCandidates, size_t maxCandidates)
Merges previously identified modality candidates into list of overall best candidates.
Definition ModalitiesGallery.h:574
std::vector< Candidate > Identify(const std::shared_ptr< ModalitiesTemplate > &probe, size_t maxCandidates) const
Search for given probe.
Definition ModalitiesGallery.h:699
static std::shared_ptr< ModalitiesGallery > Create(ModalitiesGalleryType type)
Create gallery of references.
Definition ModalitiesGallery.h:326
void Remove(size_t index)
Removes the ModalitiesGalleryReference stored at the specified index from the gallery.
Definition ModalitiesGallery.h:399
void Add(std::shared_ptr< ModalitiesGalleryReference > reference)
Adds ModalitiesGalleryReference into gallery.
Definition ModalitiesGallery.h:374
static std::shared_ptr< ModalitiesGallery > Create()
Create gallery of references.
Definition ModalitiesGallery.h:315
static std::vector< Candidate > Consolidate(const std::shared_ptr< ModalitiesCandidates > &identifiedModalityCandidates, size_t maxCandidates, const ModalitiesMatcher &matcher)
Merges previously identified modality candidates into list of overall best candidates.
Definition ModalitiesGallery.h:619
static std::shared_ptr< ModalitiesGallery > Create(const ModalitiesGalleryConfig &config)
Create gallery of references.
Definition ModalitiesGallery.h:340
std::shared_ptr< ModalitiesCandidates > IdentifyModalities(const std::shared_ptr< ModalitiesTemplate > &probe, size_t maxCandidates) const
Search for given probe.
Definition ModalitiesGallery.h:496
It is general matcher for ModalitiesTemplate - Applicant template in serialized form used for biome...
Definition ModalitiesMatcher.h:22
ModalitiesVerifyMatcher configuration.
Definition ModalitiesVerifyMatcher.h:33
ModalitiesVerifyMatcher is template matcher that uses Innovatrics proprietary verification algorithm.
Definition ModalitiesVerifyMatcher.h:27
Contains scores of multiple modalities.
Definition SimilarityScore.h:75
Null argument is not allowed.
Definition EnrollmentException.h:156
Provides interface for serialization of all classes.
Definition Writer.h:164