2013-10-15 4 views
0

ZKFinger SDK2.3.3.1 버전 및 장치를 사용 중입니다. 통신 프로토콜 SDK (32Bit Ver6.2.4.1 - DLL 버전 : zkemkeeper.dll - 6.2.4.1. 작은 USB 지문 스캐너가 있습니다. 나는 지문을 스캔한다.BioMetric FingerPrint

나는 바이트 배열을 얻는다. 나는 그것을 비트 맵 파일과 jpg 둘 다로 디스크에 저장했다. 그리고 지문은 꽤 잘 스캔 된 것처럼 보인다. 장치의 사용자에게 지문 템플리트를 설정하려면, 나는 해체했다. 지문 이미지는 다음 zkemkeeper.dll의 SetUserTmp 함수를 호출합니다. 아래

I am getting size error , (-3) in code. 

How can i go further? What is my mistake? 

가 USB 장치에서 손가락을 transfering 내 코드입니다 BioMetric 장치

bool fullImage = false; 

      zkfpEng.SaveJPG("Myfirstfinger.jpg"); 

      string strtmp, sRegTemplate; 
      object pTemplate; 


      sRegTemplate = zkfpEng.GetTemplateAsStringEx("9"); 

      pTemplate = zkfpEng.DecodeTemplate1(sRegTemplate); 

      // Note: 10.0Template can not be compressed 
      zkfpEng.SetTemplateLen(ref pTemplate, 602); 
      zkfpEng.SaveTemplate("Myfirstfingerprint.tpl", pTemplate); 



      byte[] TmpData = new byte[700]; 

      TmpData =ObjectToByteArray(pTemplate); 



      if (bIsConnected == false) 
      { 
       MessageBox.Show("Please connect the device first!", "Error"); 
       return; 
      } 



      int idwFingerIndex = Convert.ToInt32(cbFingerIndex.Text.Trim()); 

      int idwEnrollNumber = Convert.ToInt32(txtUserID.Text.Trim()); 
      int iTmpLength = 0; 
      string sdwEnrollNumber = txtUserID.Text.Trim(); 


      axCZKEM1.EnableDevice(iMachineNumber, false); 
      Cursor = Cursors.WaitCursor; 
      bool IsSetTmp = false; 

      IsSetTmp = axCZKEM1.SetUserTmp(iMachineNumber, idwEnrollNumber, idwFingerIndex, ref TmpData[0]); 
      int errCode = 0; 
      axCZKEM1.GetLastError(ref errCode); 
      MessageBox.Show(IsSetTmp.ToString() + " " + errCode.ToString()); 
      if (IsSetTmp == true) 
      { 
       MessageBox.Show("User template set successfully!", "Success"); 
      } 
      else 
      { 
       MessageBox.Show("User template not set successfully!", "Error"); 
      } 
+0

입니다 . – Aristos

+0

첫째, 클라이언트 연결 코드로 내 USB 장치에 연결하고 내 지문 이미지를 저장합니다. 그런 다음 다른 Bio-metric 장치에 연결하여 압축 된 지문 이미지 템플릿을 전송합니다. – Priya

+0

어떤 지문 스캐너 (하드웨어)를 사용합니까? – Olegas

답변

0

FP를 문자열로 읽고 압축 또는 변환하지 않고 동일한 문자열을 생체 인식 장치에 밀어 넣습니다.

1

나는 Remin이 말했듯이 이미지 파일로 변환 할 필요가 없다고 생각합니다. 일부 예제는 입니다. xaf 및 mysql db를 사용하고 있습니다.

private void DownloadUserInformationAction_Execute(object sender, SimpleActionExecuteEventArgs e) 
    { 
     IObjectSpace os = Application.CreateObjectSpace(); 
     Terminal terminal = (Terminal)View.SelectedObjects[0]; 

     //create new czkemclass obj 
     CZKEMClass myCZKEMClass = new CZKEMClass(); 

     //connecting the device 
     myCZKEMClass.Connect_Net(terminal.IPAddress, terminal.Port); 

     //Initialize variable for store temporary user information 
     int tMachineNo = 0; 
     string tEnrollNo = ""; 
     string tName = ""; 
     string tPassword = ""; 
     int tPrivilage = 0; 
     bool tEnabled = false; 
     int tFingerIndex; 
     int tFlag = 0; 
     string tTemplateData = ""; 
     int tTemplateLength = 0; 
     myCZKEMClass.EnableDevice(terminal.DeviceId, false); 
     myCZKEMClass.ReadAllUserID(terminal.DeviceId); 
     myCZKEMClass.ReadAllTemplate(terminal.DeviceId); 
     while (myCZKEMClass.SSR_GetAllUserInfo(tMachineNo, out tEnrollNo, out tName, out tPassword, out tPrivilage, out tEnabled)) 
     { 
      for (tFingerIndex = 0; tFingerIndex < 10; tFingerIndex++) 
      { 
       if (myCZKEMClass.GetUserTmpExStr(tMachineNo, tEnrollNo, tFingerIndex, out tFlag, out tTemplateData, out tTemplateLength)) 
       { 
        EmployeeBiometric employeeBiometric = new EmployeeBiometric(terminal.Session); 
        //employeeBiometric.EnrollNumber = tEnrollNo; 
        XPCollection<Employee> employees = new XPCollection<Employee>(terminal.Session); 
        employeeBiometric.Employee = employees.Where(emp => emp.EnrollNo == tEnrollNo).FirstOrDefault();//(emp => emp.Sequence.ToString() == tEnrollNo).FirstOrDefault(); 
        employeeBiometric.UserName = tName; 
        employeeBiometric.Password = tPassword; 
        employeeBiometric.Privilege = (Privilege)Enum.ToObject(typeof(Privilege), tPrivilage); 
        employeeBiometric.Enabled = tEnabled; 
        employeeBiometric.FingerprintIndex = tFingerIndex; 
        employeeBiometric.FingerprintTemplate = tTemplateData; 
        employeeBiometric.TemplateLength = tTemplateLength; 
        terminal.Session.CommitTransaction(); 

       } 

      } 
     } 
     myCZKEMClass.EnableDevice(terminal.DeviceId, true); 
    } 

이 방법은 장치에서 응용 프로그램으로 지문 이미지를 다운로드하는 방법입니다.

여기 당신은 클라이언트 측 컴퓨터에서 실행되는 것과 서버 측 프로그래밍을 혼동가 다른 장치

private void UploadUserInformationAction_Execute(object sender, PopupWindowShowActionExecuteEventArgs e) 
    { 
     IObjectSpace os = Application.CreateObjectSpace(); 
     EmployeeBiometric employeeBiometric = (EmployeeBiometric)View.SelectedObjects[0]; 
     EmployeeBiometricParameter param = (EmployeeBiometricParameter)e.PopupWindowViewCurrentObject; 

     //create new czkemclass obj 
     CZKEMClass myCZKEMClass = new CZKEMClass(); 

     //connecting the device 
     myCZKEMClass.Connect_Net(param.Terminal.IPAddress, param.Terminal.Port); 
     myCZKEMClass.EnableDevice(param.Terminal.DeviceId, false); 


     int myCount = View.SelectedObjects.Count; 
     //Set specific user to fingerprint device 
     for (int i = 1; i <= myCount; i++) 
     { 
      int tMachineNo = param.Terminal.DeviceId; 
      string tEnrollNo = employeeBiometric.Employee.EnrollNo;//Sequence.ToString(); 
      string tName = employeeBiometric.UserName; 
      string tPassword = employeeBiometric.Password; 
      int tPrivilege = (int)employeeBiometric.Privilege; 
      bool tEnabled = employeeBiometric.Enabled; 
      int tFingerIndex = employeeBiometric.FingerprintIndex; 
      string tTmpData = employeeBiometric.FingerprintTemplate; 
      int tFlag = 1; 

      if (myCZKEMClass.SSR_SetUserInfo(tMachineNo, tEnrollNo, tName, tPassword, tPrivilege, tEnabled)) 
      { 
       myCZKEMClass.SetUserTmpExStr(tMachineNo, tEnrollNo, tFingerIndex, tFlag, tTmpData); 
      } 
     } 

     myCZKEMClass.RefreshData(param.Terminal.DeviceId); 
     myCZKEMClass.EnableDevice(param.Terminal.DeviceId, true); 
    } 

에 다시 업로드 할 수 있습니다이 내 "터미널"클래스

public partial class Terminal : XPCustomObject 
{ 
    Guid fOid; 
    [Key(AutoGenerate = true), Browsable(false)] 
    public Guid Oid 
    { 
     get { return fOid; } 
     set { SetPropertyValue<Guid>("Oid", ref fOid, value); } 
    } 

    private Branch _Branch; 
    [RuleRequiredField("", DefaultContexts.Save, "Branch required")] 
    public Branch Branch 
    { 
     get 
     { 
      return _Branch; 
     } 
     set 
     { 
      SetPropertyValue("Branch", ref _Branch, value); 
     } 
    } 
    string fDescription; 
    [RuleUniqueValue("", DefaultContexts.Save, "The value was already registered within the system.", ResultType = ValidationResultType.Warning)] 
    [RuleRequiredField("", DefaultContexts.Save, "Description required")] 
    public string Description 
    { 
     get { return fDescription; } 
     set { SetPropertyValue<string>("Description", ref fDescription, value); } 
    } 
    string fIPAddress; 
    [Size(15)] 
    public string IPAddress 
    { 
     get { return fIPAddress; } 
     set { SetPropertyValue<string>("IPAddress", ref fIPAddress, value); } 
    } 

    private int _Port; 
    public int Port 
    { 
     get 
     { 
      return _Port; 
     } 
     set 
     { 
      SetPropertyValue("Port", ref _Port, value); 
     } 
    } 

    string fDeviceDescription; 

    public string DeviceDescription 
    { 
     get { return fDeviceDescription; } 
     set { SetPropertyValue<string>("DeviceDescription", ref fDeviceDescription, value); } 
    } 

    private int _DeviceId; 
    public int DeviceId 
    { 
     get 
     { 
      return _DeviceId; 
     } 
     set 
     { 
      SetPropertyValue("DeviceId", ref _DeviceId, value); 
     } 
    } 

    private bool _Disabled; 
    public bool Disabled 
    { 
     get 
     { 
      return _Disabled; 
     } 
     set 
     { 
      SetPropertyValue("Disabled", ref _Disabled, value); 
     } 
    }}