顔の類似度を判定するWebアプリを作ってみました。
ずいぶん前にもWindowsアプリは作ったのですが、今回はWebでしかも内部はローカルで動作するものです。
アプリ自体はWebサイトですけど、画像は実際にはサーバには送られず、画像処理も含めて全てWebブラウザの中で自身のパソコンやスマホの上で処理されます。
以前の独自ロジックとは違ってTensorFlowとface-api.jsを使っているので、顔認証と同じくらいの精度の高さになっています。
自分どうしだとほぼ完全に100点になりますし、よく似ていると言われる俳優さんどうしだと90点くらいのスコアになるように調整してあります。
自分と俳優さんだと10点台という悲惨な結果になりますし、不思議と俳優さんどうしを選ぶと40から60点くらいになるので、2枚目センサー的な感じもします。
その応用で、指定した人の顔に寄せるというのを作ってみました。
まだちょっと変形が滑らかじゃないところがありますが、左が俳優Fさん50%寄り、右が俳優Nさん50%寄りです。
普通のモーフィングと違ってテクスチャはあくまで元画像のものを使い、輪郭を保持したまま、顔の内側の特徴点の相違を近づける形で変形していますから、さほど「整形」になってません。
せいぜい表情筋を動かしたくらいかな。
滑らかな変形もちょっと何か考えたいと思いますが、やはり顔の輪郭も含めて変形するのを試してみる必要がありそうです。
ちなみに人間は顔を見ると、その人の特徴点(目や鼻の位置など)だけでなく、テクスチャ(質感や色合い)も重視して「この人だ」と認識しているようです。
たとえば、二重まぶたやまつ毛の長さ、目の色、鼻の周辺の陰影、ほくろ、唇の色といった要素が、その人らしさを感じさせる大きな要因になっています。
そのため、上の写真のように顔の特徴点を変えても、目鼻立ちが変わったはずなのに「これはAさん」のまま認識してしまうわけです。
また、脳には顔を認識するための専門的な部位がいくつか存在します。
特に紡錘状回顔領域(fusiform face area; FFA)や後頭葉顔領域(OFA)、上側頭溝などが顔認識の中心的な役割を担っているんだとか。
これらの領域は顔情報の処理に特化していて、脳内で顔と物体を区別するネットワークが形成されています。
化粧が生まれた理由も、人間のこうした顔認識の特性と深く関係しているのでしょう。
化粧で顔のテクスチャや色合いを変えることにより、他者に与える印象や自分の印象を大きく変えることができます。
化粧をすることで自分の見た目を調整し、社会的なコミュニケーションを円滑に進めてきたというわけです。
さらに、すっぴんの状態と化粧をした状態でも同じ人と認識できるのは脳がテクスチャや特徴点の重み付けを柔軟に変えているからだと考えられます。
顔認識のネットワークは顔パッチと呼ばれる専門領域どうしが密接に連携し、顔の細かな違いや変化に対しても柔軟に対応しているわけです。
こういう人間の脳の挙動も知っておくと処理の実装に役立ちそうです。