1

Digital Persona U.are.U 4000b 指紋リーダーを使用するソフトウェアを開発しています。

正常に動作しています。しかし、指紋認証中にパフォーマンスの問題が発生します。

私のデータベースには約 3,000 個の指紋が登録されており、検証プロセス中にそれらすべてをループする必要があります。

しかし、指紋の読み取りが成功するたびに、データベースのそれぞれのレコードと一致するまでに約 7 秒かかります (インデックスによって異なります)。

20 分間隔で少なくとも 400 人の学生を登録する (そしてデータや写真をリアルタイムで表示する) 必要があるため、これは私にとって受け入れられるシナリオではありません。問題は実際には巨大な指紋データベースにあります。小さいデータベースでテストしたところ、問題なく動作したからです。

私は .NET と C# を使用しており、フィンガープリントには無料の SDK を使用しています。この問題の原因となっているコード行は、(データベースの登録済みフィンガープリントごとに) FOREACH に実行されるコード行です。

verificator.Verify(features, template, ref result);
  • verificator検証プロセスを扱うDPFP.Verification.Verificationオブジェクトです。
  • features実際の指紋のデータを含むDPFP.FeatureSetオブジェクトです。
  • template登録された各指紋を表すDPFP.Templateオブジェクトです。
  • resultDPFP.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.");
    }

私はそれを正しくやっていますか?

その仕事をする別の方法はありますか?

4

3 に答える 3

2

私は、識別(1:n) 関数を既に実装している SDK の新しいバージョンを購入することで問題を解決しました (既にリーダーを購入していたので、「勝ちました」 )。詳細については、Web サイトで SDK をダウンロード (購入) してください。

于 2013-06-22T05:00:48.363 に答える
0

SourceAFIS を試してみてください。これはオープンソースであり、指紋をメモリにキャッシュすると、1 秒あたり 10,000 個の指紋よりも高速で、1-N の識別プロセスを実行します。ソースも 100% C# です。

于 2013-03-28T00:37:03.897 に答える
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);
于 2013-06-21T03:15:17.217 に答える