跳至内容

SourceAFIS/教程

来自维基教科书,开放世界中的开放书籍

本教程将指导您了解SourceAFIS的基础知识。它不提供完整的源代码列表 - 请查看分发包中的示例应用程序以获取完整的可编译源代码。这里重点关注SourceAFIS特定的主题。关于指纹匹配的常规信息可以在本教程中链接的外部资源中找到。

指纹采集

[编辑 | 编辑源代码]

要使用指纹图像,需要以某种方式获得它们。SourceAFIS没有内置的指纹采集方法。采集通常使用专门的活体指纹指纹读取器进行。指纹读取器通过图像采集SDK访问,该SDK可以从设备制造商处获得。请确保您的指纹读取器允许您检索指纹图像,而不是某些供应商专有的模板。其他采集方法也是可能的,例如扫描墨迹指纹或从犯罪现场获取潜指纹。无论采用哪种方法,最终都会得到某种标准格式(例如 BMP、JPEG)的指纹图像或原始灰度图像。SourceAFIS可以使用所有常见的图像格式。

SourceAFIS 设置

[编辑 | 编辑源代码]

在使用SourceAFIS功能之前,您需要执行一些简单的设置步骤。首先,从SourceForge 下载区下载最新版本的SourceAFIS并安装它。在您首选的开发环境(Visual Studio 或 MonoDevelop)中打开您的应用程序,并将SourceAFIS.dll添加到您的应用程序的引用。打开您要调用SourceAFIS方法的源文件,并添加使用指令,用于SourceAFIS.Simple 命名空间。

using SourceAFIS.Simple;

创建新的AfisEngine 对象并将其存储在某个位置,以便应用程序中的所有代码都可以访问它。创建多个AfisEngine 对象是可以的,但是为了简单起见并提高性能,建议在静态变量中只保留一个AfisEngine,如下所示

static AfisEngine Afis = new AfisEngine();

模板提取

[编辑 | 编辑源代码]

一旦您拥有了SourceAFIS的工作设置和一些采集到的指纹,就可以将它们导入SourceAFIS。以下示例使用属性AsBitmapSourceAsBitmapImage 创建了三个Fingerprint 对象,以处理不同的图像格式。

// using .NET 3.0 (WPF) bitmap
Fingerprint fp1 = new Fingerprint();
fp1.AsBitmapSource = new BitmapImage(new Uri(pathToImage, UriKind.RelativeOrAbsolute));

// using .NET 2.0 (WinForms) bitmap
Fingerprint fp2 = new Fingerprint();
fp2.AsBitmap = new Bitmap(Bitmap.FromFile(pathToImage));

// using raw grayscale image (see API docs for format description)
Fingerprint fp3 = new Fingerprint();
fp3.Image = myRawImage;

SourceAFIS 支持每个人有多个指纹。如果您现在只需要一个指纹,只需将其包裹在Person 对象中,如下所示

Person person = new Person();
person.Fingerprints.Add(fp);

SourceAFIS 不会直接匹配指纹图像。它会提取 指纹图像中的细节特征,并将它们存储在指纹模板 中,该模板比原始图像小得多,匹配速度也快得多。以下是执行提取过程的方法

Afis.Extract(person);

提取的模板保留在Fingerprint 对象的Template 属性中。模板提取非常耗时,每个指纹大约需要 150 毫秒。因此,明智的做法是在指纹采集后只执行一次提取,并将模板或整个Fingerprint/Person 对象与指纹图像一起保存在数据库中。

到目前为止,您已经采集了指纹图像,提取了指纹模板,并创建了包含单个FingerprintPerson 对象。此过程会针对所有传入的指纹重复执行。现在我们拥有了所有模板,如何进行匹配?很简单,只需将两个Person 对象传递给AfisEngine.Verify,如下所示

float score = Afis.Verify(person1, person2);
bool match = (score > 0);

此方法执行一对一(或 1:1,也称为验证)匹配,并返回两个指纹之间的相似度得分。如果返回的相似度得分是零,则指纹是不同的。如果得分高于零,则两个指纹匹配,相似度得分反映匹配的准确性。

准确性

[编辑 | 编辑源代码]

