0

我有 Mantra MFS100 光学指纹传感器,我想构建一个 android 应用程序来显示正在扫描的手指类型。

我想制作应用程序,使其可以显示正在扫描的手指,如拇指或索引。

注意:我已经成功下载了mantra MFS100 Android SDK,但是没有任何功能可以检测被扫描的手指类型

下面是开始捕获手指数据的函数

private void StartSyncCapture() {

    // //// Use thread if you want to show preview, else no need to use
    // thread.
    new Thread(new Runnable() {

        @Override
        public void run() {
            SetTextonuiThread("");
            try {
                FingerData fingerData = new FingerData();
                int ret = mfs100.AutoCapture(fingerData, timeout, true,
                        false);
                if (ret != 0) {
                    SetTextonuiThread(mfs100.GetErrorMsg(ret));
                } else {
                    final Bitmap bitmap = BitmapFactory.decodeByteArray(
                            fingerData.FingerImage(), 0,
                            fingerData.FingerImage().length);
                    imgFinger.post(new Runnable() {
                        @Override
                        public void run() {
                            imgFinger.setImageBitmap(bitmap);
                            imgFinger.refreshDrawableState();
                        }
                    });

                    SetTextonuiThread("Capture Success");
                    String log = "\nQuality: " + fingerData.Quality()
                            + "\nNFIQ: " + fingerData.Nfiq()
                            + "\nWSQ Compress Ratio: "
                            + fingerData.WSQCompressRatio()
                            + "\nImage Dimensions (inch): "
                            + fingerData.InWidth() + "\" X "
                            + fingerData.InHeight() + "\""
                            + "\nImage Area (inch): " + fingerData.InArea()
                            + "\"" + "\nResolution (dpi/ppi): "
                            + fingerData.Resolution() + "\nGray Scale: "
                            + fingerData.GrayScale() + "\nBits Per Pixal: "
                            + fingerData.Bpp() + "\nWSQ Info: "
                            + fingerData.WSQInfo();
                    SetLogOnUIThread(log);

                    //////////////////// Extract ANSI Template
                    byte[] tempData = new byte[2000]; // length 2000 is mandatory
                    byte[] ansiTemplate = null;
                    int dataLen = mfs100.ExtractANSITemplate(fingerData.RawData(), tempData);
                    if(dataLen<=0)
                    {
                        if(dataLen==0)
                        {
                            SetTextonuiThread("Failed to extract ANSI Template");
                        }
                        else
                        {
                            SetTextonuiThread(mfs100.GetErrorMsg(dataLen));
                        }
                        return;
                    }
                    else
                    {
                        ansiTemplate = new byte[dataLen];
                        System.arraycopy(tempData, 0, ansiTemplate, 0,
                                dataLen);
                    }
                    //////////////////////////////////////////////

                    //////////////////// Extract ISO Image
                    dataLen=0;
                    tempData = new byte[(mfs100.GetDeviceInfo().Width() * mfs100.GetDeviceInfo().Height())+1078]; 
                    byte[] isoImage = null;
                    dataLen = mfs100.ExtractISOImage(fingerData.RawData(),tempData);
                    if(dataLen<=0)
                    {
                        if(dataLen==0)
                        {
                            SetTextonuiThread("Failed to extract ISO Image");
                        }
                        else
                        {
                            SetTextonuiThread(mfs100.GetErrorMsg(dataLen));
                        }
                        return;
                    }
                    else
                    {
                        isoImage = new byte[dataLen];
                        System.arraycopy(tempData, 0, isoImage, 0,
                                dataLen);
                    }
                    //////////////////////////////////////////////

                    //////////////////// Extract WSQ Image
                    dataLen=0;
                    tempData = new byte[(mfs100.GetDeviceInfo().Width() * mfs100.GetDeviceInfo().Height())+1078];
                    byte[] wsqImage = null;
                    dataLen = mfs100.ExtractWSQImage(fingerData.RawData(),tempData);

                    if(dataLen<=0)
                    {
                        if(dataLen==0)
                        {
                            SetTextonuiThread("Failed to extract WSQ Image");
                        }
                        else
                        {
                            SetTextonuiThread(mfs100.GetErrorMsg(dataLen));
                        }
                        return;
                    }
                    else
                    {
                        wsqImage = new byte[dataLen];
                        System.arraycopy(tempData, 0, wsqImage, 0,
                                dataLen);
                    }
                    //////////////////////////////////////////////

                    SetData2(fingerData,ansiTemplate,isoImage,wsqImage);
                }
            } catch (Exception ex) {
                SetTextonuiThread("Error");
            }
        }
    }).start();
}
4

3 回答 3

2

Namy,无法从捕获的数据中识别手指的位置(例如 LEFT_INDEX、LEFT_THUMB、RIGHT_INDEX 等)。您需要从侧面管理手指的位置。

于 2017-08-09T11:30:53.307 回答
0

您的示例代码有助于捕获和提取图像(WSQ 或 ISO)或模板 (ANSI)。

您必须使用函数将当前指纹与保存的指纹匹配。例如使用这种方法:mfs100.MatchISO

于 2017-06-02T07:47:16.587 回答
-1

如果你想做 Aadhaar 实现,你需要传递 PidOptions 并获取 pid_data 和 device_info 需要从https://download.mantratecapp.com/Forms/UserDownload下载 RDServiceMFS100然后导入到旧版本的 android 所以需要做一些添加 google maven(由 android studio 提供自动建议)之类的更改然后需要将旧约束替换为此编译“com.android.support.constraint:constraint-layout:1.1.3”,然后准备好测试并将代码放在你所在的位置想。

于 2020-07-02T07:51:22.117 回答