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"));
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"));
auto detectorCfg = IrisDetector::Config();
IrisDetector id(detectorCfg);
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);
IrisExtractorConfig cfg = new IrisExtractorConfig();
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 detectorCfg = new IrisDetector.Config();
detectorCfg.SetDetector(IrisDetector.Config.Type.ACCURATE);
var id = new IrisDetector(detectorCfg);
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"));
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();
ExtractedIris probe = iris.
Extract();
ExtractedIris gallery = iris.
Extract();
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();
ExtractedIris probe = iris.
Extract();
ExtractedIris gallery = iris.
Extract();
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"));
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();
ExtractedIris irisTemplate = iris.
Extract();
-
csharp
Image img = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
IrisCapture ic =
new IrisCapture(img,
IrisPosition.LEFT_EYE);
IrisDetector id = new IrisDetector();
ExtractedIris irisTemplate = iris.
Extract();
System.Console.WriteLine(" Template Quality: " +
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;
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.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();
System.out.println(" Conversion ISO to Iris image");
-
csharp
Image image = Image.Decode(BinaryFile.ReadAll("assets/eye_L.png"));
IrisAttributes ia = new IrisAttributes();
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();
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"));
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();
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;
maskedImage.
SaveAs(
"output/eye_L_iso197946.png");
ISO/IEC 19794-6:2011 masked iris