
FileMakerエンジニア

今回は、「FileMaker(ファイルメーカー)で顔認証は実現できるのか?」という疑問から、実際に簡易的な顔認証システムの開発に挑戦してみました。
顔認証にはどのような技術が使われているのか、実装の難易度や注意点などもあわせてご紹介します。
目次
顔認証とは?
顔の特徴を用いて、個人を識別・認証する技術です。
スマートフォンのロック解除、空港の自動入国審査、出退勤管理、監視カメラでの本人特定など、さまざまな場面で活用されています。
顔認証の仕組み
顔検出(Face Detection)
カメラ映像や画像から「顔らしい領域」を検出します。
特徴抽出(Feature Extraction)
OpenCVやMTCNN(Multi-task Cascaded Convolutional Networks)などがよく使用され、目・鼻・口などの顔の特徴点や立体構造をもとに、顔を数値(ベクトル)として表現します。
照合(Matching)
登録済みの顔ベクトルと、認証時の顔ベクトルを比較します。
類似度(ユークリッド距離やコサイン類似度)が一定のしきい値以下であれば「同一人物」と判定されます。
ユークリッド距離、しきい値は以下で説明いたします。
ベクトルとは?
顔認証では「ベクトル(vector)」という言葉が頻繁に登場します。
ベクトルとは、向きと大きさを持つ量のことです。
たとえば、「北東に100メートル進む」「右に5メートル、上に3メートル移動する」これらはどちらも「方向と距離」を持った情報、つまりベクトルです。
数学では、ベクトルは以下のように数値の並びで表現されます。
- 2次元: (3, 4)
- 3次元: (2, -1, 5)
- n次元: (x₁, x₂, …, xₙ)
二次元であれば前に3m、右に4mのようになります。
顔認証ではこのベクトルを使って、認証時の顔がどれだけ登録済みの顔に近いかを数値で計算します。
主な顔認証技術の例
技術名 | 概要 |
---|---|
FaceNet | 顔を128次元ベクトルに変換し、比較可能にします。 |
ArcFace | よりシャープな境界を学習できる高精度な顔認証モデル。 |
Apple Face ID | TrueDepthカメラと機械学習による3D顔認識技術。 |
これらはすべてベクトルを活用していますが、使用する次元数や計算手法は異なります。
今回は、FaceNetと類似の手法を参考にして開発を行いました。
開発概要
今回は、以下の2機能に絞って開発を行いました。
・顔の新規登録
・顔の認証
カメラ起動(WebRTC)
FileMaker上で顔を認識させるため、Webビューア内でWebRTCを用いてカメラを起動します。
※2025年7月現在、WebRTCはFileMakerではMacおよびWebDirectのみ対応です。
FileMakerスクリプトとの連携
Webビューアで認識された顔のベクトルデータをFileMakerへ送信し、スクリプトを実行します。
新規登録
ベクトルを登録するだけなので、詳細な説明は割愛します。

顔認証の計算ロジック
認証は、登録されているベクトルと認証時に取得したベクトルの「ユークリッド距離」を計算して、本人かどうかを判定します。
ユークリッド距離とは?
2点間の「直線距離」のことで、以下のような式で求められます。(2次元の場合)
\( d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \)
これは中学校で習う「三平方の定理(ピタゴラスの定理)」と同じです。
顔認証では128次元のベクトルを用います。
2つのn次元ベクトル A, B の距離は以下の式で求められます。
\[ d(A, B) = \sqrt{(a_1 - b_1)^2 + (a_2 - b_2)^2 + \cdots + (a_n - b_n)^2} \\ \quad\;\;\; = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2} \]
さて、二つ数式が出てきましたが数学が苦手な人などは「わからない」となってしまいますのでここからは実際にFileMakerスクリプトで解説させていただきます。
実はそこまで難しい計算式ではありませんので是非最後まで読んでください。
実装手順
ベクトルの受け取り
まずは、認証時に取得された顔ベクトル(A)と、登録済みの顔ベクトル(B)を処理可能な形に整形します。
- どちらも128次元の固定長ベクトルとして取得します。
- 受け取ったベクトル文字列は、改行区切りなどで配列(リスト)に変換して扱いやすくします。
- 登録されているベクトルの中で、128次元に満たないものや異常値が含まれるものは除外対象とします。
- 照合対象が複数ある場合に備えて、「現在の最小距離」を仮に 9999 のような大きな数値で初期化しておきます(後で最小距離と比較するため)。

差分の計算
AとBの各次元(1〜128)について、画像のように求めます。

順に解析すると改行データ、1行目のAとBのデータの差を求めます。
求めた差を二乗し合計値として保持していきます。
これを2行目、3行目…128行目とすべて計算し合計値を出します。
差の2乗
差を二乗する理由は、この差がプラスになる場合もマイナスになる場合もあるため二乗を使うことにより、すべての値を正の数として扱い、個々の次元の違いを純粋に加算していくことができます。
負の数字が入ることで計算の結果が0になってしまい本人じゃなくても完全一致となってしまうからです。
平方根を取って距離を算出
平方根を取るためには[Sqrt( 数値 )]という関数を使用します

もっとも距離の短いベクトルを選出
すべての登録ベクトルBについて、ステップを繰り返し、最終的に最も距離の小さい(最も近い)ベクトルを1つ選びます。
各ベクトルとの距離を比較しながら、最小距離を持つベクトルを逐次更新していく方式が一般的です。

しきい値で判定
「一番近いベクトル」が見つかったとしても、それが必ずしも本人とは限りません。
なぜなら、次のようなケースが考えられるからです。
- 複数の人のベクトルが似てしまうケースもある
- 照明条件や顔の向きによって多少の誤差が出る
そのため、次のようなしきい値(threshold)をあらかじめ設定しておきます。
たとえば 0.6以下 の距離であれば「同一人物とみなす。
それ以上なら「別人の可能性が高い」と判定する
このしきい値は、システムの目的や許容する誤差に応じて適宜調整してください。
(例:セキュリティ重視なら0.4以下、ユーザビリティ重視なら0.7まで許容など)

実装動画
このように新規登録した顔をきっちりと認証することができました。
動画では私のデータだけでしたので精度に関してはわかりにくかったと思いますが、これは複数人であっても動くことは確認できました。
まとめ
いかがでしたでしょうか。
顔認証を利用することで勤怠管理や入退出など様々な用途で使用できます。
残念ながらFileMakerでの実装にあたり、WindowsやGoではWebRTCを使用することはできませんが、Web DirectやMacでは使用できますので実用性は充分あると思います。
もし顔認証に興味があればお問い合わせください。
また、株式会社ブリエでは、FileMakerを活用したシステム開発や運用支援を行っています。
業務システムのセキュリティについてのご相談もお気軽にお問い合わせください。

多岐にわたる業種での経験を経て、現在はFileMakerを中心に活躍中のエンジニアです。ローコード開発を得意としながらも、Django、React、Flutterなどの技術にも挑戦し、幅広い開発スキルを習得。常に自分の技術を磨き、より良いソリューションを提供できるよう、継続的にスキルアップを図っています。多彩な技術を駆使して、クライアントのニーズに応える柔軟性と、迅速かつ効果的な開発力が強みです。