Enrollment 28.2.0
Loading...
Searching...
No Matches
ModalitiesTemplate.h
Go to the documentation of this file.
1
9
10#pragma once
11
13#include "enrollment/Export.h"
22#include <memory>
23#include <vector>
24
25namespace inno
26{
27 extern "C"
28 {
29 INNO_ENROLLMENT_API void inno_local_SerializeModalitiesTemplate(const inno_PrintTemplate* prints,
30 size_t printsSize,
31 const inno_Template* faces,
32 size_t facesSize,
33 const inno_Template* irises,
34 size_t irisesSize,
35 inno_AllocateData allocator,
36 void* container,
37 ErrorCallbacks errorCallbacks);
38 using inno_PrintTemplateBuilder = void (*)(void*, const inno_PrintTemplate&, ErrorCallbacks);
39 using inno_TemplateBuilder = void (*)(void*, const inno_Template&);
40 INNO_ENROLLMENT_API void inno_local_DeserializeModalitiesTemplate(const unsigned char* serializedData,
41 size_t serializedDataSize,
42 inno_PrintTemplateBuilder printFactory,
43 void* printContainer,
44 inno_TemplateBuilder faceFactory,
45 void* faceContainer,
46 inno_TemplateBuilder irisFactory,
47 void* irisContainer,
48 ErrorCallbacks errorCallbacks);
49 }
53 */
54 class ModalitiesTemplate : public Serializable
55 {
56 public:
60 */
61 [[nodiscard]] std::vector<std::shared_ptr<FaceTemplate>> GetFaceTemplates() const
62 {
63 return fs;
64 }
68 */
69 [[nodiscard]] std::vector<std::shared_ptr<IrisTemplate>> GetIrisTemplates() const
70 {
71 return is;
72 }
76 */
77 [[nodiscard]] std::vector<std::shared_ptr<PrintTemplate>> GetPrintTemplates() const
78 {
79 return ps;
80 }
85 */
86 [[nodiscard]] std::vector<uint8_t> GetModalitiesTemplateData() const
87 {
88 auto ft = inno_Template::FromTemplates(fs);
89 auto it = inno_Template::FromTemplates(is);
90 auto pt = inno_PrintTemplate::FromTemplates(ps);
91
92 std::vector<uint8_t> templateData;
93 auto dataAllocator = +[](void* container, size_t length) -> uint8_t*
94 {
95 // It is "safe" cast because we forward pointer to vector created in "user cpp space"
96 // (the space where this header is compiled) and the "own cpp space" (out compiled shared library)
97 // wil provide it back for us to the same "user cpp space". We have all spaces under control.
98 // It is used to do not have unecessary copy data from "own cpp space" into "user cpp space".
99 std::vector<uint8_t>& vec = *static_cast<std::vector<uint8_t>*>(container);
100 vec.resize(length);
101 return vec.data();
102 };
103 inno_local_SerializeModalitiesTemplate(pt.data(),
104 pt.size(),
105 ft.data(),
106 ft.size(),
107 it.data(),
108 it.size(),
109 dataAllocator,
110 &templateData,
111 ThrowOnError{});
112
113 return templateData;
114 }
115
120 */
121 static std::shared_ptr<ModalitiesTemplate> Create(const std::vector<uint8_t>& data)
122 {
123 return std::shared_ptr<ModalitiesTemplate>(new ModalitiesTemplate(data));
124 }
125
132 */
133 static std::shared_ptr<ModalitiesTemplate> Create(std::vector<std::shared_ptr<PrintTemplate>> prints,
134 std::vector<std::shared_ptr<FaceTemplate>> faces,
135 std::vector<std::shared_ptr<IrisTemplate>> irises)
136 {
137 return std::shared_ptr<ModalitiesTemplate>(
138 new ModalitiesTemplate(std::move(prints), std::move(faces), std::move(irises)));
139 }
140
145 */
146 [[nodiscard]] std::shared_ptr<ModalitiesICSTemplate> ToModalitiesICSTemplate() const
147 {
149 return ToModalitiesICSTemplate(factory);
150 }
151
157 */
158 [[nodiscard]] std::shared_ptr<ModalitiesICSTemplate> ToModalitiesICSTemplate(
159 const ModalitiesICSTemplateFactory& factory) const
160 {
162 }
163
172 */
173 [[nodiscard]] ModalityScore SimilarWith(const ModalitiesTemplate& gallery,
174 const ModalitiesMatcher& matcher) const
175 {
176 return matcher.Match(*this, gallery);
177 }
179 void WriteTo(Writer& w) const override
180 {
181 w.WriteArray("p", ps);
182 w.WriteArray("f", fs);
183 w.WriteArray("i", is);
184 }
185
186 ModalitiesTemplate(const ModalitiesTemplate&) = default;
188 ModalitiesTemplate& operator=(const ModalitiesTemplate&) = default;
189 ModalitiesTemplate& operator=(ModalitiesTemplate&&) = default;
190 ModalitiesTemplate() = default;
191 virtual ~ModalitiesTemplate() = default;
192
193 private:
194 std::vector<std::shared_ptr<PrintTemplate>> ps;
195 std::vector<std::shared_ptr<FaceTemplate>> fs;
196 std::vector<std::shared_ptr<IrisTemplate>> is;
197
198 explicit ModalitiesTemplate(const std::vector<uint8_t>& d)
199 {
200
201 auto printBuilder = +[](void* container, const inno_PrintTemplate& tmpl, ErrorCallbacks err) -> void
202 {
203 ForwardExceptionToCallbacks(err,
204 [&]()
205 {
206 auto* printContainer =
207 static_cast<std::vector<std::shared_ptr<PrintTemplate>>*>(container);
208 printContainer->push_back(inno_PrintTemplate::ToTemplate(tmpl));
209 });
210 };
211 auto faceBuilder = +[](void* container, const inno_Template& tmpl) -> void
212 {
213 auto* faceContainer = static_cast<std::vector<std::shared_ptr<FaceTemplate>>*>(container);
214 faceContainer->push_back(inno_Template::ToFaceTemplate(tmpl));
215 };
216 auto irisBuilder = +[](void* container, const inno_Template& tmpl) -> void
217 {
218 auto* irisContainer = static_cast<std::vector<std::shared_ptr<IrisTemplate>>*>(container);
219 irisContainer->push_back(inno_Template::ToIrisTemplate(tmpl));
220 };
221
222 inno_local_DeserializeModalitiesTemplate(
223 d.data(), d.size(), printBuilder, &ps, faceBuilder, &fs, irisBuilder, &is, ThrowOnError{});
224 }
225
232 explicit ModalitiesTemplate(std::vector<std::shared_ptr<PrintTemplate>> prints,
233 std::vector<std::shared_ptr<FaceTemplate>> faces,
234 std::vector<std::shared_ptr<IrisTemplate>> irises)
235 : ps(std::move(prints))
236 , fs(std::move(faces))
237 , is(std::move(irises))
238 {
239 }
240 };
241} // namespace inno
ModalitiesICSTemplateDefaultFactory creates biometric representations from all modality templates.
Definition ModalitiesICSTemplateDefaultFactory.h:28
ModalitiesICSTemplateFactory creates biometric representations from all modality templates.
Definition ModalitiesICSTemplateFactory.h:26
virtual std::shared_ptr< ModalitiesICSTemplate > CreateModalitiesICSTemplate(const std::vector< std::shared_ptr< ICSTemplate > > &printTemplates, const std::vector< std::shared_ptr< FaceTemplate > > &faceTemplates, const std::vector< std::shared_ptr< IrisTemplate > > &irisTemplates) const =0
It creates ModalitiesICSTemplate.
It is general matcher for ModalitiesTemplate - Applicant template in serialized form used for biome...
Definition ModalitiesMatcher.h:22
virtual ModalityScore Match(const ModalitiesTemplate &probe, const ModalitiesTemplate &gallery) const =0
Calculates similarity score of probe and gallery template for each modality.
Applicant template in serialized form used for biometric operations.
Definition ModalitiesTemplate.h:54
std::shared_ptr< ModalitiesICSTemplate > ToModalitiesICSTemplate() const
Converts template to Innovatrics template format useful for verification.
Definition ModalitiesTemplate.h:145
std::vector< std::shared_ptr< PrintTemplate > > GetPrintTemplates() const
Provides PrintTemplate objects.
Definition ModalitiesTemplate.h:76
ModalityScore SimilarWith(const ModalitiesTemplate &gallery, const ModalitiesMatcher &matcher) const
It calculates similarity score between this and other applicant template.
Definition ModalitiesTemplate.h:172
static std::shared_ptr< ModalitiesTemplate > Create(std::vector< std::shared_ptr< PrintTemplate > > prints, std::vector< std::shared_ptr< FaceTemplate > > faces, std::vector< std::shared_ptr< IrisTemplate > > irises)
Create ModalitiesTemplate object from templates.
Definition ModalitiesTemplate.h:132
static std::shared_ptr< ModalitiesTemplate > Create(const std::vector< uint8_t > &data)
Create ModalitiesTemplate object from serialized data.
Definition ModalitiesTemplate.h:120
std::vector< std::shared_ptr< FaceTemplate > > GetFaceTemplates() const
Provides FaceTemplate objects.
Definition ModalitiesTemplate.h:60
std::vector< uint8_t > GetModalitiesTemplateData() const
It provides Applicant template data.
Definition ModalitiesTemplate.h:85
std::vector< std::shared_ptr< IrisTemplate > > GetIrisTemplates() const
Provides IrisTemplate objects.
Definition ModalitiesTemplate.h:68
std::shared_ptr< ModalitiesICSTemplate > ToModalitiesICSTemplate(const ModalitiesICSTemplateFactory &factory) const
Converts template to Innovatrics template format useful for verification.
Definition ModalitiesTemplate.h:157
void WriteTo(Writer &w) const override
Write itself into writer.
Definition ModalitiesTemplate.h:178
Contains scores of multiple modalities.
Definition SimilarityScore.h:75
static std::vector< std::shared_ptr< ICSTemplate > > ToICSTemplates(const std::vector< std::shared_ptr< PrintTemplate > > &templates)
Converts a PrintTemplate objects into a ICSTemplate objects.
Definition PrintTemplate.h:38
Provides interface for serialization of all classes.
Definition Writer.h:164
void WriteArray(const char *name, const std::vector< uint8_t > &value)
Serialize bytes from vector.
Definition Writer.h:233