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
オブジェクトです。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.");
}
私はそれを正しくやっていますか?
その仕事をする別の方法はありますか?