Finger Detection

id3 Finger SDK provides a finger detection component used to detect one or multiple fingerprints in images. When detecting multiple fingerprints, the operation is sometimes referred to as slap segmentation.

../_images/finger-slap-detection.jpg

A number of issues must be addressed in order to use slap fingerprints in an operational system. Key among these is the problem of segmentation error which could result in failures to enroll (FTE), or, if undetected, the enrollment of fingerprints into the database in the wrong order. Here are some issues addressed by the segmentation algorithm:

  • Rotation – most slap images are rotated, but when slaps are rotated more than usual, it may be more difficult to find the pads of all fingers.

  • Cropped fingers – fingerprints frequently overlap the edges of slap images which may affect the quality of the resulting fingerprints and/or the accuracy of segmentation.

  • Missing fingers – missing fingers are rare, but do occur.

  • Fingers are occasionally pressed together unnaturally to force them on the platen.

  • Latent fingerprint – in occasion, the backgrounds contain latent fingerprint detail which may affect the feature extraction process.

  • Haloing around fingers – some live-scan images have grey halos around the fingers, apparently due to temperature or moisture.

Note

When an image is known to contain only one fingerprint, it is not necessary to use the finger detection component.

Example

The example below demonstrates how to generate a FingerTemplate from a FingerImage:

# initialize FingerDetector
finger_detector = FingerDetector()

# load an image from a file.
image = FingerImage.from_file("data/slap.bmp", PixelFormat.GRAYSCALE_8_BITS)
image.set_resolution(500)
image.position = FingerPosition.PLAIN_RIGHT_FOUR;

# segment slap
fingers = finger_detector.detect_fingers(image)
count = 1
for finger in fingers:
    bounds = finger.bounds
    print(f"Bounds:   ({bounds.top_left.x}, {bounds.top_left.y}) ; ({bounds.top_right.x}, {bounds.top_right.y}) ; ({bounds.bottom_right.x}, {bounds.bottom_right.y}) ; ({bounds.bottom_left.x}, {bounds.bottom_left.y})")
    print(f"Position: {finger.position.name}")
    finger_image = image.extract_roi(finger.bounds)
    finger_image.to_file(f"data/slap_{count}.jpg", 90)
    count += 1

del finger_detector

See also