public bool CaptureFinger(ref Fid fid) { try { Constants.ResultCode result = objReader.GetStatus(); if ((result != Constants.ResultCode.DP_SUCCESS)) { //MessageBox.Show("Get Status Error: " + result); if (objReader != null) { objReader.Dispose(); objReader = null; } return(false); } if ((objReader.Status.Status == Constants.ReaderStatuses.DP_STATUS_BUSY)) { Thread.Sleep(50); return(true); } else if ((objReader.Status.Status == Constants.ReaderStatuses.DP_STATUS_NEED_CALIBRATION)) { objReader.Calibrate(); } else if ((objReader.Status.Status != Constants.ReaderStatuses.DP_STATUS_READY)) { //MessageBox.Show("Get Status: " + Lector.Status.Status); if (objReader != null) { objReader.Dispose(); objReader = null; } return(false); } CaptureResult captureResult = objReader.Capture(Constants.Formats.Fid.ANSI, Constants.CaptureProcessing.DP_IMG_PROC_DEFAULT, 5000, objReader.Capabilities.Resolutions[0]); if (captureResult.ResultCode != Constants.ResultCode.DP_SUCCESS) { //MessageBox.Show("Error: " + captureResult.ResultCode); if (objReader != null) { objReader.Dispose(); objReader = null; } return(false); } if (captureResult.Quality == Constants.CaptureQuality.DP_QUALITY_CANCELED) { return(false); } if ((captureResult.Quality == Constants.CaptureQuality.DP_QUALITY_NO_FINGER || captureResult.Quality == Constants.CaptureQuality.DP_QUALITY_TIMED_OUT)) { return(true); } if ((captureResult.Quality == Constants.CaptureQuality.DP_QUALITY_FAKE_FINGER)) { //MessageBox.Show("Quality Error: " + captureResult.Quality); return(true); } fid = captureResult.Data; return(true); } catch { //MessageBox.Show("An error has occurred."); if (objReader != null) { objReader.Dispose(); objReader = null; } return(false); } }
private void enrollment_OnCancel(DPCtlUruNet.EnrollmentControl enrollmentControl, Constants.ResultCode result, int fingerPosition) { if (enrollmentControl.Reader != null) { ShowMessage("OnCancel: " + enrollmentControl.Reader.Description.Name + ", finger " + fingerPosition); } else { ShowMessage("OnCancel: No Reader Connected, finger " + fingerPosition); } btnCancel.Enabled = false; }
private void enrollment_OnDelete(DPCtlUruNet.EnrollmentControl enrollmentControl, Constants.ResultCode result, int fingerPosition) { if (enrollmentControl.Reader != null) { ShowMessage("OnDelete: " + enrollmentControl.Reader.Description.Name + ", finger " + fingerPosition); } else { ShowMessage("OnDelete: No Reader Connected, finger " + fingerPosition); } Currentinstance.Fmds.Remove(fingerPosition); Currentinstance.Fids.Remove(fingerPosition); if (Currentinstance.Fmds.Count == 0) { } // currentinstance.btnIdentificationControl.Enabled = false; }
private void enrollment_OnDelete(DPCtlUruNet.EnrollmentControl enrollmentControl, Constants.ResultCode result, int fingerPosition) { if (enrollmentControl.Reader != null) { SendMessage("OnDelete: " + enrollmentControl.Reader.Description.Name + ", finger " + fingerPosition); SendMessage("Enrolled Finger Mask: " + _enrollmentControl.EnrolledFingerMask); SendMessage("Disabled Finger Mask: " + _enrollmentControl.DisabledFingerMask); } else { SendMessage("OnDelete: No Reader Connected, finger " + fingerPosition); } _sender.Fmds.Remove(fingerPosition); if (_sender.Fmds.Count == 0) { _sender.btnIdentificationControl.Enabled = false; } }
/// <summary> /// Open the reader and capture two fingers to compare. /// </summary> private void VerifyThread() { Constants.ResultCode result = Constants.ResultCode.DP_DEVICE_FAILURE; result = currentinstance.CurrentReader.Open(Constants.CapturePriority.DP_PRIORITY_COOPERATIVE); if (result != Constants.ResultCode.DP_SUCCESS) { MessageBox.Show("Error: " + result); if (currentinstance.CurrentReader != null) { currentinstance.CurrentReader.Dispose(); currentinstance.CurrentReader = null; } return; } Fmd fmd1 = null; // Fmd fmd2 = null; SendMessage("Place a finger on the reader."); int count = 0; while (!reset) { Fid fid = null; if (!currentinstance.CaptureFinger(ref fid)) { break; } if (fid == null) { continue; } SendMessage("A finger was captured."); DataResult <Fmd> resultConversion = FeatureExtraction.CreateFmdFromFid(fid, Constants.Formats.Fmd.ANSI); if (resultConversion.ResultCode != Constants.ResultCode.DP_SUCCESS) { break; } /* if (count == 0) * { * fmd1 = resultConversion.Data; * count += 1; * SendMessage("Now place the same or a different finger on the reader."); * } * else if (count == 1) * { * fmd2 = resultConversion.Data; * CompareResult compareResult = Comparison.Compare(fmd1, 0, fmd2, 0); * * if (compareResult.ResultCode != Constants.ResultCode.DP_SUCCESS) * { * break; * } * * SendMessage("Comparison resulted in a dissimilarity score of " + compareResult.Score.ToString() + (compareResult.Score < (PROBABILITY_ONE/100000) ? " (fingerprints matched)" : " (fingerprints did not match)")); * SendMessage("Place a finger on the reader."); * count = 0; * }*/ fmd1 = resultConversion.Data; bool pass_threshold = false; foreach (Fmd fd in database) { CompareResult compareResult = Comparison.Compare(fmd1, 0, fd, 0); if (compareResult.ResultCode != Constants.ResultCode.DP_SUCCESS) { break; } pass_threshold = compareResult.Score < (PROBABILITY_ONE / 100000); SendMessage("Comparison resulted in a dissimilarity score of " + compareResult.Score.ToString() + (pass_threshold ? " (fingerprints matched)" : " (fingerprints did not match)")); //SendMessage("Place a finger on the reader."); if (pass_threshold) { MessageBox.Show("Verification Successful", "Success", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); break; } } if (!pass_threshold) { MessageBox.Show("Verification Failed!!!", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Error); } } if (currentinstance.CurrentReader != null) { currentinstance.CurrentReader.Dispose(); } }
/// <summary> /// Check reader status. If okay, stream an image and display as a bitmap. /// </summary> public void StreamThread() { // A lock to only allow one thread to one at a time. threadHandle_lock = true; _sender.CurrentReader.StartStreaming(); // A flag to allow back to be pressed only after opening and starting a stream. backEnabled = true; // A reset flag to stop the stream image loop when the form is closed. reset = false; while ((!reset)) { CaptureResult captureResult = null; Constants.ResultCode result = _sender.CurrentReader.GetStatus(); #region Validate GetStatus if ((result != Constants.ResultCode.DP_SUCCESS)) { MessageBox.Show("Get Status Error: " + result); if (_sender.CurrentReader != null) { _sender.CurrentReader.Dispose(); _sender.CurrentReader = null; } reset = true; continue; } if ((_sender.CurrentReader.Status.Status == Constants.ReaderStatuses.DP_STATUS_BUSY)) { Thread.Sleep(50); continue; } else if ((_sender.CurrentReader.Status.Status == Constants.ReaderStatuses.DP_STATUS_NEED_CALIBRATION)) { _sender.CurrentReader.Calibrate(); } else if ((_sender.CurrentReader.Status.Status != Constants.ReaderStatuses.DP_STATUS_READY)) { MessageBox.Show("Get Status: " + _sender.CurrentReader.Status.Status); if (_sender.CurrentReader != null) { _sender.CurrentReader.Dispose(); _sender.CurrentReader = null; } reset = true; continue; } #endregion captureResult = _sender.CurrentReader.GetStreamImage(Constants.Formats.Fid.ANSI, Constants.CaptureProcessing.DP_IMG_PROC_DEFAULT, _sender.CurrentReader.Capabilities.Resolutions[0]); #region Validate GetStreamImage if (captureResult.Quality == Constants.CaptureQuality.DP_QUALITY_TIMED_OUT) { Thread.Sleep(50); continue; } if ((captureResult.ResultCode != Constants.ResultCode.DP_SUCCESS || captureResult.Quality == Constants.CaptureQuality.DP_QUALITY_CANCELED)) { MessageBox.Show("Error: " + captureResult.ResultCode); if (_sender.CurrentReader != null) { _sender.CurrentReader.StopStreaming(); _sender.CurrentReader.Dispose(); _sender.CurrentReader = null; } reset = true; continue; } if ((captureResult.Quality == Constants.CaptureQuality.DP_QUALITY_NO_FINGER || captureResult.Quality == Constants.CaptureQuality.DP_QUALITY_FAKE_FINGER)) { continue; } #endregion foreach (Fid.Fiv fiv in captureResult.Data.Views) { SendMessage(CreateBitmap(fiv.RawImage, fiv.Width, fiv.Height)); } } if (_sender.CurrentReader != null) { Constants.ResultCode result2 = _sender.CurrentReader.StopStreaming(); if (result2 != Constants.ResultCode.DP_SUCCESS && result2 != Constants.ResultCode.DP_NOT_IMPLEMENTED) { MessageBox.Show("Error: " + result2.ToString()); } } if (_sender.CurrentReader != null) { _sender.CurrentReader.Dispose(); } threadHandle_lock = false; }
/// <summary> /// Open a reader and capture three fingers to identify with. /// </summary> private void IdentifyThread() { Constants.ResultCode result = Constants.ResultCode.DP_DEVICE_FAILURE; result = Sender.CurrentReader.Open(Constants.CapturePriority.DP_PRIORITY_COOPERATIVE); if (result != Constants.ResultCode.DP_SUCCESS) { MessageBox.Show("Error: " + result); if (Sender.CurrentReader != null) { Sender.CurrentReader.Dispose(); Sender.CurrentReader = null; } return; } Fmd fmd1 = null; Fmd fmd2 = null; Fmd fmd3 = null; SendMessage("Place your right index finger on the reader."); int count = 0; while (!reset) { Fid fid = null; if (!Sender.CaptureFinger(ref fid)) { break; } if (fid == null) { continue; } SendMessage("A finger was captured."); DataResult <Fmd> resultConversion = FeatureExtraction.CreateFmdFromFid(fid, Constants.Formats.Fmd.ANSI); if (resultConversion.ResultCode != Constants.ResultCode.DP_SUCCESS) { break; } if (count == 0) { fmd1 = resultConversion.Data; count += 1; SendMessage("Now place your right thumb on the reader."); } else if (count == 1) { fmd2 = resultConversion.Data; count += 1; SendMessage("Now place any finger on the reader."); } else if (count == 2) { fmd3 = resultConversion.Data; Fmd[] fmds = new Fmd[2]; fmds[0] = fmd1; fmds[1] = fmd2; // See the SDK documentation for an explanation on threshold scores. int thresholdScore = DPFJ_PROBABILITY_ONE * 1 / 100000; IdentifyResult identifyResult = Comparison.Identify(fmd3, 0, fmds, thresholdScore, 2); if (identifyResult.ResultCode != Constants.ResultCode.DP_SUCCESS) { break; } SendMessage("Identification resulted in the following number of matches: " + identifyResult.Indexes.Length.ToString()); SendMessage("Place your right index finger on the reader."); count = 0; } } if (Sender.CurrentReader != null) { Sender.CurrentReader.Dispose(); } }
//In Load lets enumerate and open fingerprint reader private void IdentifyDlg_Load(object sender, EventArgs e) { this.DialogResult = System.Windows.Forms.DialogResult.None; ReaderCollection readers = ReaderCollection.GetReaders(); if (readers.Count == 0) { MessageBox.Show("Registration requires a plugged in fingerprint reader."); readers.Dispose(); readers = null; this.Close(); return; } if (readers.Count > 1) { MessageBox.Show("This sample is designed for a single connected reader. Please connect only 1 device."); readers.Dispose(); readers = null; this.Close(); return; } reader = readers[0]; if (reader.Open(Constants.CapturePriority.DP_PRIORITY_COOPERATIVE) != Constants.ResultCode.DP_SUCCESS) { MessageBox.Show("Could not open device."); readers.Dispose(); readers = null; this.Close(); return; } if (reader.GetStatus() != Constants.ResultCode.DP_SUCCESS) { MessageBox.Show("Error getting device status."); readers.Dispose(); readers = null; this.Close(); return; } if (reader.Status.Status != Constants.ReaderStatuses.DP_STATUS_READY) { MessageBox.Show("Device not ready. Try again in a few seconds."); readers.Dispose(); readers = null; this.Close(); return; } HelperFunctions.LoadAllUsers(); reader.On_Captured += new Reader.CaptureCallback(reader_On_Captured); Constants.ResultCode captureResult = reader.CaptureAsync(Constants.Formats.Fid.ANSI, Constants.CaptureProcessing.DP_IMG_PROC_DEFAULT, reader.Capabilities.Resolutions[0]); if (captureResult != Constants.ResultCode.DP_SUCCESS) { MessageBox.Show("Error CaptureResult: " + captureResult.ToString()); } }