Example #1
0
 private void FingerPrint_Captured(object sender, CapturedEventArgs e)
 {
     this.Invoke((Action)(() =>
     {
         this.toolStripStatusLabel1.Text = e.Score.ToString();
         if (string.IsNullOrEmpty(e.ErrorInfo) == false)
         {
             Console.Beep();
         }
         else
         {
             Speak("很好");
             SendKeys.SendWait(e.Text + "\r");
         }
     }));
 }
Example #2
0
        // parameters:
        //      template_buffer 指纹模板数据
        //      length  template_buffer 数组内有效数据长度
        void ProcessCaptureData(
            byte[] image_buffer,
            byte[] template_buffer,
            int length)
        {
            if (this.HasImageReady())
            {
                Task.Run(() =>
                {
                    MemoryStream ms = new MemoryStream();
                    BitmapFormat.GetBitmap(image_buffer,
                                           _captureData.mfpWidth,
                                           _captureData.mfpHeight,
                                           ref ms);
                    TriggerImageReady(null, new ImageReadyEventArgs {
                        Image = new Bitmap(ms)
                    });
                });
            }

            if (_mode == "register")
            {
                // 查重
                {
                    int id = 0, score = 0;
                    int ret = zkfp2.DBIdentify(_dBHandle, template_buffer, ref id, ref score);
                    if (zkfp.ZKFP_ERR_OK == ret)
                    {
                        // 根据 id 取出 barcode 字符串
                        string strBarcode = (string)_id_barcode_table[id.ToString()];
                        if (_exclude.IndexOf(strBarcode) == -1)
                        {
                            Speaking($"您的指纹以前已经被 {strBarcode} 注册过了(id={id}),无法重复注册");
                            return;
                        }
                    }
                }

                // 和上一次的比对
                if (_register_template_list.Count > 0)
                {
                    int nRet = zkfp2.DBMatch(_dBHandle, template_buffer, _register_template_list[_register_template_list.Count - 1]);
                    if (nRet <= 0)
                    {
                        _register_template_list.Clear();    // 从头来
                        Light("red");
                        Speaking("刚扫入的指纹质量不佳,请继续重新扫入");
                        return;
                    }
                }

                {
                    byte[] buffer = new byte[length];
                    Array.Copy(template_buffer, buffer, length);

                    _register_template_list.Add(buffer);
                }

                if (_register_template_list.Count >= 3)
                {
                    Light("green");
                    // 结束 register 轮回
                    _eventRegisterFinished.Set();
                    return;
                }
                Light("green");
                Speaking("很好。还需要扫入 " + (3 - _register_template_list.Count) + " 个指纹");
                return;
            }

            {
                int ret = zkfp.ZKFP_ERR_OK;
                int fid = 0, score = 0;
                ret = zkfp2.DBIdentify(_dBHandle, template_buffer, ref fid, ref score);
                Debug.WriteLine(string.Format("ret={0}, fid={1}, score={2}", ret, fid, score));
                if (score >= _shreshold
                    // zkfp.ZKFP_ERR_OK == ret
                    )
                {
                    //textRes.Text = "Identify succ, fid= " + fid + ",score=" + score + "!";
                    //return;

                    // 根据 id 取出 barcode 字符串,然后发送给当前焦点 textbox
                    string strBarcode = (string)_id_barcode_table[fid.ToString()];
                    //SafeBeep(1);
                    CapturedEventArgs e1 = new CapturedEventArgs
                    {
                        Text  = strBarcode,
                        Score = score
                    };
                    Light("green");
                    TriggerCaptured(null, e1);
                    // SendKeys.SendWait(strBarcode + "\r");
                    //if (this.BeepOn == false)
                    //    Speak("很好");

                    // 闪绿灯
                    //SafeLight("green");
                }
                else
                {
                    //textRes.Text = "Identify fail, ret= " + ret;
                    //return;
                    CapturedEventArgs e1 = new CapturedEventArgs
                    {
                        Score     = score,
                        ErrorInfo = $"无法识别, 错误码={ret}"
                    };
                    Light("red");
                    TriggerCaptured(null, e1);
                }
            }
        }
Example #3
0
        // parameters:
        //      template_buffer 指纹模板数据
        //      length  template_buffer 数组内有效数据长度
        static void ProcessCaptureData(
            byte[] image_buffer,
            byte[] template_buffer,
            int length)
        {
            if (ImageReady != null)
            {
                Task.Run(() =>
                {
                    MemoryStream ms = new MemoryStream();
                    BitmapFormat.GetBitmap(image_buffer,
                                           _captureData.mfpWidth,
                                           _captureData.mfpHeight,
                                           ref ms);
                    ImageReady(null, new ImageReadyEventArgs {
                        Image = new Bitmap(ms)
                    });
                });
            }

            if (_mode == "register")
            {
#if NO
                // 查重
                {
                    int id = 0, score = 0;
                    int ret = zkfp2.DBIdentify(mDBHandle, template_buffer, ref id, ref score);
                    if (zkfp.ZKFP_ERR_OK == ret)
                    {
                        // TODO: 需要把 id 翻译为号码字符串显示
                        Speaking("您的指纹以前已经注册过了(id=" + id + "),无法重复注册");
                        return;
                    }
                }
#endif

                // 和上一次的比对
                if (_register_template_list.Count > 0)
                {
                    int nRet = zkfp2.DBMatch(_dBHandle, template_buffer, _register_template_list[_register_template_list.Count - 1]);
                    if (nRet <= 0)
                    {
                        Speaking("刚扫入的指纹质量不佳,请继续重新扫入");
                        return;
                    }
                }

                {
                    byte[] buffer = new byte[length];
                    Array.Copy(template_buffer, buffer, length);

                    _register_template_list.Add(buffer);
                }

                if (_register_template_list.Count >= 3)
                {
                    // 结束 register 轮回
                    _eventRegisterFinished.Set();
                    return;
                }
                Speaking("很好。还需要扫入 " + (3 - _register_template_list.Count) + " 个指纹");
                return;
            }

            {
                int ret = zkfp.ZKFP_ERR_OK;
                int fid = 0, score = 0;
                ret = zkfp2.DBIdentify(_dBHandle, template_buffer, ref fid, ref score);
                if (zkfp.ZKFP_ERR_OK == ret)
                {
                    //textRes.Text = "Identify succ, fid= " + fid + ",score=" + score + "!";
                    //return;

                    // 根据 id 取出 barcode 字符串,然后发送给当前焦点 textbox
                    string strBarcode = (string)_id_barcode_table[fid.ToString()];
                    //SafeBeep(1);
                    CapturedEventArgs e1 = new CapturedEventArgs
                    {
                        Text  = strBarcode,
                        Score = score
                    };
                    Captured(null, e1);
                    // SendKeys.SendWait(strBarcode + "\r");
                    //if (this.BeepOn == false)
                    //    Speak("很好");

                    // 闪绿灯
                    //SafeLight("green");
                }
                else
                {
                    //textRes.Text = "Identify fail, ret= " + ret;
                    //return;
                    CapturedEventArgs e1 = new CapturedEventArgs
                    {
                        ErrorInfo = "Identify fail, ret= " + ret
                    };
                    Captured(null, e1);
                }
            }
        }