Enrollment 28.2.0
Loading...
Searching...
No Matches

The library can be used to detect iris from iris captures. More...

Classes

class  IrisExtractorConfig
 It contains extraction configuration. More...
class  IrisTemplate
 IrisTemplate is Innovatrics proprietary template created by IrisExtractor. More...
class  ExtractedIris
 ExtractedIris is template created by IrisExtractor with Iris that belongs to template. More...
class  Iris
 It holds all functions and data related to iris manipulation. More...
class  IrisAttributes
 Iris attributes Holds the iris attributes. More...
class  IrisCaptureDeviceTypeID
 The capture device type identifier shall identify the product type that created the BDIR. More...
class  IrisCaptureDeviceVendorID
 Capture device vendor identifier The capture device vendor identifier shall identify the biometric organisation that owns the product that created the BDIR. More...
class  IrisCapture
 Iris capture contains one iris. More...
class  IrisDetector
 IrisDetector implements detection by means of Innovatrics IFace. More...
class  GlobalIrisExecutor
 Holds instance of IrisExecutor. More...
class  IrisSegment
 It describes Iris segmented from original IrisCapture (one that contain this IrisSegment) with IrisDetector. More...

Typedefs

using IrisSimilarityScore = unsigned int
 It is similarity score between iris Templates.

Enumerations

enum class  IrisCaptureDeviceTechnology : uint8_t { UNKNOWN = 0 , CMOS_CCD = 1 }
 It shall indicate the class of capture device technology used to acquire the captured biometric sample [7]. More...
enum class  IrisImageType : uint8_t { UNCROPPED = 1 , VGA = 2 , CROPPED = 3 , CROPPED_AND_MASKED = 7 }
 It shall indicate type of iris image [7]. More...
enum class  IrisPosition : uint8_t { RIGHT_EYE = 1 , LEFT_EYE = 2 }
 It is position of iris on face [7]. More...

Functions

static constexpr int IrisToIsoCaptureDeviceTechnology (IrisCaptureDeviceTechnology printCaptureDeviceTechnology)
 Function converts IrisCaptureDeviceTechnology to ISO capture technology.
static constexpr IrisCaptureDeviceTechnology IsoToIrisCaptureDeviceTechnology (int isoCaptureDeviceTechnology)
 Function converts ISO capture technology to IrisCaptureDeviceTechnology.
static constexpr int IrisImageTypeToIso (IrisImageType type)
 Function converts IrisImageType to ISO iris image type.
static constexpr IrisImageType IsoToIrisImageType (int type)
 Function converts ISO iris image type to IrisImageType.
static constexpr int IrisPositionToIsoPosition (IrisPosition irisPosition)
 Function converts IrisPosition to ISO position.
static constexpr IrisPosition IsoToIrisPosition (int irisPosition)
 Function converts ISO position to IrisPosition.

Detailed Description

The library can be used to detect iris from iris captures.

Overview

The library can be used to detect iris from iris captures. Iris capture can contains entire eye. There MUST be only one iris in capture. Each capture MUST be passed to detector that recognize Iris.

Iris Detection

Prior to further processing the Iris in IrisCapture MUST be detected

Eye Capture

The iris is detected with function IrisCapture::DetectWith.

  • c++
    auto img = Image::Decode(BinaryFile::ReadAll("assets/eye_L.png"));
    const auto ic = IrisCapture::Create(std::move(img), IrisPosition::LEFT_EYE);
    IrisDetector id(cfg);
    auto segment = ic->DetectWith(id);
    const std::string name = "output/iris_L.png";
    segment->iris->image->SaveAs(name);
    auto roundingSegments =
    ic->DrawSegment(*segment, Shapes::InnoBlue, Shapes::InnoBlue);
    roundingSegments->SaveAs("output/iris_rounding_box.png");
  • java
    Image img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisCapture capture = new IrisCapture(img, IrisPosition.LEFT_EYE);
    IrisDetector.Config cfg = IrisDetector.Config.Default();
    IrisDetector detector = new IrisDetector(cfg);
    IrisSegment segment = capture.DetectWith(detector);
    Iris iris = segment.getIris();
    iris.getImage().SaveAs("output/iris_L.png");
    Image roundigCircle = capture.DrawSegment(
    segment, Shapes.InnoBlue, Shapes.InnoBlue);
    roundigCircle.SaveAs("output/iris_rounding_box.png");
  • csharp
    Image img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisCapture capture = new IrisCapture(img, IrisPosition.LEFT_EYE);
    IrisDetector.Config cfg = IrisDetector.Config.Default();
    IrisDetector detector = new IrisDetector(cfg);
    IrisSegment segment = capture.DetectWith(detector);
    Iris iris = segment.iris;
    iris.image.SaveAs("output/iris_L.png");
    Image roundigCircle =
    capture.DrawSegment(segment, Shapes.InnoBlue, Shapes.InnoBlue);
    roundigCircle.SaveAs("output/iris_rounding_box.png");

