Finger Capture¶
The id3 Finger SDK provides the functionality to capture fingerprint images from various sources, including finger scanners, files, and data buffers.
Warning
The device manager is exclusively available on the Windows platform.
Initializing the Device Manager¶
To manage the lifecycle and state of biometric capture devices, follow these steps:
Check the license: Call DeviceManager.checkLicense().
Initialize the Device Manager: Call DeviceManager.initialize().
Start the Device Manager: Call DeviceManager.start() to activate the manager and begin plug-and-play detection.
Initializing a Finger Scanner¶
A FingerScanner extends the DeviceChannel capabilities, enabling fingerprint capture processes.
The initialization should be done as follows:
Create a FingerScanner instance and connect the callback functions:
Specify the Finger Extractor to be used to automatically extract the finger template from the captured images.
Open a capture device: Call FingerScanner.openDevice().
Capturing fingerprint images¶
After initializing and opening the capture device, you can proceed with capturing fingerprint images using the following steps:
Start capture: Call FingerScanner.startCapture.
Retreive preview images: Use FingerScanner.getCurrentFrame within the FingerScanner.imagePreview callback.
Retrieve captured image: Use FingerScanner.getLastSnapshot within the FingerScanner.imageCaptured callback.
Example¶
using System;
using System.Windows.Media.Imaging;
namespace id3.Finger.Samples
{
using id3.Devices;
using id3.Finger;
using id3.FingerCapture;
public class FingerCaptureSample
{
private FingerScanner scanner;
private CaptureImage previewImage;
private CaptureImage captureImage;
private WriteableBitmap previewBitmap;
public FingerCaptureSample()
{
previewImage = new CaptureImage();
captureImage = new CaptureImage();
}
public void Initialize()
{
DevicesLicense.CheckLicense(licensePath);
DeviceManager.Initialize(false);
DeviceManager.Start();
scanner = new FingerScanner()
{
FingerExtractor = new FingerExtractor()
{
MinutiaDetectorModel = FingerModel.FingerMinutiaDetector3B,
ThreadCount = 4
},
AutoCapture = true,
AutoProcess = true
};
scanner.DeviceAdded += FingerScanner_DeviceAdded;
scanner.DeviceRemoved += FingerScanner_DeviceRemoved;
scanner.DeviceStatusChanged += FingerScanner_DeviceStatusChanged;
scanner.ImagePreview += FingerScanner_ImagePreview;
scanner.ImageCaptured += FingerScanner_ImageCaptured;
}
public Dispose()
{
DeviceManager.Dispose();
}
public void StartCapture()
{
if (fingerScanner.DeviceState == DeviceState.DeviceReady)
fingerScanner.StartCapture(FingerPositionFlags.Unknown);
}
public void StopCapture()
{
if (fingerScanner.DeviceState == DeviceState.CaptureInProgress)
fingerScanner.StopCapture();
}
private void FingerScanner_DeviceAdded(object sender, PlugAndPlayCallbackEventArgs e)
{
scanner.OpenDevice(e.DeviceId);
}
private void FingerScanner_DeviceRemoved(object sender, PlugAndPlayCallbackEventArgs e)
{
DeviceInfo deviceInfo = DeviceManager.GetDeviceInfo(e.DeviceId);
// ...
}
private void FingerCapture_ImagePreview(object sender, EventArgs e)
{
if (scanner.GetCurrentFrame(previewImage))
DisplayImage(previewImage);
}
private void FingerCapture_ImageCaptured(object sender, EventArgs e)
{
scanner.GetLastSnapshot(previewImage);
DisplayImage(previewImage);
}
private void FingerScanner_DeviceStatusChanged(object sender, FingerCaptureStatusCallbackEventArgs e)
{
switch (e.Status)
{
case FingerCaptureStatus.CaptureStarted:
break;
case FingerCaptureStatus.DeviceReady:
fingerScanner.StartCapture(FingerPositionFlags.Unknown);
break;
case FingerCaptureStatus.CaptureStopped:
case FingerCaptureStatus.DeviceError:
case FingerCaptureStatus.PlaceFinger:
case FingerCaptureStatus.FingerPlaced:
case FingerCaptureStatus.FingerRemoved:
case FingerCaptureStatus.RemoveFinger:
case FingerCaptureStatus.FewerFingers:
case FingerCaptureStatus.IndexRotated:
case FingerCaptureStatus.MoveFingerLeft:
case FingerCaptureStatus.MoveFingerRight:
case FingerCaptureStatus.MoveFingerUp:
case FingerCaptureStatus.MoveFingerDown:
case FingerCaptureStatus.PressFingerHarder:
case FingerCaptureStatus.RotateHandClockwise:
case FingerCaptureStatus.RotateHandCounterclockwise:
case FingerCaptureStatus.SpreadYourFingers:
case FingerCaptureStatus.ThumbsRotated:
case FingerCaptureStatus.TightenYourFingers:
case FingerCaptureStatus.TooManyFingers:
case FingerCaptureStatus.WrongHand:
ShowMessage(e.Status.ToString());
break;
}
}
private void DisplayImage(CaptureImage image)
{
imagePreview.BeginInit();
imagePreview.Source = ImageToBitmap(image, ref previewBitmap);
imagePreview.EndInit();
}
private BitmapSource ImageToBitmap(CaptureImage image, ref WriteableBitmap wbm)
{
int w = image.Width;
int h = image.Height;
int bufferSize = image.Height * image.Stride;
if (wbm == null || (wbm.Width != image.Width || wbm.Height != image.Height))
wbm = new WriteableBitmap(w, h, 96, 96, PixelFormats.Bgr24, null);
if ((h <= wbm.Height) && (w <= wbm.Width))
{
wbm.WritePixels(new Int32Rect(0, 0, w, h), image.GetPixels(), bufferSize, image.Stride);
}
return wbm;
}
}
}