13#include "enrollment/Export.h"
54 return pos.has_value();
78 unsigned int majorVersion = 0;
79 unsigned int minorVersion = 0;
87 return std::to_string(majorVersion) +
"." + std::to_string(minorVersion);
94 [[nodiscard]] std::shared_ptr<ICSTemplate>
Anonymize()
const
96 return std::make_shared<ICSTemplate>(SetPosition(
icsTemplateData, 0, exec));
129 ICSTemplate(std::vector<uint8_t> d, std::shared_ptr<PrintExecutor> executor)
131 , exec(std::move(executor))
139 throw InvalidTemplateException(
"ICSTemplate MUST have data");
142 int positionFromData = 0;
143 exec->GetICSTemplatePosition(
145 if (positionFromData != 0)
185 , exec(std::move(executor))
201 return matcher.
Match(*
this, tmpl);
213 const std::scoped_lock lock(guard);
215 if (!templateQuality.has_value())
217 uint8_t localQuality = 0;
218 exec->GetICSTemplateQuality(
220 templateQuality = localQuality;
222 return templateQuality.value();
232 std::shared_ptr<ISOTemplate>
ToISO(
const std::shared_ptr<const Print>& print)
const
234 size_t isoLength = 0;
235 std::vector<uint8_t> iso(exec->GetMaxISOTemplateSize());
237 exec->ConvertICSToISO(
240 static_cast<unsigned int>(print->printAttributes.GetCaptureDeviceVendorID()),
241 print->printAttributes.GetCertificationFlag(),
242 print->image->Dpi().ToDPCM(),
243 print->image->Width(),
244 print->image->Height(),
251 iso.resize(isoLength);
252 return std::make_shared<ISOTemplate>(std::move(iso));
262 std::shared_ptr<ANSITemplate>
ToANSI(
const std::shared_ptr<const Print>& print)
const
264 size_t ansiLength = 0;
265 std::vector<uint8_t> ansi(exec->GetMaxANSITemplateSize());
267 exec->ConvertICSToANSI(
270 static_cast<unsigned int>(print->printAttributes.GetCaptureDeviceVendorID()),
271 print->printAttributes.GetCertificationFlag(),
272 print->image->Dpi().ToDPCM(),
273 print->image->Width(),
274 print->image->Height(),
281 ansi.resize(ansiLength);
282 return std::make_shared<ANSITemplate>(std::move(ansi));
290 std::vector<std::shared_ptr<Minutia>>
GetMinutiae()
const
292 size_t minutiaeCount = 0;
293 inno_Minutia_out* m =
nullptr;
302 std::vector<std::shared_ptr<Minutia>> minutiae;
303 for (
size_t i = 0; i < minutiaeCount; i++)
305 static constexpr float MaxDegree = 360.0F;
306 static constexpr float MaxValuesInByte = 256.0F;
307 static constexpr float AngleUnit = MaxDegree / MaxValuesInByte;
308 minutiae.emplace_back(std::make_shared<Minutia>(
309 Point{ m[i].x, m[i].y },
311 AngleUnit *
static_cast<float>(m[i].angle),
315 exec->FreeMinutiae(m);
330 size_t criticalPointsCount = 0;
331 inno_CriticalPoint_out* p =
nullptr;
333 std::vector<inno_CriticalPoint_out> criticalPoints;
334 auto criticalPointAllocator = +[](
void* container,
size_t length) -> inno_CriticalPoint_out*
340 std::vector<inno_CriticalPoint_out>& vec =
341 *
static_cast<std::vector<inno_CriticalPoint_out>*
>(container);
350 &criticalPointsCount,
351 criticalPointAllocator,
355 std::vector<std::shared_ptr<CriticalPoint>> points;
356 for (
size_t i = 0; i < criticalPointsCount; i++)
358 static constexpr float MaxDegree = 360.0F;
359 static constexpr float MaxValuesInByte = 256.0F;
360 static constexpr float AngleUnit = MaxDegree / MaxValuesInByte;
361 points.emplace_back(std::make_shared<CriticalPoint>(
362 Point{ p[i].x, p[i].y },
365 AngleUnit *
static_cast<float>(p[i].angle))
375 const std::scoped_lock lock(guard);
377 if (templateQuality.has_value())
379 w.
Write(
"q", templateQuality.value());
391 std::shared_ptr<PrintExecutor> exec;
392 mutable std::mutex guard;
393 std::optional<uint8_t> templateQuality;
394 std::optional<PrintPosition> pos;
397 static std::vector<uint8_t> SetPosition(std::vector<uint8_t> icsTemplateData,
399 const std::shared_ptr<PrintExecutor>& executor)
401 if (executor ==
nullptr)
405 if (icsTemplateData.empty())
407 throw InvalidTemplateException(
"ICSTemplate MUST have data");
409 executor->SetICSTemplatePosition(
410 position, icsTemplateData.data(),
static_cast<uint32_t
>(icsTemplateData.size()), ThrowOnError{});
411 return icsTemplateData;
Type
Type of CriticalPoint.
Definition CriticalPoint.h:30
Base exception for all enrollment-sdk runtime exceptions.
Definition EnrollmentException.h:84
static std::shared_ptr< Logger > Get()
Provides current logger.
Definition Logger.h:281
Holds instance of PrintExecutor.
Definition PrintExecutor.h:1300
It is general matcher for ICS templates.
Definition ICSMatcher.h:22
virtual PrintSimilarityScore Match(const ICSTemplate &probe, const ICSTemplate &gallery) const =0
Calculates similarity score of probe and gallery template.
Print template in ICS format used for biometric operations.
Definition ICSTemplate.h:41
std::shared_ptr< ISOTemplate > ToISO(const std::shared_ptr< const Print > &print) const
Convert this ICSTemplate to into ISO/IEC 19794-2 compliant template.
Definition ICSTemplate.h:231
ICSTemplate(std::vector< uint8_t > d)
Create ICSTemplate object GlobalPrintExecutor is used to execute template functionality.
Definition ICSTemplate.h:110
std::vector< std::shared_ptr< Minutia > > GetMinutiae() const
Get minutiae from template.
Definition ICSTemplate.h:289
ICSTemplate(std::vector< uint8_t > d, std::shared_ptr< PrintExecutor > executor)
Create ICSTemplate object Biometric position is loaded from template is possible.
Definition ICSTemplate.h:128
std::vector< std::shared_ptr< CriticalPoint > > GetCriticalPoints() const
Get critical points (core/delta) from template.
Definition ICSTemplate.h:327
std::string GetVersion() const
Provides version information of Innovatrics proprietary algorithm used to create the ICS template.
Definition ICSTemplate.h:75
std::shared_ptr< ICSTemplate > Anonymize() const
Creates ICSTemplate without position.
Definition ICSTemplate.h:93
uint8_t CalculateQuality()
Function calculates a fingerprint template quality.
Definition ICSTemplate.h:210
ICSTemplate(std::vector< uint8_t > d, PrintPosition position, std::shared_ptr< PrintExecutor > executor)
Create ICSTemplate object The template format is validated.
Definition ICSTemplate.h:182
std::shared_ptr< ANSITemplate > ToANSI(const std::shared_ptr< const Print > &print) const
Convert this ICSTemplate to into ANSI/INCITS 378 compliant template.
Definition ICSTemplate.h:261
const std::vector< uint8_t > icsTemplateData
template data
Definition ICSTemplate.h:44
bool IsICSTemplateBiometricPositionKnown() const
It checks if template contains known biometric position.
Definition ICSTemplate.h:51
ICSTemplate(std::vector< uint8_t > d, PrintPosition position)
Create ICSTemplate object GlobalPrintExecutor is used to execute template functionality.
Definition ICSTemplate.h:163
PrintPosition GetICSTemplateBiometricPosition() const
It returns biometric position to which template belongs.
Definition ICSTemplate.h:61
void WriteTo(Writer &w) const override
Write itself into writer.
Definition ICSTemplate.h:370
PrintSimilarityScore SimilarWith(const ICSTemplate &tmpl, const ICSMatcher &matcher) const
It calculates similarity score between this and given ICSTemplate.
Definition ICSTemplate.h:198
Type
Type of Minutia.
Definition Minutia.h:30
Null argument is not allowed.
Definition EnrollmentException.h:156
It holds X and Y coordinates of point.
Definition ImageAttribute.h:312
Provides interface for serialization of all classes.
Definition Writer.h:164
virtual void Write(const char *name, const Serializable &s)=0
Serialize serializable.
void WriteArray(const char *name, const std::vector< uint8_t > &value)
Serialize bytes from vector.
Definition Writer.h:233
static constexpr PrintPosition IsoToPrintPosition(int isoPosition)
Function converts ISO position to PrintPosition.
Definition PrintPosition.h:138
PrintPosition
It is position of finger on hands.
Definition PrintPosition.h:29
unsigned int PrintSimilarityScore
It is similarity score between print Templates.
Definition SimilarityScore.h:28
static constexpr int PrintToIsoPosition(PrintPosition position)
Function converts Print position to ISO position.
Definition PrintPosition.h:204
static constexpr int PrintToIsoImpression(PrintImpression printImpression)
Function converts PrintImpression to ISO impression.
Definition PrintImpression.h:91