ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
フォトセグメンテーションマットの紹介
iOS 12のポートレートモードで撮影された写真には、人物のセグメンテーションマットが埋め込まれており、背景の置換などのクリエイティブな視覚効果を簡単に作成することができます。iOS 13では、オンデバイスの機械学習を活用することにより、撮影されたあらゆる写真に新規のセグメンテーションマットを追加することができます。このセッションでは、人物の髪、肌、歯を分離できる、AVCaptureとCore Imageの両方で利用可能な新しいセマンティックセグメンテーションマットについて説明します。こうしたマットのいずれかを個別に使用するか、組み合わせることで、驚くほど多彩な写真編集機能をAppに搭載することができるようになります。
リソース
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
セマンティック セグメンテーションマットという 新しいマットの話を今日はします 後半ではCore Imageへの 活用法を紹介します
iOS 12の ポートレートエフェクトマットは ポートレートで エフェクトを適用するマットでした 美しいポートレートモード写真の 生成に使われています ポートレートのマットを見てみましょう 背景を除いた人物だけが 描写されています 黒色と白色に分かれたマットです 1の値が前景 0の値が背景を示します
iOS 13ではマットを さらに進化させました 髪のマットと―
肌のマット
そして歯です
髪のマットを見てみましょう 髪のある部分だけが― きれいに分かれています 髪の毛の細かい情報も描かれ 肌の部分とも ちゃんと分かれています
また 肌のマットには アルファ値が含まれ ピクセルの肌の割合を示します 0.7のアルファ値が示すのは 70%が肌ということです この新しい3つのマットを使えば すてきな写真やエフェクトを 作る自由度が増すでしょう
実は マットは元の画像の 半分のサイズなので 縦横は半分の長さで 解像度は4分の1になります また ポートレート エフェクトマットと 特に肌のマットは 部分的に一致しています
生成にはNeural Engineによる 機械学習を最大限に生かしています 内部処理ではオリジナルサイズの画像を Neural Engineに渡します 高品質画像を一貫性のあるマットで レンダリングします そして マットは被写界深度と共に HEIFやJPEGファイルに格納できます
マットの生成には2つの方法があります ポートレートモードの 写真から引き出す方法と 自分でキャプチャーアプリケーションを 作る方法です マットを格納したファイルがあれば Core ImageとImage I/Oが 使えます まずはAVFoundation APIを 使った方法です
4つの段階があります 1つ目はAVCapturePhotoOutputの設定 次はアプリケーションで 取得リクエストが開始された時 そして キャプチャ用に 設定が解決され 最後は写真の処理が終わった時です それぞれの詳細は2017年のセッションを 参考にしてください
まずはAVCapturePhotoOutputの 設定から見ていきます beginConfigurationを呼び プリセットを決め デバイスの入力と AVCapturePhotoOutputを追加しました ここで どのマットを生成するかを APIに伝えます
そして リクエストを開始する時は AVCapturePhotoSettingsを指定して APIに伝えます 有効にしたすべての設定や 髪や肌を指定できます リクエストを開始すると AVCapturePhotoSettingsに渡り 通知先に渡ります それから時間がたつと― コールバックに willBeginCaptureForが戻ります 実際に取得したものを この時 APIが知らせてくれます これはマットにとって重要です 人物がいない場合 マットはできません ですから サイズが0でないか 確認する必要があります
そして 処理が完了しました ここでセマンティック セグメンテーションマットが戻ります ポートレートエフェクトマットと 同じメソッドとプロパティです そのため Exif情報から 画像を回転させたり CVPixelBufferを参照できます
詳しい情報はサンプルアプリケーション AVCamを参照してください セマンティックセグメンテーション マットが追加されています
では 同僚と変わります (拍手)
ありがとう セグメンテーションマットについて Core Imageでの 活用方法を紹介していきます 今からデモを見せますが クラウンの写真が出てきます もしクラウン恐怖症の人や 苦手な人がいれば 目を閉じてくださいね ポートレートモードで撮った写真です このアプリケーションでは 写真にある それぞれのマットを 簡単に表示させられます 従来のポートレートエフェクトマットや こちらは肌のマットです さらに髪や歯のマットもあります またCore Imageで 合成することもできます 例えば 論理演算を用いて合成した 目と口だけのマットです 元の写真で 私はApple Parkにいます ポートレート エフェクトマットを使えば 背景を簡単に追加できます 背景をサーカスのテント内に 変えました ですが 私の写真が背景から 浮いています では エフェクトを加えてみましょう 例えば クラウンの化粧や もっと本格的に 髪を緑色にしてもいいですね 別のマットで 化粧も追加しました 今からアプリケーションへの 実装方法を紹介します (拍手) もうクラウンは登場しませんので 安心してください
では Core Imageを使って マット画像を生成する方法 フィルターの適用方法 保存方法を説明します まずはマット画像の生成方法です 2つの方法があり 1つ目はAVCapturePhoto APIの使用です それからCore Imageを使います semanticSegmentationMatte APIを使い 髪や肌 もしくは歯を指定します 結果 AVSemanticSegmentationMatteの オブジェクトが返り CIImageを簡単に生成できます インスタンスの生成もできます 2つ目はHEIFかJPEGファイルから 読み込む方法です ファイルはRGB画像を格納しています さらに補助画像である ポートレートエフェクトマットや 髪や歯のセグメンテーションマットを 含んでいます HEIFファイルからCIImageを 生成するにはCIImageと書いて URLを指定するだけですね 補助画像を生成するのも同じで オプションで どのマット画像を返すか 指定するだけです 髪なら auxiliarySemantic SegmentationHairMatteなど― 各マットをオプションで指定できます 数行のコードでシンプルです
次は 画像への エフェクトの適用方法です 先ほどのエフェクトを 詳しく紹介します まず ベースのRGB画像から始めます さらに クラウンの色あせた白い化粧の エフェクトを出すために 写真を調整します 写真全体ではなく 調整を肌だけに適用したいので 肌のマットを使います 3枚を合成すれば 期待した結果が出ます
コードはとてもシンプルです 実はその前に 報告があります 200以上あるフィルターが 使いやすくなりました それが新しいCIFilterBuiltinsです フィルターや入力の名前を覚えなくても フィルターが使えます (拍手) このヘッダーを使って コードを紹介します まずはベースとなる画像を生成します 従来のRGB画像ですね 次はエフェクトです まずはグレースケールにします フィルターはmaximumComponentです 画像をフィルターに渡し 出力するよう― コードを書きます 結果 グレースケールになりました まだ 白さが足りないので ガンマを調整する フィルターを追加します 入力は先ほど出力した画像です そして ガンマの値を指定して 出力を求めます ガンマの値はFloat型で 指定できるので NSNumberよりとても簡単です
最初のエフェクトの完成です 次の工程に移ります
肌のマットを取得します 先ほどと同様に 肌のマットを取得するよう指定します しかし マットの画像は オリジナルの半分のサイズです
そこで サイズを合わせます CGAffineTransformMakeScaleを使って マット画像を変形させます サイズが正しい画像が生成されました
次は2つの画像を合成します blendWithMaskフィルターを使います まずは このRGB画像を 背景として設定します 次に前景となる― 白い化粧のエフェクトを加えた画像を 指定します そして最後に マスクを指定します 先ほど お見せした画像ですね この3つをフィルターにかけると こうなります 他にもエフェクトを組み合わせて 面白いものが作れますよ
エフェクトの適用後は 補助画像の保存に対応している― HEIFかJPEGで保存します メイン画像に加え マットを格納すれば 他のアプリケーションでも 使えますからね
Core Imageの writeHEIFRepresentation APIで 保存したいメイン画像とURLを 指定します ピクセルフォーマットと カラースペースも指定します さらに 別のオプションを 追加することができます セグメンテーションマットを指定すれば 肌のマットや髪― 歯のマットを保存できます これらすべての画像が HEIFやJPEGで保存されます また 別の方法でも保存できます AVSemanticSegmentationMattesの オブジェクトです APIはシンプルで メイン画像から カラースペースまで指定します この場合 マット画像を保存するには AVSemanticSegmentationMattesで 指定するだけです
マットの活用方法を紹介しました マット画像の生成方法 フィルターの適用と保存方法です デモは写真Appのプラグインとして 書かれたものです HEIFだけでなくPhoto Libraryに 保存する方法を知りたい方は 過去のセッションを参考にしてください 特に2014年の“Introducing the Photos Frameworks”です
ありがとうございました 皆さん 頑張ってください 以上です (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。