Exemple #1
0
        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;
        }
Exemple #4
0
        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();
            }
        }
Exemple #6
0
        /// <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();
            }
        }
Exemple #8
0
        //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());
            }
        }