FaceID APIは、フェイス認識を通じてユーザー認証のためのバックエンドインフラストラクチャを確立するように設計されています。このAPIは、リモートクライアントからフェイス表現ベクトル(FRV)を受信し、これが提供されたFRVがデータベースに保存されている既存のクライアントに対応するかどうかを確認することにより機能します。この検証に基づいて、アクセスはクライアントに付与または拒否されます。
FaceID APIは、HTTPリクエストを送信できるクライアントがアクセスできます。 Golangを使用して開発され、RESTアーキテクチャに従って、APIはクライアントの実装に関して柔軟性を提供します。クライアントは任意のプログラミング言語で開発でき、Web、モバイル、デスクトップなどのさまざまなプラットフォームから発信できます。このシームレスな統合機能により、顔認識機能を多様なアプリケーションに組み込むことができます。特に、クライアントからFRVを取得するプロセスは、FaceID APIの責任の範囲外です。
APIドキュメントは、http://faceid.orionsoft.site/referenceで入手できます
注:このプロジェクトのルートディレクトリのファイルvectors.jsonにあるベクトルを使用して、APIをテストできます。これらのベクトルはすでにデータベースに保存されています。
フェイス認識は、顔の特徴を分析および比較することにより、個人を特定して検証することを含む技術です。これは生体認証のサブセットであり、セキュリティシステム、認証、ユーザーアクセス制御など、さまざまなアプリケーションがあります。フェイス認識の仕組みの簡略化された概要は次のとおりです。
顔の検出:最初のステップは、画像またはビデオフレームから顔を見つけて抽出することです。これは、入力データの潜在的な顔領域を識別するフェイス検出アルゴリズムを使用して行われます。
顔のアライメント:顔が検出されると、アルゴリズムは顔のアライメントを実行し、顔が標準化された位置にあることを確認します。これは、正確な比較のために機能を正規化するのに役立ちます。
特徴の抽出:これは、顔の特徴が抽出され、数値表現に変わる重要なステップです。これらの機能には、キーフェイシャルランドマーク間の距離、特定のポイント間の角度、およびある面を別の顔と区別できる他のデータが含まれる場合があります。特徴抽出に人気のある手法には、ローカルバイナリパターン(LBP)、配向勾配のヒストグラム(HOG)、および最近では深い学習ベースの方法が含まれます。
機能エンコーディング:抽出された特徴は、他の顔表現と簡単に比較できるコンパクトな表現に変換されます。これには、多くの場合、差別的な情報を保存しながら、機能の次元を減らすことが含まれます。
フェイスデータベース:シナリオには、認定ユーザーの顔表現(または埋め込み)を含むデータベースがあります。このデータベースは、登録中に各ユーザーの画像のセットを収集および処理することで作成できます。
フェイスマッチング:ユーザーがアクセスを取得しようとすると、提出された顔は同じパイプラインを介して処理されます:検出、アライメント、機能抽出、エンコード。結果として得られる顔の表現は、ユークリッド距離やコサインの類似性などの距離メトリックを使用して、顔データベースの表現と比較されます。アイデアは、最も近い一致を見つけることです。
しきい値:比較により、類似性スコアが生成されます。提出された顔がデータベース内の顔との一致と見なされるしきい値を設定します。しきい値は、誤検知と偽陰性のバランスをとるのに役立ちます。
意思決定:類似性スコアとしきい値に基づいて、アクセスを付与するかどうかにかかわらず、決定が下されます。スコアがしきい値を超え、許容可能な範囲内である場合、アクセスが許可されます。それ以外の場合、アクセスは拒否されます。
継続的な学習:時間の経過とともに認識の精度を改善するために、一部のシステムは継続的な学習を実装します。これには、ユーザーの新しい画像を使用してデータベース内の顔の表現を定期的に更新することが含まれます。これは、老化や顔の毛などの要因による外観の変化を説明するのに役立ちます。
FRVは、人の顔を表すベクトルです。それは顔の数値表現であり、顔を比較するために使用されます。 FRVは、クライアント側で使用されるライブラリによって実装された顔認識アルゴリズムによって生成されます。クライアント側は、任意のプラットフォーム(Web、モバイル、デスクトップなど)にすることができます。 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データベースはFRVSの保存に使用できますが、この種のデータには最適化されていません。ベクトルデータベースは、ベクトルの保存と検索に最適化されています。また、高速検索用に最適化されており、数ミリ秒で数百万のベクトルで検索を実行できます。これは、数ミリ秒で顔を識別できることを意味します。これは、リアルタイムアプリケーションに最適です。
このプロジェクトは、顔認識APIの簡単な実装です。これは、あらゆるアプリケーションにフェイス認識を統合するために使用できる単純なAPIです。 APIはGolangで記述されており、RESTアーキテクチャを使用しています。クライアントは任意の言語で記述でき、あらゆるプラットフォーム(Web、モバイル、デスクトップなど)から来ることができます。アプリケーションにフェイス認識を実装する場合は、FaceID APIを出発点として使用できます。ご質問や提案があれば、 [email protected]までお気軽にお問い合わせください。ありがとう!