13#include "enrollment/Export.h"
28 struct INNO_ENROLLMENT_API inno_IrisCrop_Rectangle
40 struct INNO_ENROLLMENT_API inno_IrisDetector_result
42 static const unsigned int MaxIrises = 2;
43 void* irises[MaxIrises];
44 float confidences[MaxIrises];
45 inno_IrisCrop_Rectangle pupilRoundingBoxes[MaxIrises];
46 inno_IrisCrop_Rectangle irisRoundingBoxes[MaxIrises];
50 using IrisDestroyer = void (*)(
void*);
51 using IrisAllocator = uint8_t* (*)(
void*,
size_t);
52 using inno_AddPoint = void(
void*,
int,
int);
57 static constexpr size_t MaxErrorMessage = 200;
58 virtual inno_IrisDetector_result Detect(
const std::shared_ptr<Logger>& log,
65 unsigned int detectorType,
66 ErrorCallbacks errorCallbacks) = 0;
67 virtual void Extract(
void* irisItem,
68 IrisAllocator allocator,
70 unsigned int extractorType,
71 ErrorCallbacks errorCallbacks) = 0;
72 virtual void Match(
const uint8_t* probe,
74 const uint8_t* gallery,
77 ErrorCallbacks errorCallbacks) = 0;
78 virtual void IrisQuality(
const uint8_t* tmpl,
81 ErrorCallbacks errorCallbacks) = 0;
82 virtual void GetTemplateVersion(
const uint8_t* tmpl,
84 uint32_t* modelVersion,
85 uint32_t* enrollmentVersion,
86 ErrorCallbacks errorCallbacks) = 0;
87 virtual IrisDestroyer DestroyImpl() = 0;
89 virtual void CalculateEyelid(
void* irisItem,
90 size_t xCoordinateCount,
91 inno_AddPoint addPoint,
93 ErrorCallbacks errorCallbacks) = 0;
95 IrisExecutor() =
default;
96 virtual ~IrisExecutor() =
default;
97 IrisExecutor(
const IrisExecutor&) =
delete;
98 IrisExecutor(IrisExecutor&&) =
delete;
99 IrisExecutor& operator=(
const IrisExecutor&) =
delete;
100 IrisExecutor& operator=(IrisExecutor&&) =
delete;
105 INNO_ENROLLMENT_API inno_IrisDetector_result inno_local_IrisDetector_Detect(LoggerCallBacks logCallbacks,
112 unsigned int detectorType,
113 ErrorCallbacks errorCallbacks);
114 INNO_ENROLLMENT_API
void inno_local_Iris_ReleaseItem(
void* irisItem);
116 INNO_ENROLLMENT_API
void inno_local_Iris_TemplateQuality(
const uint8_t* tmpl,
119 ErrorCallbacks errorCallbacks);
121 INNO_ENROLLMENT_API
void inno_local_Iris_GetTemplateVersion(
const uint8_t* tmpl,
123 uint32_t* modelVersion,
124 uint32_t* enrollmentVersion,
125 ErrorCallbacks errorCallbacks);
127 INNO_ENROLLMENT_API
void inno_local_Iris_Extract(
void* irisItem,
128 IrisAllocator allocator,
130 unsigned int extractorType,
131 ErrorCallbacks errorCallbacks);
132 INNO_ENROLLMENT_API
void inno_local_Iris_Match(
const uint8_t* probe,
134 const uint8_t* gallery,
137 ErrorCallbacks errorCallbacks);
138 INNO_ENROLLMENT_API
int inno_local_Iris_TemplateInfo(
const uint8_t* tmpl,
141 uint32_t* modelVersion,
142 ErrorCallbacks errorCallbacks);
144 INNO_ENROLLMENT_API
void inno_local_Iris_CalculateEyelid(
void* irisItem,
145 size_t xCoordinateCount,
146 inno_AddPoint addPoint,
148 ErrorCallbacks errorCallbacks);
151 class LocalIrisExecutor :
public IrisExecutor
154 inno_IrisDetector_result Detect(
const std::shared_ptr<Logger>& log,
161 unsigned int detectorType,
162 ErrorCallbacks errorCallbacks)
final
164 const CallbackLogger slog(log);
165 return inno_local_IrisDetector_Detect(
166 slog.GetCallbacks(), height, width, dpi, data, minIrisSize, maxIrisSize, detectorType, errorCallbacks);
168 void Extract(
void* irisItem,
169 IrisAllocator allocator,
171 unsigned int extractorType,
172 ErrorCallbacks errorCallbacks)
final
174 inno_local_Iris_Extract(irisItem, allocator, container, extractorType, errorCallbacks);
176 void Match(
const uint8_t* probe,
178 const uint8_t* gallery,
181 ErrorCallbacks errorCallbacks)
final
183 inno_local_Iris_Match(probe, probeSize, gallery, gallerySize, score, errorCallbacks);
185 IrisDestroyer DestroyImpl() final
187 return inno_local_Iris_ReleaseItem;
190 void IrisQuality(
const uint8_t* tmpl,
size_t tmplSize, int32_t* quality, ErrorCallbacks errorCallbacks)
final
192 inno_local_Iris_TemplateQuality(tmpl, tmplSize, quality, errorCallbacks);
195 void GetTemplateVersion(
const uint8_t* tmpl,
197 uint32_t* modelVersion,
198 uint32_t* enrollmentVersion,
199 ErrorCallbacks errorCallbacks)
final
201 inno_local_Iris_GetTemplateVersion(tmpl, tmplSize, modelVersion, enrollmentVersion, errorCallbacks);
204 void CalculateEyelid(
void* irisItem,
205 size_t xCoordinateCount,
206 inno_AddPoint addPoint,
208 ErrorCallbacks errorCallbacks)
final
210 inno_local_Iris_CalculateEyelid(irisItem, xCoordinateCount, addPoint, addContainer, errorCallbacks);
213 LocalIrisExecutor() =
default;
214 virtual ~LocalIrisExecutor() =
default;
215 LocalIrisExecutor(
const LocalIrisExecutor&) =
delete;
216 LocalIrisExecutor(LocalIrisExecutor&&) =
delete;
217 LocalIrisExecutor& operator=(
const LocalIrisExecutor&) =
delete;
218 LocalIrisExecutor& operator=(LocalIrisExecutor&&) =
delete;
223 struct inno_grcp_IrisChannel;
224 INNO_ENROLLMENT_API inno_grcp_IrisChannel* inno_grpc_Iris_Channel_Create(
const char* endpoint);
225 INNO_ENROLLMENT_API
void inno_grpc_Iris_Channel_Destroy(inno_grcp_IrisChannel* channel);
227 INNO_ENROLLMENT_API inno_IrisDetector_result inno_grpc_IrisDetector_Detect(inno_grcp_IrisChannel* channel,
228 LoggerCallBacks logCallbacks,
235 unsigned int detectorType,
236 ErrorCallbacks errorCallbacks);
237 INNO_ENROLLMENT_API
void inno_grpc_Iris_ReleaseItem(
void* irisItem);
239 INNO_ENROLLMENT_API
void inno_grpc_Iris_TemplateQuality(
void* irisItem,
243 ErrorCallbacks errorCallbacks);
245 INNO_ENROLLMENT_API
void inno_grpc_Iris_GetTemplateVersion(
void* irisItem,
248 uint32_t* modelVersion,
249 uint32_t* enrollmentVersion,
250 ErrorCallbacks errorCallbacks);
252 INNO_ENROLLMENT_API
void inno_grpc_Iris_Extract(
void* irisItem,
253 IrisAllocator allocator,
255 unsigned int extractorType,
256 ErrorCallbacks errorCallbacks);
257 INNO_ENROLLMENT_API
void inno_grpc_Iris_Match(
void* irisItem,
258 const uint8_t* probe,
260 const uint8_t* gallery,
263 ErrorCallbacks errorCallbacks);
264 INNO_ENROLLMENT_API
void inno_grpc_Iris_CalculateEyelid(
void* irisItem,
265 size_t xCoordinateCount,
266 inno_AddPoint addPoint,
268 ErrorCallbacks errorCallbacks);
271 class GrpcIrisExecutor :
public IrisExecutor
274 inno_IrisDetector_result Detect(
const std::shared_ptr<Logger>& log,
281 unsigned int detectorType,
282 ErrorCallbacks errorCallbacks)
final
284 const CallbackLogger slog(log);
285 return inno_grpc_IrisDetector_Detect(channel.get(),
296 void Extract(
void* irisItem,
297 IrisAllocator allocator,
299 unsigned int extractorType,
300 ErrorCallbacks errorCallbacks)
final
302 inno_grpc_Iris_Extract(irisItem, allocator, container, extractorType, errorCallbacks);
304 void Match(
const uint8_t* probe,
306 const uint8_t* gallery,
309 ErrorCallbacks errorCallbacks)
final
311 inno_grpc_Iris_Match(channel.get(), probe, probeSize, gallery, gallerySize, score, errorCallbacks);
313 IrisDestroyer DestroyImpl() final
315 return inno_grpc_Iris_ReleaseItem;
318 void IrisQuality(
const uint8_t* tmpl,
size_t tmplSize, int32_t* quality, ErrorCallbacks errorCallbacks)
final
320 inno_grpc_Iris_TemplateQuality(channel.get(), tmpl, tmplSize, quality, errorCallbacks);
323 void GetTemplateVersion(
const uint8_t* tmpl,
325 uint32_t* modelVersion,
326 uint32_t* enrollmentVersion,
327 ErrorCallbacks errorCallbacks)
final
329 inno_grpc_Iris_GetTemplateVersion(
330 channel.get(), tmpl, tmplSize, modelVersion, enrollmentVersion, errorCallbacks);
333 void CalculateEyelid(
void* irisItem,
334 size_t xCoordinateCount,
335 inno_AddPoint addPoint,
337 ErrorCallbacks errorCallbacks)
final
339 inno_grpc_Iris_CalculateEyelid(irisItem, xCoordinateCount, addPoint, addContainer, errorCallbacks);
347 explicit GrpcIrisExecutor(
const std::string& endPoint)
348 : channel(inno_grpc_Iris_Channel_Create(endPoint.c_str()), inno_grpc_Iris_Channel_Destroy)
352 GrpcIrisExecutor() =
delete;
353 virtual ~GrpcIrisExecutor() =
default;
354 GrpcIrisExecutor(
const GrpcIrisExecutor&) =
delete;
355 GrpcIrisExecutor(GrpcIrisExecutor&&) =
delete;
356 GrpcIrisExecutor& operator=(
const GrpcIrisExecutor&) =
delete;
357 GrpcIrisExecutor& operator=(GrpcIrisExecutor&&) =
delete;
360 std::unique_ptr<inno_grcp_IrisChannel, void (*)(inno_grcp_IrisChannel*)> channel;
369 class GlobalIrisExecutor
376 static std::shared_ptr<IrisExecutor>
Get()
378 return GlobalIrisExecutor::Instance().GetInternal();
386 static void Set(std::shared_ptr<IrisExecutor> executor)
388 if (executor ==
nullptr)
393 GlobalIrisExecutor::Instance().SetInternal(std::move(executor));
404 std::shared_ptr<IrisExecutor> pe;
413 std::shared_ptr<IrisExecutor> GetInternal()
415 const std::scoped_lock lock(peMux);
419 void SetInternal(std::shared_ptr<IrisExecutor> executor)
421 const std::scoped_lock lock(peMux);
422 pe = std::move(executor);
425 explicit GlobalIrisExecutor(std::shared_ptr<IrisExecutor> e)
Holds instance of IrisExecutor.
Definition IrisExecutor.h:369
static void Set(std::shared_ptr< IrisExecutor > executor)
Sets new global executor.
Definition IrisExecutor.h:385
static std::shared_ptr< IrisExecutor > Get()
Provides current executor.
Definition IrisExecutor.h:375
Null argument is not allowed.
Definition EnrollmentException.h:156
LoggerCallBacks contains logger handle and function pointers as callbacks.
Definition Logger.h:137