The output of example is detected iris

Detected Iris

Extraction

We provide Internal Innovatrics template for Iris. The main goal is to create template for further processing e.g. 1:1 Verification.

  • c++
    auto img = Image::Decode(BinaryFile::ReadAll("assets/eye_L.png"));
    const auto ic = IrisCapture::Create(std::move(img), IrisPosition::LEFT_EYE);
    auto detectorCfg = IrisDetector::Config();
    detectorCfg.SetDetector(IrisDetector::Config::Type::ACCURATE);
    IrisDetector id(detectorCfg);
    // Detect iris
    auto iris = ic->DetectWith(id)->iris;
    auto cfg = IrisExtractorConfig();
    auto irisTemplate = iris->Extract(cfg);
    BinaryFile::WriteAll("output/iris.ics", irisTemplate->data);
    std::cout << " Template Version: " << irisTemplate->GetVersion() << std::endl;
  • java
    Image img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisCapture ic = new IrisCapture(img, IrisPosition.LEFT_EYE);
    IrisDetector.Config detectorCfg = new IrisDetector.Config();
    detectorCfg.SetDetector(IrisDetector.Config.Type.ACCURATE);
    IrisDetector id = new IrisDetector(detectorCfg);
    // Detect iris
    Iris iris = ic.DetectWith(id).getIris();
    IrisExtractorConfig cfg = new IrisExtractorConfig();
    cfg.SetExtractor(IrisExtractorConfig.Type.ACCURATE);
    ExtractedIris irisTemplate = iris.Extract(cfg);
    BinaryFile.WriteAll("output/iris.ics", irisTemplate.getData());
    System.out.println(" Template Version: " + irisTemplate.GetVersion());
  • csharp
    var img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    var ic = new IrisCapture(img, IrisPosition.LEFT_EYE);
    var detectorCfg = new IrisDetector.Config();
    detectorCfg.SetDetector(IrisDetector.Config.Type.ACCURATE);
    var id = new IrisDetector(detectorCfg);
    // Detect iris
    var iris = ic.DetectWith(id).iris;
    var cfg = new IrisExtractorConfig();
    cfg.SetExtractor(IrisExtractorConfig.Type.ACCURATE);
    var irisTemplate = iris.Extract(cfg);
    BinaryFile.WriteAll("output/iris.ics", irisTemplate.data);
    System.Console.WriteLine(" Template Version: " + irisTemplate.GetVersion());

1 to 1 Verification

We provide verification of iris templates. The main goal is to calculate Similarity Score for given probe and gallery templates. The examples uses same image for probe and gallery

Iris
  • c++
    auto img = Image::Decode(BinaryFile::ReadAll("assets/eye_L.png"));
    const auto ic = IrisCapture::Create(std::move(img), IrisPosition::LEFT_EYE);
    IrisDetector id;
    auto iris = ic->DetectWith(id)->iris;
    auto probe = iris->Extract();
    auto gallery = iris->Extract();
    auto score = probe->SimilarWith(*gallery);
    std::cout << " Match Score: " << score << std::endl;
  • java
    Image img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisCapture ic = new IrisCapture(img, IrisPosition.LEFT_EYE);
    IrisDetector id = new IrisDetector();
    Iris iris = ic.DetectWith(id).getIris();
    ExtractedIris probe = iris.Extract();
    ExtractedIris gallery = iris.Extract();
    long score = probe.SimilarWith(gallery);
    System.out.println(" Match Score: " + score);
  • csharp
    Image img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisCapture ic = new IrisCapture(img, IrisPosition.LEFT_EYE);
    IrisDetector id = new IrisDetector();
    Iris iris = ic.DetectWith(id).iris;
    ExtractedIris probe = iris.Extract();
    ExtractedIris gallery = iris.Extract();
    uint score = probe.SimilarWith(gallery);
    System.Console.WriteLine(" Match Score: " + score);

Quality

Template quality is calculated from a iris template. The quality is an integer number between 1 (blank image) and 100 (maximum quality).

  • c++
    auto img = Image::Decode(BinaryFile::ReadAll("assets/eye_L.png"));
    const auto ic = IrisCapture::Create(std::move(img), IrisPosition::LEFT_EYE);
    IrisDetector id;
    auto iris = ic->DetectWith(id)->iris;
    auto irisTemplate = iris->Extract();
    std::cout << " Template Quality: " << +irisTemplate->CalculateQuality()
    << std::endl;
  • java
    Image img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisCapture ic = new IrisCapture(img, IrisPosition.LEFT_EYE);
    IrisDetector id = new IrisDetector();
    Iris iris = ic.DetectWith(id).getIris();
    ExtractedIris irisTemplate = iris.Extract();
    System.out.println(" Template Quality: " + irisTemplate.CalculateQuality());
  • csharp
    Image img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisCapture ic = new IrisCapture(img, IrisPosition.LEFT_EYE);
    IrisDetector id = new IrisDetector();
    Iris iris = ic.DetectWith(id).iris;
    ExtractedIris irisTemplate = iris.Extract();
    System.Console.WriteLine(" Template Quality: " +
    irisTemplate.CalculateQuality());

