2017-10-13 7 views
0

인증을 위해 지문을 스캔 할 때마다 해당 지문을 데이터베이스에 이미 등록했지만 "지문이 확인되지 않았습니다"라는 메시지가 나타납니다. 폼이로드항상 지문이 확인되지 않습니다.

Private Sub Me_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load 

    Init() 
    StartCapture() 

    Dim conn As New MySqlConnection 
    Dim cmd As New MySqlCommand 
    Dim sql As String 
    conn.ConnectionString = "**** " 
    conn.Open() 
    sql = ("SELECT * FROM new_case_file") 
    cmd.Connection = conn 
    cmd.CommandText = sql 
    Dim rdr As MySqlDataReader = cmd.ExecuteReader() 

    While (rdr.Read()) 
     Dim MemStream As IO.MemoryStream 
     Dim fpBytes As Byte() 

     fpBytes = rdr("FingerPrint") 
     MemStream = New IO.MemoryStream(fpBytes) 

     Dim templa8 As DPFP.Template = New DPFP.Template() 
     templa8.DeSerialize(MemStream) 
     Dim serializedTemplate As Byte() = MemStream.ToArray 

     Dim tmpObj As New AppData 
     Dim FPList As List(Of AppData) = New List(Of AppData) 
     'tmpObj.No = rdr("No").ToString() 
     'tmpObj.Template = templa8 
     'FPList.Add(tmpObj) 
    End While 
    conn.Close() 

End Sub 

여기 검증을위한 코드가있을 때 폼이로드

여기 코드가 캡처 때 여기에서 캡처를위한 코드입니다. 버튼을 클릭하면 버튼 클릭 하위에 verifyControl_Commplete이라는 하위 태그가 호출 되었기 때문에 확인해야합니다.

'THIS NEEDS TO BE AT THE CLASS-LEVEL, AS A MEMBER 
Private FPList As New List(Of AppData) 

Private Sub Me_Load(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) 
                  Handles MyBase.Load  
    Init() 
    StartCapture() 

    Dim sql As String = "SELECT * FROM new_case_file" 
    Using conn As New MySqlConnection("**** "), _ 
      cmd As New MySqlCommand(sql, conn) 

     conn.Open() 
     Using rdr As MySqlDataReader = cmd.ExecuteReader() 
      FPList.Clear() 
      While (rdr.Read()) 
       Dim tmpObj As New AppData 
       tmpObj.No = rdr("No").ToString() 

       Dim fpBytes As Byte() = rdr("FingerPrint") 
       Using MemStream As New IO.MemoryStream(fpBytes) 

        Dim templa8 As New DPFP.Template() 
        templa8.DeSerialize(MemStream) 
       End Using 
       tmpObj.Template = templa8 

       FPList.Add(tmpObj) 
      End While 
      rdr.Close() 
     End Using 
    End Using 
End Sub 

이제 다른 코드는 나중에 같은 FPList 변수를 사용할 수 있습니다 :

Private Sub verifyControl_OnComplete(ByVal Control As Object, ByVal FeatureSet As DPFP.FeatureSet, ByRef EventHandlerStatus As 
DPFP.Gui.EventHandlerStatus) Handles verifyControl.OnComplete 


    Dim printFound As Boolean = False 
    'Dim printFound As Boolean = True 
    'Dim printFound As Boolean = False 
    Dim VerifiedFPData = New AppData 
    Dim FPList As List(Of AppData) = New List(Of AppData) 
    Try 

     For Each FPData As AppData In FPList 
      Dim tmplateData As New DPFP.Template 
      'tmplateData = FPData.Template 
      Dim compareTo As New DPFP.FeatureSet 
      compareTo = FeatureSet 

      Dim ver As New DPFP.Verification.Verification() 
      Dim res As New DPFP.Verification.Verification.Result() 

      If Not tmplateData Is Nothing Then 
       ver.Verify(FeatureSet, tmplateData, res) 

       If res.Verified Then 
        EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Success 
        printFound = True 
        VerifiedFPData = FPData 

        Exit For 

       End If 
      End If 

     Next 

    Catch ex As Exception 
     MessageBox.Show("Error") 
    End Try 


    If printFound Then 
     MsgBox("Verified") 
    Else 
     EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Failure 

     MsgBox("Not Verified") 
    End If 

End Sub 


Private Sub btnverifyfp_Click(sender As Object, e As EventArgs) Handles btnverifyfp.Click 
    verifyControl_OnComplete(Nothing, Nothing, Nothing) 
End Sub 

는 코드이 시도 지문을

Dim fingerprintData As MemoryStream = New MemoryStream 
Enroller.Template.Serialize(fingerprintData) 
Dim serializedTemplate As Byte() = fingerprintData.ToArray() 
Dim bytes() As Byte = serializedTemplate 
+1

코드의 형식을 지정하십시오. 따르기 쉽지 않습니다. 또한 디버깅 도움말을 찾는 질문은 주제와 관련이 없습니다. – Codexer

답변

0

저장에 사용 리터입니다. 다른 곳에서는 New List(Of AppData)이라고 쓰면 뭔가 잘못되었습니다.

AppData 클래스는 다음과 같이 보일 것이다 :

Public Class AppData 
    Public Property No As String 
    Public Property Template As DFFP.Template 
End Class 

그리고 마지막으로, 확인 코드 : 다시

Private Sub verifyControl_OnComplete(ByVal Control As Object, ByVal FeatureSet As DPFP.FeatureSet, 
            ByRef EventHandlerStatus As DPFP.Gui.EventHandlerStatus) 
    Handles verifyControl.OnComplete 

    Try 

     Dim ver As New DPFP.Verification.Verification() 
     Dim res As New DPFP.Verification.Verification.Result() 

     For Each FPData As AppData In FPList 
      If FPData.Template Is Nothing Then Continue 

      ver.Verify(FeatureSet, FPData.Template, res) 
      If res.Verified Then 
       EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Success 
       MsgBox("Verified") 
       Return 
      End If 

     Next FPDAta 

    Catch ex As Exception 
     MessageBox.Show("Error") 
    End Try 

    EventHandlerStatus = DPFP.Gui.EventHandlerStatus.Failure 
    MsgBox("Not Verified") 
End Sub 

는 ... 우리는 당신의 API 문서에 액세스 할 수없는, 테스트 데이터 또는 장비. 그건 우리가 장래에 당신을 도우려는 것을 의미합니다. 아마도 이것과 관련된 문제가있을 수 있으며 문제를 해결하고 디버그 할 수 있어야합니다.

+0

안녕하십니까, 귀하의 회신에 감사드립니다. 이 코드에서 오류가 발생했습니다. (rdr As MySqlDataReader = cmd.ExecuteReader()) rdr이 선언되지 않았으므로 보호 수준으로 인해 액세스 할 수 없습니다. 도울 수 있니? –

+0

그 라인은 rdr을 선언합니다. 코드가 올바르게 복사되었는지 확신 하시겠습니까? –

+0

예, 복사하여 붙여 넣습니다. –