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]與我聯繫。謝謝你!