ISO Conversion

ISO Image format

It is possible to convert Iris to ISO image compliant with ISO 19794-6:2011 and back from image to IrisCapture.

  • c++
    auto image = Image::Decode(BinaryFile::ReadAll("assets/eye_L.png"));
    IrisAttributes ia;
    ia.SetCaptureDeviceVendorID(IrisCaptureDeviceVendorID(11));
    ia.SetCaptureDeviceTypeID(IrisCaptureDeviceTypeID(7));
    const auto irisCapture =
    IrisDetector irisDetector;
    auto iris = irisCapture->DetectWith(irisDetector)->iris;
    std::cout << " Conversion Iris to ISO image" << std::endl;
    auto encoder = PngImageEncoder();
    auto isoImage = iris->ToIsoImage(encoder);
    std::cout << " Conversion ISO to Iris image" << std::endl;
    auto irisImage = irisCapture->FromIsoImage(isoImage);
  • java
    Image image = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisAttributes ia = new IrisAttributes();
    ia.SetCaptureDeviceTechnology(IrisCaptureDeviceTechnology.CMOS_CCD);
    ia.SetCaptureDeviceVendorID(new IrisCaptureDeviceVendorID(11));
    ia.SetCaptureDeviceTypeID(new IrisCaptureDeviceTypeID(7));
    IrisCapture irisCapture = new IrisCapture(image, IrisPosition.LEFT_EYE, ia);
    IrisDetector irisDetector = new IrisDetector();
    IrisSegment segment = irisCapture.DetectWith(irisDetector);
    Iris iris = segment.getIris();
    System.out.println(" Conversion Iris to ISO image");
    PngImageEncoder encoder = new PngImageEncoder();
    Bytes isoImage = iris.ToIsoImage(encoder);
    System.out.println(" Conversion ISO to Iris image");
    IrisCapture irisImage = IrisCapture.FromIsoImage(isoImage);
  • csharp
    Image image = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisAttributes ia = new IrisAttributes();
    ia.SetCaptureDeviceVendorID(new IrisCaptureDeviceVendorID(11));
    ia.SetCaptureDeviceTypeID(new IrisCaptureDeviceTypeID(7));
    IrisCapture irisCapture = new IrisCapture(image, IrisPosition.LEFT_EYE, ia);
    IrisDetector irisDetector = new IrisDetector();
    Iris iris = irisCapture.DetectWith(irisDetector).iris;
    System.Console.WriteLine(" Conversion Iris to ISO image");
    var encoder = new PngImageEncoder();
    var isoImage = iris.ToIsoImage(encoder);
    System.Console.WriteLine(" Conversion ISO to Iris image");
    var irisImage = IrisCapture.FromIsoImage(isoImage);

ISO Masked and Cropped Image

The SDK support masking and cropping detected iris into image that is compliant with ISO/IEC 19794-6:2011. After iris detection use function Iris::GetISO19794IrisImage().

  • c++
    auto image = Image::Decode(BinaryFile::ReadAll("assets/eye_L.png"));
    auto irisCapture = IrisCapture::Create(std::move(image), IrisPosition::LEFT_EYE);
    IrisDetector irisDetector;
    auto iris = irisCapture->DetectWith(irisDetector)->iris;
    auto maskedImage = iris->GetISO19794IrisImage();
    maskedImage->SaveAs("output/eye_L_iso197946.png");
  • java
    Image image = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    IrisCapture irisCapture = new IrisCapture(image, IrisPosition.LEFT_EYE);
    IrisDetector irisDetector = new IrisDetector();
    IrisSegment segment = irisCapture.DetectWith(irisDetector);
    Iris iris = segment.getIris();
    Image maskedImage = iris.GetISO19794IrisImage();
    maskedImage.SaveAs("output/eye_L_iso197946.png");
  • csharp
    var image = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
    var irisCapture = new IrisCapture(image, IrisPosition.LEFT_EYE);
    var irisDetector = new IrisDetector();
    Iris iris = irisCapture.DetectWith(irisDetector).iris;
    Image maskedImage = iris.GetISO19794IrisImage();
    maskedImage.SaveAs("output/eye_L_iso197946.png");
ISO/IEC 19794-6:2011 masked iris

Typedef Documentation

◆ IrisSimilarityScore

using IrisSimilarityScore = unsigned int

It is similarity score between iris Templates.

