友達に似てる有名人を探し出せ!顔の類似度判定器の開発とその技術 by Akihiro Kokubo

iOSDC Japan 2024
レギュラートーク(20分)

友達に似てる有名人を探し出せ!顔の類似度判定器の開発とその技術

akihiro_kokubo Akihiro Kokubo akihiro_kokubo
1

ある日、友達からユニークな相談が舞い降りた。
「自分に一番似ている有名人を見つけてほしい」
どうやら、ファッションやヘアスタイルの参考にするようだ。
100人の有名人の中から、友達に最も似ている人を探し出すミッションはこうして始まった!


友達に似ている有名人を特定し期待に応えるために、顔の類似度を判定するツールをSwiftで作ったので、技術的な裏側を解説します。
iOSのオンデバイスAPIを用いてランドマークを取得し、2つの顔のランドマーク同士の類似度を行列計算により算出しています。

普段なら便利なライブラリを探し続けネットをさまよう自分が、自らアルゴリズムを実装する道を選び、試行錯誤した経験を共有します。
特に難しかったポイント、それをどう解決したのか、そしてこのプロジェクトを通した学びをお伝えします。

今回の作戦

  • Visionフレームワークで、顔写真から顔のランドマークを取得する
  • 点群同士の類似度を算出するための作戦を定める
    • 2つの点群の重心を原点に移動する
    • 2つの点群のスケールを正規化する
    • 二乗誤差が最小になるように回転する
  • Accelerateフレームワークで、行列の演算や特異値分解を行う