与任何其他分类 系统一样,SourceAFIS 会产生分类错误,从而降低其准确性。准确性进一步细分为

SourceAFIS 允许您通过设置AfisEngine.Threshold 为适当的匹配阈值,来选择特定于应用程序的 FAR 和 FRR 之间的平衡。这会指示AfisEngine.Verify 在相似度得分低于AfisEngine.Threshold 时返回零。较高的阈值可以保持 FAR 较低。较低的阈值可以保持 FRR 较低。

在某个平衡阈值下,FAR 和 FRR 相等,它们构成 EER(等误差率)。近似 EER 的最简单方法是使用匹配和非匹配指纹对进行一些测试,观察典型的匹配得分和典型的非匹配得分,并将阈值设置在两者之间。然后,您可以根据对 FAR 或 FRR 的偏好,将阈值向上或向下调整。

请注意,SourceAFIS 无法提供标准阈值,因为 EER 在不同的阈值下会发生变化,具体取决于指纹特征,例如指纹读取器类型、采样人群和使用的注册策略。更一般地说,ROC 曲线(FAR 和 FRR 作为阈值函数的曲线图)对于用于对 SourceAFIS 进行基准测试的每个测试数据库来说都是不同的。然而,SourceAFIS 确实为 AfisEngine.Threshold 设置了默认值,该值应该适用于原型以及您应用程序的初始测试。

既然您已经完成了一些简单的 一对一验证,现在是时候尝试进行 一对多 (1:N) 识别了。为了搜索整个指纹数据库,请将所有 Person 对象(候选对象)放入一个 可枚举 集合中,并将该集合传递给 AfisEngine.Identify,以及要查找的探测 Person

Person matchingCandidate = Afis.Identify(probePerson, allCandidates).FirstOrDefault();
bool match = (matchingCandidate != null);

从功能上来说,这等同于以下 LINQ 查询,只是 AfisEngine.Identify 的速度要快得多

Person matchingCandidate = (from candidate in allCandidates
              let score = Afis.Verify(probePerson, candidate)
              where score >= Afis.Threshold
              orderby score descending
              select candidate).FirstOrDefault();
bool match = (matchingCandidate != null);

AfisEngine.Identify 返回数组中与探测指纹匹配的候选对象。如果所有候选对象的匹配分数都低于 AfisEngine.Threshold,则 AfisEngine.Identify 返回 null。如果有多个候选对象的匹配分数高于阈值,则 AfisEngine.Identify 返回相似度分数最高的候选对象。

为了部署使用 SourceAFIS 的应用程序,您只需要分发一个文件:SourceAFIS.dll。将 SourceAFIS.dll 安装在您安装应用程序可执行文件的同一文件夹中。SourceAFIS 除了 .NET Framework 之外没有其他依赖项。SourceAFIS 不使用任何系统功能或不安全的代码。因此,它应该在 ASP.NET 或 Silverlight 等安全环境中运行。

尽管在本教程中我们使用的是每人一个指纹,但 SourceAFIS 支持多指匹配,以提高准确性。只需在每个 Person 对象中添加更多 Fingerprint 对象,并将这些 Person 对象传递给 VerifyIdentify。您可以使用 Fingerprint.Finger 属性来限制匹配到兼容的指纹对。您还可以设置 AfisEngine.MinMatches 来控制从单个指纹组合分数的过程。

SourceAFIS 允许您通过设置 AfisEngine.Dpi 来使用不同 DPI 的传感器。

PersonFingerprint 类支持在二进制流和 XML 中序列化。您还可以通过访问属性 Fingerprint.TemplateFingerprint.AsXmlTemplate 来序列化单个模板,分别用于二进制和 XML 编码。这两个类都支持继承,因此您可以添加(并序列化)自己的字段/属性。SourceAFIS 支持使用 Fingerprint.AsIsoTemplate 属性导出/导入 ISO/IEC 19794-2:2005 模板。

下一步

[编辑 | 编辑源代码]

请参阅 SourceAFIS 分发包中包含的示例,了解使用 SourceAFIS 的可运行应用程序。有关 SourceAFIS 功能的详细信息,请参阅 API 参考。如果您还有其他问题,请在 SourceAFIS 论坛 中提问。

华夏公益教科书