Skip to content

Releases: worldcoin/open-iris

v1.1.1

08 Jul 15:24
6b2fa09
Compare
Choose a tag to compare

open-iris v1.1.1

Changelog

Major

Added

  • SimpleHammingDistanceMatcher, a hamming distance-based iris template matcher without the bells and whistles. It functions ~2x faster than HammingDistanceMatcher, is more readable and just does fractional hamming distance with the option to normalise the result by the fraction of visible bits.

Changed

  • Refactor parameters for HammingDistanceMatcher and the underlying utils function hamming_distance. Parameters used to be nm_dist: Optional[float], i.e. either None or a float, the mean HD to normalise towards. Parameters are now normalise: bool: wether to normalise the hamming distance by the fraction of visible bits, nm_dist: float: the mean HD to normalise towards, and nm_type: Literal["sqrt", "linear"], i.e. a string that is either "sqrt" or "literal" which represent the type of normalisation ("sort" is equivalent to the previous behaviour)

Minor

Added

  • Interface Matcher and BatchMatcher, from which HammingDistanceMatcher and SimpleHammingDistanceMatcher inherit from.

Removed

  • Remove upper bound on HammingDistanceMatcher's rotation_shift parameter. This parameter represents the rotation in the angular direction of the iris template, and is expressed in bits (not degrees as was previously expressed).

Changed

  • Modified the HD normalisation function slightly. Only the cases where HD is normalised and less than 1/4 of the iris texture is masked are affected

Fixed

  • The output_builder build_simple_debugging_output was always returning None values for the intermediary results geometry_mask and noise_mask. Also mentioned in issue #38. This behaviour is now fixed, thanks to @tokkikki

v1.1.0

12 Jun 12:45
d19b8e3
Compare
Choose a tag to compare

Changelog

Major

Added

  • (#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)

v1.0.0

14 Dec 12:18
1aa9ade
Compare
Choose a tag to compare

Changelog

Added

  • (#1) Initial commit