[iOSDC Japan 2019 リポート]「ソーシャルライブサービスにおけるデジタル化粧の仕組みと実装」を聞いてきた

こんにちは。きんくまです。iOSDC Japan 2019に参加しています。

これまでのレポート

day1

- [iOSDC Japan 2019 リポート]「実機の管理とおさらば!AWS Device FarmでiOSのテストをしよう!」を聞いてきた
- [iOSDC Japan 2019 リポート]「iOSアプリのリジェクトリスクを早期に発見するための取り組み」を聞いてきた
- [iOSDC Japan 2019 リポート] 「めくるめくシェーダアートの世界」を聞いてワクワクした!

day2

- [iOSDC Japan 2019 リポート]「iOSアプリに「意識」は宿るのか?ディープラーニングの先にある人工知能(AI)」を聞いてきた

ソーシャルライブサービスにおけるデジタル化粧の仕組みと実装

発表:DeNA noppeさん @noppefoxwolf

デジタル化粧は、映像を加工することで実際にメイクをしているように見せる技術です。
昨今では物理的なメイクを再現するだけでなく骨格や目の大きさを調整したりすることも出来るようになり、セルフィーを投稿する敷居を下げている技術の一つでもあります。
そんな「顔のAR」とも呼べるデジタル化粧はソーシャルライブでは無くてはならない存在となりました。

このセッションではソーシャルライブサービスの実例を通して、デジタル化粧機能の需要の傾向や仕組みを学びます。
また、高価なデジタル化粧SDKを利用せずにMLやMetalを使って実装するにはどうすれば良いかを紹介します。

スライド

デジタル化粧

  • 映像を加工する事でリアルタイムに補正をかける技術
  • 主にセルフィーアプリや、ライブアプリで採用されることが多い
  • PocochaではSenseMEを利用

編注)DeNAとSenseTimeが業務提携

  • デジタル化粧の利点
  • デジタル化粧の機能種別
    • コスプレ
    • メイク
    • 整形
  • デジタル化粧に必要な基礎技術
    • 顔の位置推定
    • シェーディング
    • センス

顔検出技術の選定

  • CIDetector
    • IOS 5.0+
    • 10fps
  • Vision.framework
    • iOS 11.0+
    • 10fps(iPhone X)
  • MLKit
    • Firebase
    • 15fps(iPhone X)
  • ARKit
    • iOS11+ (True depth camera)
    • 60fps
    • 輪郭や位置は取れない
  • AR2DFaceDetectorを制作
    • ARKitで取得したジオメトリのスクリーン座標を提供
    • ジオメトリの頂点から擬似landmarkを提供
    • 60fps

シェーディング

  • CoreImage <- これを使用
  • MetalKit
  • GLKit
  • GPUImage
  • MetalPetal

1. コスプレ

衣装をオーバーレイする機能

  1. ARKitのカメラ映像を受け取る
  2. landmarkに合わせて衣装画像をtransform
  3. 2つを合成

2. メイク

  • 肌質を滑らかにするフィルタを書いてみましょう
  • Photoshopのチュートリアルを探すのがオススメ

  • 処理の過程

    • ハイパスフィルタを階調反転したものをオーバーレイでマスク合成する
  • SkinSmoothingFilterを制作

3. 整形

  • 目を大きくしたり、頰を細くしたり
  • 今回は頰を細くするフィルタを作る

画像を歪ませる方法

  • SKWarpGeometry <- SpriteKit

  • WarpGeometryFilterを制作

    • WarpGeometryをCIFilterとして提供

GitHubリポジトリ

noppefoxwolf/iOSDC19-Example

  • 今日のデモで使ったもの
  • 各フィルタと顔検出のサンプル

まとめ

  • 特殊な知識が無くても、デジタル化粧は作れるようになってきた
  • 3つのOSSを公開しました

プロダクトへの応用ヒント

  • リアルタイムに処理する必要があるか否か
  • アルバムから選んだメディアを処理する必要があるか
  • 録画する必要があるか

感想

動画配信などで使うデジタル化粧についての発表でした。

途中でデモを見せてくれたのですが、全てリアルタイムで行われていてとても面白かったです。カメラ画像を入力に画像加工するのは面白い!

昨日の発表でもあったのですが、リアルタイム画像処理はCoreImageを使ってGPU処理するのが基本のようでした。またiOS11以降はCoreImageの処理をMetalシェーダで書けるとのこと。

参考) Core ImageのカスタムフィルタをMetalで書く

なので、高速な画像処理が必要な場合はCoreImage+Metal。このあたりをやってみたいです。