Score is 0-1000 where 1000 represents most similar templates.

Scores in range <0, 60> are computed based on FAR analysis. Scores above this range are approximated with linear slope to 1000. Therefore very similar irises can have matching score near maximal 1000.

See Similarity Score.

Enumeration Type Documentation

◆ IrisCaptureDeviceTechnology

enum class IrisCaptureDeviceTechnology : uint8_t
strong

It shall indicate the class of capture device technology used to acquire the captured biometric sample [7].

Enumerator
UNKNOWN 

Unknown or Unspecified.

CMOS_CCD 

Static photograph from an unknown source.

◆ IrisImageType

enum class IrisImageType : uint8_t
strong

It shall indicate type of iris image [7].

Enumerator
UNCROPPED 

An uncropped rectilinear iris image.

Reference: ISO/IEC 19794-6:2011(E), Sections 7.4 table 4, Cropped and Masked Iris Image specifications [7].

VGA 

A rectilinear iris image in VGA (640x480) format.

Reference: ISO/IEC 19794-6:2011(E), Sections 7.4 table 4, Cropped and Masked Iris Image specifications [7].

CROPPED 

A cropped, centred, iris image with (0,6R 0,2R) margins.

Reference: ISO/IEC 19794-6:2011(E), Sections 7.4 table 4, Cropped and Masked Iris Image specifications [7].

CROPPED_AND_MASKED 

A cropped and region-of-interest masked, centred, iris image with (0,6R 0,2R) margins.

Reference: ISO/IEC 19794-6:2011(E), Sections 7.4 table 4, Cropped and Masked Iris Image specifications [7].

◆ IrisPosition

enum class IrisPosition : uint8_t
strong

It is position of iris on face [7].

Enumerator
RIGHT_EYE 

Iris of right eye.

LEFT_EYE 

Iris of left eye.

Function Documentation

◆ IrisImageTypeToIso()

constexpr int IrisImageTypeToIso ( IrisImageType type)
staticconstexpr

Function converts IrisImageType to ISO iris image type.

Parameters
typeIrisImageType
Exceptions
EnrollmentInvalidArgumentExceptionfor invalid conversion
Returns
ISO iris image type

References CROPPED, CROPPED_AND_MASKED, UNCROPPED, and VGA.

◆ IrisPositionToIsoPosition()

constexpr int IrisPositionToIsoPosition ( IrisPosition irisPosition)
staticconstexpr

Function converts IrisPosition to ISO position.

[7]

Parameters
irisPositionIrisPosition
Exceptions
EnrollmentInvalidArgumentExceptionfor invalid conversion
Returns
ISO position

References LEFT_EYE, and RIGHT_EYE.

◆ IrisToIsoCaptureDeviceTechnology()

constexpr int IrisToIsoCaptureDeviceTechnology ( IrisCaptureDeviceTechnology printCaptureDeviceTechnology)
staticconstexpr

Function converts IrisCaptureDeviceTechnology to ISO capture technology.

Parameters
printCaptureDeviceTechnologyIrisCaptureDeviceTechnology
Exceptions
EnrollmentInvalidArgumentExceptionfor invalid conversion
Returns
ISO capture technology

References CMOS_CCD, and UNKNOWN.

◆ IsoToIrisCaptureDeviceTechnology()

constexpr IrisCaptureDeviceTechnology IsoToIrisCaptureDeviceTechnology ( int isoCaptureDeviceTechnology)
staticconstexpr

Function converts ISO capture technology to IrisCaptureDeviceTechnology.

Parameters
isoCaptureDeviceTechnologyiso capture technology
Exceptions
EnrollmentInvalidArgumentExceptionfor invalid conversion
Returns
IrisCaptureDeviceTechnology

References CMOS_CCD, and UNKNOWN.

Referenced by IrisCapture::FromIsoImage().

Here is the caller graph for this function:

◆ IsoToIrisImageType()

constexpr IrisImageType IsoToIrisImageType ( int type)
staticconstexpr

Function converts ISO iris image type to IrisImageType.

Parameters
typeISO iris image type
Exceptions
EnrollmentInvalidArgumentExceptionfor invalid conversion
Returns
IrisImageType

References CROPPED, CROPPED_AND_MASKED, UNCROPPED, and VGA.

Referenced by IrisCapture::FromIsoImage().

Here is the caller graph for this function:

◆ IsoToIrisPosition()

constexpr IrisPosition IsoToIrisPosition ( int irisPosition)
staticconstexpr

Function converts ISO position to IrisPosition.

[7]

Parameters
irisPositioniso position
Exceptions
EnrollmentInvalidArgumentExceptionfor invalid conversion
Returns
IrisPosition

References LEFT_EYE, and RIGHT_EYE.

Referenced by IrisCapture::FromIsoImage().

Here is the caller graph for this function: