まだまだ情報は少ないようですが、今年の11月から調査を開始して2週間以内に機能を自作ライブラリーに組み込みました。
参考資料
https://developer.apple.com/videos/play/wwdc2019/225/
OSS内に組み込んだ機能
実際のカメラでは高画質です。 pic.twitter.com/t8vnCBI6y5
— DaisukeNagata (@dbank0208) November 5, 2019
これは調査の段階で確認した機能
人間版のアバターも作れます。
— DaisukeNagata (@dbank0208) November 14, 2019
ファイル化すると背景だけ、とばして、画像をviewかすれば人物像のみ拡大縮小も可能です。
今は動画系の新技術をインプットしてます。 pic.twitter.com/1g1QdSC3I7
どのように実現しているのか?
自作ライブラリー
機能を単体で作成したサンプル
機能クラス
https://github.com/daisukenagata/MaskMatte/blob/master/MaskMatte/MaskFilterBuiltinsMatte.swift
ポイントのメソッド
//MARK: AVCapturePhotoCaptureDelegate extension MaskFilterBuiltinsMatte: AVCapturePhotoCaptureDelegate{ func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { var uiImage: UIImage? if let imageData = photo.fileDataRepresentation() { uiImage = UIImage(data: imageData) for semanticSegmentationTypes in output.enabledSemanticSegmentationMatteTypes { if semanticSegmentationTypes == .hair { semanticSegmentationType = semanticSegmentationTypes maskFilterBuiltins(callBack(image:), photo: photo, ssmType: semanticSegmentationType!, image: uiImage ?? UIImage()) } } } } func callBack(image: UIImage?) { call(image) } }
上記のメソッドを呼び出しているコード
photoOutput?.capturePhoto(with: settings, delegate: self)
settingsはAVCapturePhotoSettingsという、カメラの詳細を決めるプロパティです。
メソッド内で様々に設定しています。https://developer.apple.com/documentation/avfoundation/avcapturephotosettings AVCapturePhotoSettingsリファレンス内に、実装しているコードの詳細説明が記載されています。
髪を合成しているメソッド
private func maskFilterBuiltinsChanges~~~ private func matteSetting~~~
CoreImageの複合トリックでMake
CIFilter.gammaAdjustとCIFilter.colorMatrixでググってみて下さい。
gammaとは非線形濃度変換。コントラストの調整です。
colorMatrixはRGBの部分の値を調整します。
value2,3,4でスライダーから取得した値を設定して髪の加工を可変しています。
2つのCoreImage機能を合わせることで、画像のような本物のような髪の色を実現しました。

メモリー使用量のコントロール
260MBから60MBほどにコントロール出来ます。 なのでインターナルに宣言する場合はoptinalにするとnilに出来、コントロール出来ます。
func cameraReset()
以上、貴重なお時間お読み下さいまして、誠にありがとうございます。
コメントを残す