- Stella v273.0.0.21 には、Metaスマートグラスのコンパニオンアプリ内で、顔検出・整列・埋め込み・ローカルDB・ベクトルインデックス・保存パス・通知サーフェスをつなぐデバイス内顔認識機構が含まれている
- 既存ハンドラをテスト写真で直接呼び出すと、顔検出、2048次元の生体埋め込み生成、ローカルインデックス検索、一致時の Android 通知
"Person recognized" 送信まで動作した
- SCRFD、KPSAligner、SFace の3つの ExecuTorch モデルが NMLML で配信され、SFace は顔を 2048 個の数値埋め込みへ変換する役割を担う構成になっている
- RLDrive の
person_profiles/objects.db は vec0 の float[2048] コサイン検索を使い、一致なしの経路では NameTagsPending/ に切り出した顔の .jpg と .emb 指紋を保存する
- デフォルトの未登録アカウントでは
"Connections" カードと対象プロフィール画面が表示されず、Meta の顔ネームスペース向けデータプッシュも観測されなかったため、配布の有無と時期が主要な未確認事項として残っている
範囲と限界
- 対象アプリは Meta スマートグラスのコンパニオンアプリ Stella の Android ビルド
com.facebook.stella v273.0.0.21
- アプリ内には顔モデル3種、ローカルDBスキーマ、モデル出力と一致するコサイン類似度ベクトルインデックス、生体記録をディスクに準備する書き込み経路、通知サーフェス、ユーザー向け
"Connections" ウィジェットがあわせて存在する
- テスト写真で既存ハンドラを直接呼び出すと、パイプラインは最後まで実行され、顔を検出して 2048 次元埋め込みを作成した後、ローカルインデックスを検索した
- デフォルトの未登録アカウントではユーザー向け UI は表示されず、通知ディープリンクが開く画面も v273 ビルドには存在せず、関連 DB に Meta が身元データをサーバープッシュする流れもテストアカウントでは観測されなかった
- 現時点で重要なのは、Meta が一般ユーザー向けに密かに人物を識別している証拠ではなく、そのような機能を実行できる完成済みの仕組みがデバイス上に組み込まれており、Meta がゲートで制御している状態だという区別である
モデルスタック
| 資産名 |
ファイル |
サイズ |
役割 |
android_facerec_scrfd |
SCRFD.pte |
3.4 MB |
画像内の顔を検出 |
android_facerec_kps_aligner |
KPSAligner.pte |
117 KB |
検出した顔を crop・整列 |
android_facerec_sface |
SFace.pte |
96 MB |
顔を 2048 個の数値埋め込みへ変換 |
- 3つのモデルは Meta の資産配信システム NMLML を通じて Meta からダウンロードされる ExecuTorch
.pte 資産
SCRFD は InsightFace の SCRFD、SFace は Zhong et al. 2021 の SFace、KPSAligner はキーポイントベースの整列系に連なるモデル群に当たる
- Meta の SFace 変種は 96 MB と 2048 次元出力で、公開リファレンスの約 40 MB と 128–512 次元より大きい形に見える
- 顔検出および埋め込みモデルを搭載している事実だけでは認識機能の証拠にはならず、デバイス内顔検出はフレーミングやオートフォーカスにも使える
ローカル顔インデックスと DB 構造
- 実行パイプラインは次の SQLite DB を読む構造
/data/user/0/com.facebook.stella/files/rldrive/person_profiles/objects.db
- この DB は Meta のクロスデバイス同期フレームワーク RLDrive 配下の
person_profiles ネームスペースにあり、リモートから投入されるよう設計されたチャネル
- テストアカウントでは Meta が
person_profiles にデータを直接プッシュする転送は観測されなかったため、観測されたのはチャネルの存在である
- 主要スキーマは人物情報、顔情報、2048 次元ベクトル検索テーブルを分けて持つ形
CREATE TABLE person (
nodeid INTEGER PRIMARY KEY,
name TEXT,
uri TEXT,
blob BLOB,
deleted INTEGER,
version BLOB
);
CREATE TABLE face (
nodeid INTEGER PRIMARY KEY,
mediaPath TEXT,
personUri TEXT,
blob BLOB,
deleted INTEGER,
uri TEXT,
version BLOB
);
CREATE VIRTUAL TABLE face_mediaPath_vec
USING vec0(mediaPath float[2048] distance_metric=cosine);
face 行は personUri で person を参照し、face.mediaPath は face_mediaPath_vec の主キー役を担う
- 認識は 2048 個の数値埋め込みをコサイン類似度で検索し、その後
person.name と結合して通知文言に使う流れ
vec0 は SQLite をベクトル類似度エンジンに変えるオープンソースの sqlite-vec 拡張で、float[2048] の次元はアプリに同梱された SFace 埋め込み器の出力形式と正確に一致する
- スキーマは 1 つの
personUri に複数の face 行を許容するが、実際の配備で 1:1 と 1:N のどちらを使うかは未登録デバイスでは見えない
実行分岐と保存ファイル
- パイプラインを2回実行したテストでは、空インデックスに対する一致なし分岐と、単一埋め込みを事前投入した一致分岐に分かれた
- 一致なし分岐は
NameTagsPending/ に (uuid.jpg, uuid.emb) の組を書き込み、通知は送らない
- 一致分岐は本番の
nametags_recognition チャネルで Android 通知を表示し、タイトルは "Person recognized"、本文は "Recognized Michel Foucault" で、NameTagsPending/ には何も追加しない
- 認識されなかった顔は次のパスに保存される
/data/user/0/com.facebook.stella/files/NameTagsPending/
- 各未認識の顔は新しい UUID 名の
.jpg と .emb の組を作り、.jpg は SCRFD と KPSAligner の出力である切り出し・整列済みの顔、.emb は 2048 個の数値からなる SFace 指紋
- ディレクトリモードは
0700 で再起動後も保持され、書き込みは一致なし分岐でのみ発生する
- 検証済みの
.emb ファイルは 8,192 バイトで、2048 × float32 の big-endian 構造、L2 norm 0.999999、min/max −0.092110 / +0.098950、mean +0.000292 の値を持つ
(uuid.jpg, uuid.emb) の組は、person_profiles/objects.db のコサインインデックスが照合するよう設計されたものと同一形式・同一エンコーディングの完全な生体記録である
通知とユーザー UI
- Stella は
nametags_recognition という Android 通知チャネルを定義しており、名前は "NameTags recognition"、説明は "Notifications for recognized NameTags connections"、重要度は heads-up・音・バッジを伴う IMPORTANCE_HIGH
- 通知テンプレートは認識ハンドラ内にハードコードされており、タイトルは常に
"Person recognized"、本文は常に "Recognized " + name の形で、name は person_profiles/objects.db の person テーブルから来る
- 通知はタップ可能で、
fb-viewapp://name_tags?face_id=<face_id> 形式の Meta 作成ディープリンクで Stella 内の人物プロフィール画面を開くよう構成されている
- v273 ではその対象画面は見つからず、navigation graph にもないため、通知をタップすると Stella のデフォルトタブへ移動する
- APK 内には
"Connections" セクション配下のカードがあり、文字列は "See your connections" と "Remember the people you met and make new connections." としてハードコードされている
- デフォルトの未登録アカウントではこのカードは Glasses タブに表示されず、テスト中にも表示状態にはならなかった
総合
- Stella v273 には、顔検出、整列、埋め込み、ベクトルインデックス、保存領域、書き込み経路、通知サーフェスまでつながる完全なデバイス内顔認識スタックが存在する
- 最後まで実行されたパイプラインは、既知の顔に名前を付けて通知で表示し、未知の顔については crop と指紋をディスクに準備する
- インデックス次元、埋め込み形式、保存スキーマが互いに一致しているため、ばらばらの死んだコードではなく、一貫したシステムとして構成されている
- ユーザーが触れる
"Connections" カードと通知先のプロフィール画面は、ビルドに存在しないか、さらに深く隠されている状態
- ライブパイプラインが使う DB は Meta がサーバー側で埋める他のネームスペースとともに同期ネームスペース内にあるが、テストアカウントでは顔ネームスペースのプッシュは観測されなかった
- 未確認なのは、Meta が現在ユーザーに見知らぬ人を識別して見せているのか、登録データが流れているのか、この機能が本番で有効化されているのかという点
- 2048 次元の顔指紋とハードコードされた
"Person recognized" 通知まで構築・配備・接続した仕組みは工学的投資であり、実際の本番適用の有無と時期は Meta が答えるべき問題として残る
1件のコメント
Hacker Newsの意見
こういう機能が完全オフラインで存在してほしい。相貌失認があるので、友人の写真をオフラインのデータベースに入れて認識できるようにできたら本当に役立つと思う
アクセシビリティのためにプライバシーの放棄を求めるべきではない
最近、相貌失認を説明するいちばんうまい比喩を聞いたが、それはリンゴだ。リンゴを2つ並べれば違いはわかるが、似たリンゴ50個の中から特定の1個を見分けられるかというのはまったく別の問題だ
道でリンゴに話しかけられて、どこで見たか思い出せるかという感じで、回避策はあるものの文脈依存で間違いも多い。赤い髪とひげのあるリンゴは隣のオフィスの同僚だとわかっても、それが昨日街で手を振っていたリンゴと同じかどうかはあいまいだ
髪型の変化は特に大きな問題だ。以前、昼食時に新しい同僚が誰なのか気になっていたら、話を聞いて声でわかったのだが、10年一緒に働いている人が髪色を変えただけだった
2012年に Google Glass が初めて出たとき、カンファレンス向けの技術系スタートアップを運営していて、発表者と参加者のプロフィール写真データベースがあったので、「混雑した部屋で会う約束をした相手をメガネが見つけてくれる」アプリは当然思いついた
だが、Google Glass の開発者規約ではそれが厳しく禁止されていて、少し考えればその理由もすぐわかった
こういうものの正反対を身につけたい。近くで誰かが Facebook のAIメガネをかけていたら通知を受けて避けられるようにする装置が必要だ
すでに家族には、子どもの写真を Meta のプラットフォームに共有しないようはっきり伝えてある。見知らぬ大衆にこういう機器が押しつけられれば、暴力的に反応する人が出てもおかしくない
一般的に受け入れられているCCTVやカメラ・スマートフォンの手動録画とはまったく違う
Metaは技術史におけるプライバシー侵害の代表例だと思う。今回のスマートグラスは、人々を家の中で、ときには裸の状態で、同意なく録画しており、一線を大きく越えている
1か月ほど前にもここで議論されていた話だ: Meta in row after workers who saw smart glasses users having sex lose jobs (https://news.ycombinator.com/item?id=47961838)
シカゴの弁護士たちを金持ちにする気満々のようだ。[0]
[0]: https://en.wikipedia.org/wiki/Biometric_Information_Privacy_Act
リンク先によれば、BIPAはイリノイ州で事業を行う企業に対し、生体情報の収集・保管に関する要件の順守を求めており、個人の生体識別子を収集または開示するには同意を得て、適時に破棄し、安全に保存しなければならない。生体情報の管理には「合理的な注意の基準」も必要とされる
スタートアップのアイデア: 普通のメガネフレームのブリッジとテンプルに近赤外線LEDを付けて、効率は良くて明るいが、およそ10Hzの不規則なクロックでPWMを回すこと
私を撮りたいなら尋ねるか、フィルムを使えばいい
自分の生活に役立つ実用的な使い道がひとつも思い浮かばない。メガネのすぐ後ろに ローカル顔認識 がすでに内蔵されているのだから
何人かの名前は覚えているし、結局のところ名前をよく覚える能力そのものには大きな意味はないと思うようになった。本当に好きな人たちの名前は覚えている。
逆に、誰かが自分の名前を忘れたことを本当に気にするのかも考えてみる価値がある。子どものころ、スカウトで1年間ずっと一緒にいた友だちがいたが、名前は覚えていなかったし、それでも特に問題はなかった
ほぼ10年間、大きなグループと付き合っていたのに誰が誰かをなかなか覚えられず、パンデミックのときにZoomで名前が表示されるようになって、数週間かけて少しずつ覚えた。
スキューバを教えるときは、ショップへ車で向かいながら受講生の名前リストをできるだけランダムな順で覚えて、顔と名前を結びつける認知負荷を減らしている。点呼を取るときは全員の名前を書き留め、質問を振りながら徐々にチートシートなしでやろうとする。
でも器材を装着すると、特にフードをかぶる地域では、すぐに崩れる。35歳くらいの白人男性が2人いると混乱してしまう。社会的に受け入れられるなら、処方メガネとして使って負担を減らしたい
Metaがアクセシビリティのためにこれをやっているとは思わない
もちろんかなり気まずい会話なので、半分紹介するような形にして、相手同士が完全に自己紹介してくれるのを期待し、そのときに思い出すという戦略もある
一般原則として、こういう方向性はどうだろうか。コンピュータは ネットワーク境界 に触れない限り自動でいくらでも作業してよいが、ネットワークにアクセスするには必ず人間の明示的な行動から始まらなければならない。
ブラウザでマウスキャプチャやフルスクリーン移行に信頼できるユーザー操作が必要なのと似ているが、もっと広く適用するイメージだ。ネットワーク通信の範囲も、ユーザーが誤解する余地がないよう明確でなければならない。
対象ユーザーに説明できないほど複雑なら、そのユーザーの代わりにやるべきではない。これは社内配布向けではなく、主に一般消費者向け製品に当てはまる。
こうした堅い境界を設けないと、パノプティコン に向かう気がする。政府による積極的な後押しがなくても、デジタル時代の単純な利潤動機だけでそういう結果になる。細かなルールのほうが理論上は良いかもしれないが、強い誘因があると人は複雑なルールをうまく守れない
職場でセキュリティポリシーを作れる立場にあり、その一つがオフィス内での スマートグラス禁止 だ。従業員に、機密情報が表示された画面へFacebookメガネを向けさせるわけにはいかない。
自分に顔認識の使用を許容できる場面もほとんど思い浮かばない。レストランなら、自分がどこで食事しているかをFacebookが知る理由はないし、音楽クラブなら、自分が何を聴いているかを知る必要もない。公衆トイレのような空間は絶対に駄目だ。公共の歩道でも、自分が誰と話しているかを追跡されたくない。
これが使われる状況を少しでも受け入れられそうにない。正直、こういう公共スパイウェアを身につけた人に対する公然の恥辱を超えて、外で着用しているのが見つかったら身体的に恐れるくらいの空気が早く生まれてほしい。
「職場でもスマホのカメラを禁止するのか」というお決まりの反論に答えるなら、そうだ。スマホのカメラを一日中画面に向けて業務を録画するのも当然禁止する。審査して契約したベンダー以外とは機密情報を共有しないし、誰かが録画しているのを見たら呼び出して、非常に危険な状態だと説明するだろう
BigTechや政府が自分のあらゆる相互作用を追跡するのは望まないが、近所の車のドラレコが自分がその家の私道を通ったことをローカルに記録する程度なら、第三者にアップロードしない限り問題ない。
もちろん、ほとんどの人はセルフホスティングを望まないし、ほとんどのサービスはエンドツーエンド暗号化でもないので、現時点で実務上重要だと装うのは難しい。それでも、規制や自分たちが望む世界を考えるなら意味のある区別だ
ここには修正第2条のような論理があり、かなり反論しづらい。少なくともこれは人を殺さない。すべての警察官が、自分で制御できない5〜6台の録画装置に常に囲まれていてほしい。それがまだましな選択肢だ。
もちろん、すべてがFacebookに流れる仕組みは嫌だし、その段階を通り過ぎてほしい
Meta、Flock、Palantirが手を組んだらどうなるだろう。Musk流の抱き合わせ株のような 悪のコンボ を作れそうだ