2013-02-28 46 views
1

我正在開發一個使用Digital Persona U.are.U 4000b指紋識別器的軟件。數字角色驗證過程花費大量時間與龐大的數據庫

它工作正常。但是我在指紋驗證過程中遇到了性能問題。

我的數據庫有大約3000個指紋登記在那裏,我需要在驗證過程中循環所有這些指紋。

但是每一次成功的指紋讀取大約需要7秒鐘來匹配我的數據庫的相應記錄(這取決於它的索引)。

對我來說這不是一個可以接受的場景,因爲我需要在20分鐘的時間內註冊(並且實時顯示他們的數據,照片......)至少400名學生。 這個問題真的是巨大的指紋數據庫,因爲當我用較小的指紋測試它時,它工作正常。

我使用.NET與C#和指紋的免費SDK。 的引起此故障代碼的行是一個,其被執行成FOREACH(對於數據庫中的每個登記的指紋):

verificator.Verify(features, template, ref result); 
  • verificatorDPFP.Verification.Verification對象它把驗證過程;
  • features是一個DPFP.FeatureSet對象,其中包含實際指紋的數據;
  • template是代表每個註冊指紋的對象DPFP.Template;
  • result是一個DPFP.Verification.Verification.Result對象,它包含每個指紋驗證的返回值。

這裏是整個process方法:

protected void process(DPFP.Sample sample) 
    { 
     DPFP.FeatureSet features = ExtractFeatures(sample, DPFP.Processing.DataPurpose.Verification); 
     bool verified = false; 
     if (features != null) 
     { 
      DPFP.Verification.Verification.Result result = new DPFP.Verification.Verification.Result(); 
      //"allTemplates" is an List<> of objects that contains all the templates previously loaded from DB 
      //There is no DB access in these lines of code 
      foreach (var at in allTemplates) 
      { 
       verificator.Verify(features, at.template, ref result); 
       if (result.Verified) 
       { 
        register(at.idStudent); 
        verified = true; 
        break; 
       } 
      } 
     } 
     if (!verified) 
      error("Invalid student."); 
    } 

我是不是做正確嗎?

還有另一種做這種工作的方式嗎?

+2

我會對數據庫進行配置文件以查看是否可以確定哪些查詢導致緩慢。一旦確定,你就可以開始研究如何潛在地提高性能。 – 2013-02-28 00:53:02

+0

這個問題肯定與數據庫無關。我執行預先登記的指紋。所示的線是緩慢的原因。 – 2013-02-28 01:20:37

+0

你怎麼知道顯示的行不在數據庫中? – 2013-02-28 02:58:31

回答

2

我通過購買解決我的問題的模板(我「獲得」了,因爲我已經買了一個閱讀器)SDK的新版本,該版本已經實現了標識(1:n)的功能。 您可以通過their website獲取更多信息並下載(購買)SDK。

0

嘗試SourceAFIS。它是開源的,如果你將指紋緩存在內存中,它會以高於10k指紋/秒的速度執行你正在談論的1-N識別過程。源代碼也是100%的C#。

0

最好的模板轉換成字符串

byte [] a = new byte [1632]; 
Template.Serialize (ref a); 
string Convert.ToBase64String basestring = (a); 

,然後返回到正常

byte [] b = new byte [1632]; 
b = Convert.FromBase64String (trace)// pass the base-64 string to a byte array. 
// create a Template type varibale where we store the template 
DPFP.Template DPFP.Template template = new(); 
// what to compare it desserializamos 
template.DeSerialize (b); 
相關問題