(#19) New LinearNormalization normalisation algorithm. This normalisation algorithm mimics PerspectiveNormalization and is based on the NearestNeighbor extrapolation, instead of Bilinear. This yields a ~20x speedup and remove a major bottleneck on the pipeline. The grid points are sampled linearly, unlike NonLinearNormalization which does so in a non-linear manner depending on the pupil-to-iris ratio.
(#19) Quality filters are activated by default. Community members surfaced that performances on the default configuration were sometimes sub-par due to a low filtering of bad quality images. We decided to enable the quality filters by default, and as usual let users the possibility to remove them by changing the configuration. These filters are conservative and only reject the worst iris images, users are encouraged to fine-tune them for their use case. The default values are:
EyeCentersInsideImageValidator
min_distance_to_border: 0.0: images where the pupil enters are not strictly included in the pupil are filtered out. This only happens in the rare case of segmentation failure
PupilIrisPropertyCalculator
min_iris_diameter: 50: images where the iris diameter is lesser than 50 px are filtered out
Pupil2IrisPropertyValidator
min_allowed_diameter_ratio: 0.1: Images where the pupil diameter is lesser than 10% of the iris diameter are filtered out.
max_allowed_diameter_ratio: 0.7: Images where the pupil diameter is greater than 70% of the iris diameter are filtered out
max_allowed_center_dist_ratio: 0.9: Images where the pupil center is too far from the iris center (i.e. the pupil center to iris center distance is greater the 90% of the iris radius)
OffgazeValidator
max_allowed_offgaze: 0.8: images with an offgaze score above 0.8 are filtered out
OcclusionValidator
min_allowed_occlusion: 0.25: images where less than 25% of the iris texture is visible are filtered out
IsMaskTooSmallValidator:
min_maskcodes_size: 4096: iris codes with more than 4096 px masked out (i.e. 50%) are filtered out
(#27) Dataclasses additions:
Add an attribute iris_code_version to the dataclasses IrisFilterResponse and IrisTemplate.
Add serialisation and deserialisation to/from base64 encoding to the IrisTemplate class.
Add conversion to/from previous iris template format as class functions to IrisTemplate
(#27) Base64 encoding. On the Orb, communication happens through base64-encoded strings. The configuration received by open-iris is base64-encoded, which requires the capacity to decode and encode string on this format. These functions live in iris.utils.base64_encoding.
Modified
(#12) iris.IRISPipeline output has been simplified. The output structure remains the same (a dictionary). The value of iris_template is now an iris.IrisTemplate object compatible with downstream uses: matching, visualisations, etc. Users will not have to deserialise the object manually and will be able to use iris end-to-end without intermediary manipulations.
Minor
Added
(#22) Added tutorial on how to match iris codes from iris images.
Modified
(#4) Add performance benchmark with other open-source software: end-to-end pipeline performance comparison with commercial iris scanners and with the HDBIF method on the dataset ICE2005
(#11) (#13) Update README
(#14) Update Code of Conduct
(#18) Add callbacks arg in several nodes init
(#25) iris.NormalizedIris.normalized_image is now of data type np.uint8
(#27) Downgrade opencv version from opencv-python==4.8.1.78 to opencv-python==4.7.0.68, for Orb compatibility.
(#27) iris.IRISPipeline.load_from_config_map is deprecated, in favour of iris.IRISPipeline.load_from_config. Instead of taking a dictionary mapping iris version with base64-encoded config, this load_from_config directly takes a base64-encoded config and instantiate an IRISPipeline object with this config
(#27) iris.utils.math.area takes an additional optional parameter, signed: bool, which if True, makes the function return signed area.
Fixed
(#5) (#6) (#7) (#8) Various typos
(#19) Explicitly raise error instead of crashing when polygons do not have enough edges to be processed properly in ContourPointNoiseEyeballDistanceFilter and Smoothing
(#20) Disable hf_transfer Hugging Face feature when downloading the semantic segmentation model weights. This prevents crashes when loading the model on certain systems.
(#25) Fixed bug where the normalised image texture of an iris cropping out of the bottom left corner of the image would loop back to the bottom right corner image data. Now, normalised image texture corresponding to iris region cropped out of the image are black (0-valued pixel)
(#27) Fixed bug where the occlusion value did not take into account the areas of the iris cropped out of the input image. Now, the occlusion value is the ratio of areas of the visible iris region (excluding cropped out, masked out, covered by the eyelid, covered by eyelashes, etc.) and of the entire extrapolated iris (including cropped out of frame)
Type
[x] Feature
[x] Refactoring
[x] Bugfix
Checklist
[x] I've made sure that my code works as expected by writing unit tests.
[x] I've checked if my code doesn't generate warnings or errors.
[x] I've performed a self-review of my code.
[x] I've made sure that my code follows the style guidelines of the project.
[x] I've commented hard-to-understand parts of my code.
[x] I've made appropriate changes in the documentation.
open-iris
v1.1.0PR description
Major
Added
LinearNormalization
normalisation algorithm. This normalisation algorithm mimicsPerspectiveNormalization
and is based on the NearestNeighbor extrapolation, instead of Bilinear. This yields a ~20x speedup and remove a major bottleneck on the pipeline. The grid points are sampled linearly, unlikeNonLinearNormalization
which does so in a non-linear manner depending on the pupil-to-iris ratio.EyeCentersInsideImageValidator
PupilIrisPropertyCalculator
Pupil2IrisPropertyValidator
OffgazeValidator
OcclusionValidator
IsMaskTooSmallValidator
:iris_code_version
to the dataclassesIrisFilterResponse
andIrisTemplate
.IrisTemplate
class.IrisTemplate
iris.utils.base64_encoding
.Modified
iris.IRISPipeline
output has been simplified. The output structure remains the same (a dictionary). The value ofiris_template
is now aniris.IrisTemplate
object compatible with downstream uses: matching, visualisations, etc. Users will not have to deserialise the object manually and will be able to useiris
end-to-end without intermediary manipulations.Minor
Added
Modified
iris.NormalizedIris.normalized_image
is now of data typenp.uint8
opencv-python==4.8.1.78
toopencv-python==4.7.0.68
, for Orb compatibility.iris.IRISPipeline.load_from_config_map
is deprecated, in favour ofiris.IRISPipeline.load_from_config
. Instead of taking a dictionary mapping iris version with base64-encoded config, thisload_from_config
directly takes a base64-encoded config and instantiate anIRISPipeline
object with this configiris.utils.math.area
takes an additional optional parameter,signed: bool
, which if True, makes the function return signed area.Fixed
ContourPointNoiseEyeballDistanceFilter
andSmoothing
hf_transfer
Hugging Face feature when downloading the semantic segmentation model weights. This prevents crashes when loading the model on certain systems.Type
Checklist