c# - 使用 DigitalPersona 4500 读取器进行指纹扫描。如何获取捕获的图像和加载事件处理程序

标签 c# fingerprint biometrics fingerprinting

我刚开始使用 C# 编写生物识别传感器和 DLL 代码。我使用的是 DigitalPersona 阅读器 UareU 4500。我阅读了 API 文档并查看了他们提供的示例程序。但是,我对使用 GUI 版本不感兴趣。我想使用 API 方法。我搜索了示例,但找不到任何描述性示例。请帮忙。

我的问题是如何设置加载事件处理程序以及如何获取位图图像中的指纹。

提前致谢。非常感谢任何信息或指南。

class FingerprintScanning
{
    public DPFP.Capture.Capture fingerprint = new DPFP.Capture.Capture();
    public DPFP.Sample sample = new DPFP.Sample();
    public DPFP.Capture.EventHandler EventHandler;
    public Bitmap picture_result = null;


    public void CaptureFingerprint()
    {
        fingerprint.StartCapture();

        //Events
     EventHandler.OnFingerTouch(fingerprint,fingerprint.ReaderSerialNumber);
 EventHandler.OnComplete(fingerprint,fingerprint.ReaderSerialNumber,sample);

        //Convert to Bitmap
        SampleConversion image = new SampleConversion();
        image.ConvertToPicture(sample, ref picture_result);
        fingerprint.StopCapture();

    }

最佳答案

我找到了使用 SDK 的 API 的示例。在这里分享以防任何人需要在类似的项目中实现。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Enrollment
{
/* NOTE: This form is a base for the EnrollmentForm and the VerificationForm,
    All changes in the CaptureForm will be reflected in all its derived forms.
*/
public partial class CaptureForm : Form, DPFP.Capture.EventHandler
{
    public CaptureForm()
    {
        InitializeComponent();
    }

    protected virtual void Init()
    {
        try
        {
            Capturer = new DPFP.Capture.Capture();              // Create a capture operation.

            if ( null != Capturer )
                Capturer.EventHandler = this;                   // Subscribe for capturing events.
            else
                SetPrompt("Can't initiate capture operation!");
        }
        catch
        {               
            MessageBox.Show("Can't initiate capture operation!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);            
        }
    }

    protected virtual void Process(DPFP.Sample Sample)
    {
        // Draw fingerprint sample image.
        DrawPicture(ConvertSampleToBitmap(Sample));
    }

    protected void Start()
    {
        if (null != Capturer)
        {
            try
            {
                Capturer.StartCapture();
                SetPrompt("Using the fingerprint reader, scan your fingerprint.");
            }
            catch
            {
                SetPrompt("Can't initiate capture!");
            }
        }
    }

    protected void Stop()
    {
        if (null != Capturer)
        {
            try
            {
                Capturer.StopCapture();
            }
            catch
            {
                SetPrompt("Can't terminate capture!");
            }
        }
    }

#region Form Event Handlers:

    private void CaptureForm_Load(object sender, EventArgs e)
    {
        Init();
        Start();                                                // Start capture operation.
    }

    private void CaptureForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        Stop();
    }
#endregion

#region EventHandler Members:

    public void OnComplete(object Capture, string ReaderSerialNumber, DPFP.Sample Sample)
    {
        MakeReport("The fingerprint sample was captured.");
        SetPrompt("Scan the same fingerprint again.");
        Process(Sample);
    }

    public void OnFingerGone(object Capture, string ReaderSerialNumber)
    {
        MakeReport("The finger was removed from the fingerprint reader.");
    }

    public void OnFingerTouch(object Capture, string ReaderSerialNumber)
    {
        MakeReport("The fingerprint reader was touched.");
    }

    public void OnReaderConnect(object Capture, string ReaderSerialNumber)
    {
        MakeReport("The fingerprint reader was connected.");
    }

    public void OnReaderDisconnect(object Capture, string ReaderSerialNumber)
    {
        MakeReport("The fingerprint reader was disconnected.");
    }

    public void OnSampleQuality(object Capture, string ReaderSerialNumber, DPFP.Capture.CaptureFeedback CaptureFeedback)
    {
        if (CaptureFeedback == DPFP.Capture.CaptureFeedback.Good)
            MakeReport("The quality of the fingerprint sample is good.");
        else
            MakeReport("The quality of the fingerprint sample is poor.");
    }
#endregion

    protected Bitmap ConvertSampleToBitmap(DPFP.Sample Sample)
    {
        DPFP.Capture.SampleConversion Convertor = new DPFP.Capture.SampleConversion();  // Create a sample convertor.
        Bitmap bitmap = null;                                                           // TODO: the size doesn't matter
        Convertor.ConvertToPicture(Sample, ref bitmap);                                 // TODO: return bitmap as a result
        return bitmap;
    }

    protected DPFP.FeatureSet ExtractFeatures(DPFP.Sample Sample, DPFP.Processing.DataPurpose Purpose)
    {
        DPFP.Processing.FeatureExtraction Extractor = new DPFP.Processing.FeatureExtraction();  // Create a feature extractor
        DPFP.Capture.CaptureFeedback feedback = DPFP.Capture.CaptureFeedback.None;
        DPFP.FeatureSet features = new DPFP.FeatureSet();
        Extractor.CreateFeatureSet(Sample, Purpose, ref feedback, ref features);            // TODO: return features as a result?
        if (feedback == DPFP.Capture.CaptureFeedback.Good)
            return features;
        else
            return null;
    }

    protected void SetStatus(string status)
    {
        this.Invoke(new Function(delegate() {
            StatusLine.Text = status;
        }));
    }

    protected void SetPrompt(string prompt)
    {
        this.Invoke(new Function(delegate() {
            Prompt.Text = prompt;
        }));
    }
    protected void MakeReport(string message)
    {
        this.Invoke(new Function(delegate() {
            StatusText.AppendText(message + "\r\n");
        }));
    }

    private void DrawPicture(Bitmap bitmap)
    {
        this.Invoke(new Function(delegate() {
        Picture.Image = new Bitmap(bitmap, Picture.Size);   // fit the image 
into the picture box
            }));
        }

        private DPFP.Capture.Capture Capturer;

    }
}

关于c# - 使用 DigitalPersona 4500 读取器进行指纹扫描。如何获取捕获的图像和加载事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45493824/

相关文章:

c# - 将 CSV 加载到 MySQL 这是一个错误吗? - 未找到文件异常

Java与指纹识别

ios - 是否可以获取 TouchID 信息并与指纹数据库进行比较?

android - 如何知道扫描了哪个手指进行生物识别?

c# - 通过 Web 套接字快速发送 Base64 字符串?

c# - 如何将阿拉伯文本转换为 SAMPA 语音?

c# - Entity Framework 是否使用反射并损害性能?

Android - BiometricPrompt 检测是否是面部识别码或触摸识别码

指纹匹配SDK