Meta가 스마트 안경에 얼굴 인식을 탑재해 제공함

1 hour ago 1
  • Stella v273.0.0.21은 Meta 스마트 안경 컴패니언 앱 안에 얼굴 검출·정렬·임베딩·로컬 DB·벡터 인덱스·저장 경로·알림 표면을 잇는 기기 내 얼굴 인식 장치를 품고 있음
  • 기존 핸들러를 테스트 사진으로 직접 호출하자 얼굴 검출, 2048차원 생체 임베딩 생성, 로컬 인덱스 검색, 일치 시 Android 알림 "Person recognized" 발송까지 동작함
  • SCRFD, KPSAligner, SFace 등 세 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개 숫자 임베딩으로 변환
  • 세 모델은 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 임베더의 출력 형태와 정확히 맞음
  • 스키마는 한 personUri에 여러 face 행을 허용하지만, 실제 배포에서 1:1 또는 1:N 중 어떤 형태를 쓰는지는 미등록 기기에서 보이지 않음

실행 분기와 저장 파일

  • 전체 파이프라인을 두 번 실행한 테스트에서 빈 인덱스에 대한 일치 없음 분기와 단일 임베딩을 미리 넣은 일치 분기가 갈라짐
  • 일치 없음 분기는 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가 답해야 할 문제로 남음
Read Entire Article