FaceID API旨在通过面部识别来建立用于用户身份验证的后端基础架构。该API通过从远程客户端接收面部表示向量(FRV)来发挥功能,然后验证提供的FRV是否对应于数据库中存储的现有一个。基于此验证,授予或拒绝访问权限。
任何能够发送HTTP请求的客户端都可以访问FaceID API。 API使用Golang开发并遵循REST体系结构,在客户实现方面具有灵活性。客户可以用任何编程语言开发,并且可以源自Web,Mobile或Desktop等各种平台。这种无缝集成能力使将面部识别功能纳入各种应用程序。值得注意的是,从客户那里获得FRV的过程落在Faceid API职责的范围之外。
API文档可在http://faceid.orionsoft.site/reference上找到
注意:您可以使用该项目的根目录中的file vectors.json上的向量来测试API。这些向量已经存储在数据库中。
面部识别是一种技术,涉及通过分析和比较其面部特征来识别和验证个人。它是生物特征识别的子集,并且具有各种应用程序,包括安全系统,身份验证和用户访问控制。这是面部识别方式的简化概述:
面部检测:第一步是从图像或视频框架中找到和提取面。这是使用面部检测算法完成的,该算法可以识别输入数据中的潜在面部区域。
面部对齐:一旦检测到面部,算法可能会执行面部对齐,以确保面部处于标准化位置。这有助于使功能正常化以进行准确的比较。
特征提取:这是一个至关重要的步骤,其中提取面部的独特特征并变成数值表示。这些功能可能包括关键面部标志之间的距离,某些点之间的角度以及其他可以区分另一个面孔的数据之间的距离。特征提取的流行技术包括局部二进制模式(LBP),定向梯度的直方图(HOG)以及最近基于深度学习的方法。
特征编码:然后将提取的特征转换为紧凑的表示,可以轻松地将其与其他面部表示。这通常涉及在保留其歧视性信息的同时降低功能的维度。
面部数据库:在您的情况下,您将拥有一个数据库,其中包含授权用户的面部表示(或嵌入)。可以通过在注册过程中收集和处理每个用户的一组图像来创建此数据库。
面部匹配:当用户尝试访问访问时,通过相同的管道处理其提交的面孔:检测,对齐,特征提取和编码。然后,使用欧几里得距离或余弦等距离度量标准将所得的面部表示与您的面部数据库中的表示形式进行比较。这个想法是找到最接近的比赛。
阈值:比较产生相似性得分。您将设置一个阈值值,在该阈值中,提交的面部被视为与数据库中的脸部匹配。阈值有助于平衡误报和假否定性。
决策:基于相似性得分和阈值,是否授予访问权是否授予。如果分数高于阈值,并且在可接受的范围内,则可以授予访问权限。否则,访问将被拒绝。
持续学习:为了提高随着时间的推移识别精度,一些系统实施了持续学习。这涉及使用用户的新图像定期更新数据库中的面部表示形式。由于衰老或面部毛发等因素,这可以帮助解决外观变化。
FRV是代表一个人面孔的向量。它是面部的数值表示,用于比较面部。 FRV是由客户端使用的库实现的面部识别算法生成的。客户端可以是任何平台(网络,移动,桌面等)。让我们看一下FRV结构:
[
0.123, -0.456, 0.789, 0.234, 0.567, 0.123, 0.678, -0.345,
-0.987, 0.876, -0.123, -0.456, 0.789, -0.234, -0.567, 0.123,
0.678, 0.345, -0.987, -0.876, 0.123, 0.456, -0.789, 0.234,
0.567, -0.123, 0.678, 0.345, 0.987, -0.876, -0.123, 0.456,
-0.789, 0.234, -0.567, -0.123, -0.678, 0.345, 0.987, 0.876,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234,
-0.567, 0.123, 0.678, 0.345, -0.987, -0.876, 0.123, 0.456,
-0.789, 0.234, -0.567, -0.123, -0.678, 0.345, 0.987, 0.876,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234,
0.123, -0.456, 0.789, -0.234, 0.567, -0.123, -0.678, -0.345,
0.987, -0.876, 0.123, 0.456, -0.789, -0.234, -0.567, -0.123,
0.678, -0.345, -0.987, 0.876, -0.123, -0.456, 0.789, -0.234
]
在上面,我们有一个128维度的FRV(面部表示向量),该数字表示某人的脸部。不同的库可以生成不同的尺寸FRV,即可以长256、512甚至更长的尺寸。我们可以将此FRV视为某人脸的数字单章。因为没有人的脸相同,所以没有人拥有相同的frv。因此,可以使用FRV来识别针对FRV数据库的人。
此FaceID API利用客户端发送的FRV来识别给定的FRV是否匹配数据库中的任何FRV。如果给定的FRV匹配数据库中的任何FRV,则API授予对客户端的访问。否则,API拒绝访问客户端。
向量数据库是数据库世界上的新事物,其用法正在迅速增长。在我们的情况下,我们使用的是QDRANT(https://qdrant.tech),这是一个开源且免费使用的向量数据库。请记住,面部表示向量基本上是一系列浮点数,大小可能很大。在这个faceid API上,我们使用了128尺寸FRV,但可以长256、512甚至更长的尺寸。因此,我们需要一个数据库,可以存储大量数据并可以对其进行快速搜索。
传统的SQL和NOSQL数据库可用于存储FRV,但并未针对此类数据进行优化。向量数据库已优化用于存储和搜索向量。它们还可以优化用于快速搜索,并且可以在几毫秒内对数百万个向量进行搜索。这意味着可以在几毫秒内识别面部,这对于实时应用非常有用。
该项目是面部识别API的简单实现。这是一个简单的API,可用于在任何应用程序中整合面部识别。 API用Golang编写,并使用REST体系结构。客户端可以用任何语言编写,并且可以来自任何平台(Web,Mobile,Desktop等)。如果要在应用程序中实现面部识别,则可以将FaceID API用作起点。如果您有任何疑问或建议,请随时通过[email protected]与我联系。谢谢你!