post Image
Firebase MLKitのFace Detectionでイケメン度を検出する

あなたはイケメンの定義を知っているだろうか?

イケメンの定義って? 顔の特徴と、顔だけじゃないカッコいい男の条件とは| マイナビウーマン等でも語られている通り、爽やかな笑顔が条件であることは言うまでもない。

今回、FirebaseのMLKitの顔認識を使ってみるついでにイケメン度を検出できるかどうかを検証してみた。

ということで、イケメン風の男性に出演を依頼し、彼を用いてFirebase MLKitのFaceDetectionで出来ることを確認していく。

イケメンの顔を検出

IMG_2208.jpg

まずは顔自体を検出しないと始まらない。緑の範囲が顔の枠。

VisionFaceにあるframeプロパティから枠が取得できる。

次はイケメンの顔のパーツを検出していこう。

イケメンの顔ランドマーク検出

IMG_2211.jpg

VisionFacelandmark(ofType: FaceLandmarkType)メソッドで点が取得できる。

FaceLandmarkTypeには、

  • mouthBottom(口の下部)
  • mouthLeft(口の左部)
  • mouthRight(口の右部)
  • noseBase(鼻)
  • leftEye(左目)
  • rightEye(右目)
  • leftEar(左耳)
  • rightEar(右耳)
  • leftCheek(左頬)
  • rightCheek(右頬)

が用意されている。イケメンは顔のバランスがシンメトリーであると言われているため、リアルな話この情報からイケメン度は検出することが可能だ。

ちなみにパーツはrectangleとして取得できるわけではないので、これだけでは例えば目を切り取ったりはできない。

笑顔度と目の開き度の検出

VisionFaceには、smilingProbability, leftEyeOpenProbability,rightEyeOpenProbabilityというpropertyがあって、目の開き度合いと笑い度合いが取得できる。

左目だけ
開けてる
イケメン
右目だけ
開けてる
イケメン
目を見開く
イケメン
両目閉じて
ちょい笑う
イケメン
笑う
イケメン
イケメン
smilingProbability 0.086 0.065 0.169 0.794 0.992
leftEyeOpenProbability 0.99 0.574 0.995 0.023 0.996
rightEyeOpenProbability 0.008 0.107 0.999 0.021 0.993

目の開き度はとてもいい感じだが、笑顔度合いは口の角度で決定されるようなので、目は笑ってなくても笑ってることになる。 これではイケメンかどうか判別するのが少し難しいかもしれない。

顔の角度が取れる

IMG_8409E0698DD9-1.jpeg

headEulerAngleYとheadEulerAngleZが取得できて、顔の向きを取得することができる。自撮りが当たり前となっている昨今では、斜め左上から撮影するとイケメンに見えると言われている。リアルな話、この斜め左上を数値化することができるため、よりイケメンに取れる角度をフィードバックすることが可能だ。

結論

  • イケメンとしての笑顔度
  • イケメンとしての目の開き度
  • イケメンに見える角度
  • イケメンとしてシンメトリーか否か

といった情報をなんとOn Deviceで取得できるMLKitのFace Detection.

イケメンを検出するのが可能だということがわかった。

iOS11から用意されているVisionフレームワークの方は顔ランドマークからrectangleまで描画できるが、MLKitのFace Detectionのメリットとしては、笑い度や目の開き度、角度が取れること、そしてiOS, Androidの両方のOSで使えること、また、そもそもはTensorFlowだと思うので、拡張性があるという点にあると思う。

参考文献


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。