内部の技術スタックについて
このシステムは、顔特徴ベクトルを用いた短期的な類似度チェックを実現するために、軽量でシンプルな技術スタックで構築されています。
バックエンド
- 言語: PHP
- 画像のアップロード処理
- 特徴ベクトルの生成と保存
- SQLite とのやり取り
- データベース: SQLite
- 特徴ベクトル(JSON形式)を保存
- 保存期間は TTL(Time To Live)で制御(デモでは 5分)
- WAL モード・外部キー制約を有効化し、軽量かつ安定した処理を実現
顔埋め込み(Embedding)
- Encoder / Embedder クラスで画像から特徴ベクトル(数値配列)を生成
- LBP(Local Binary Patterns)やヒストグラムベース処理を用いた軽量な特徴抽出
- ベクトルは L2 正規化され、比較時には高速な コサイン類似度 や カイ二乗距離 で照合
照合アルゴリズム
- Matcher クラス
- コサイン類似度による高速な類似判定
- 上位 K 件を返す機能や閾値による判定を実装可能
- Store クラス
- 特徴ベクトルの追加・削除・照合を担当
- TTL に基づき古いベクトルを無効化
- 店舗ごと(store_id)に独立した管理が可能
フロントエンド
- HTML5 / JavaScript
- カメラ起動と静止画キャプチャ (
getUserMedia
) - 撮影画像を API に送信し、結果を受け取って画面表示
- UI 状態(撮影中/照合中/OK/警告)をバッジで分かりやすく提示
- カメラ起動と静止画キャプチャ (
- localStorage
- API エンドポイントの保存
- 日替わりのセッションID管理
特徴
- 軽量: サーバ・クライアントともに追加ライブラリを最小限に抑えたシンプル設計
- 匿名性: 顔画像を保存せず、特徴ベクトルのみを短期間利用
- 拡張性: 閾値や TTL の調整、商用利用に合わせたアルゴリズム強化が容易
この技術スタックにより、顔認証のような重い仕組みを使わずに「短時間の重複検出」に特化した軽量ソリューションを実現しています。