大多数浏览器和
Developer App 均支持流媒体播放。
-
照片分割蒙版简介
iOS 12 上使用人像模式拍摄的照片包含一个嵌入式人像分割蒙版,这样可以轻松地打造背景替换等富有创意的视觉效果。iOS 13 利用设备端机器学习来为拍摄的所有照片提供新的分割蒙版。了解您可从 AVCapture 和 Core Image 获得的新语义分割蒙版,以便分离人物的头发、皮肤和牙齿。您的 app 现能通过单独使用其中任一蒙版或结合使用所有蒙版,提供大量的照片编辑控制功能。
资源
相关视频
WWDC19
-
下载
(语义分割蒙版) 大家好 我是Jacob 今天我向大家介绍的是语义分割蒙版 首先 我会谈谈这些新的蒙版是什么 之后 David会和你们介绍 如何运用Core Image 来处理这些新的蒙版
在iOS 12中 我们向大家介绍了人像效果蒙版 这是一款专门为 肖像的效果处理而设计的蒙版 我们在内部用该蒙版来对人像模式 和人像光效下的照片进行渲染 让照片更美 让我们细看人像效果蒙版 你可以看到该蒙版将 前景图像清晰地从背景中 勾勒出来 所以 这是一副美丽的黑白蒙版 前景取值为1 背景为0
在iOS 13中 我们进一步提升了语义分割蒙版
你可以看到头发
皮肤
还有牙齿
所以 我们以头发蒙版为例来细看 你可以看到 它能够清晰地将头发区域 与非头发区域区分开来 所以 我们在背景上可以看到 更为细致的头发 同时 头发与非头发区域 也得到了更好区分
同样的 对于皮肤区域 alpha值表示皮肤像素的大小 比如alpha值为0.7 就表示皮肤像素为70% 所以 我们希望这三种蒙版 可以让你自由创作 渲染出更酷的效果和更美的图片
要注意的一些事情是 该蒙版是原图大小的一半 也就是说它的每个维度 都是原图的一半 那么整个蒙版就是原图的四分之一 你还要记住另一件事情 这些分割蒙版会重叠 因此 对于本身就会 重叠的人像效果蒙版 和皮肤蒙版来说更是如此
所以这些蒙版并不能自由移动 我们利用Apple神经网络引擎 进行谱图机器学习 让我们更深入来看 我们获取原图 将其放入Apple神经网络引擎中 通过引擎和原图 我们用高度相容的蒙版 渲染出这些高分辨率 高质量的图片 之后可以将他们嵌至 HEIF或JPG文件中 如你所知 与原图和iOS 11的原深感一起
因此 生成这两种蒙版 有两种不同的方式 首先 因为它们已经嵌入 所有人像模式捕捉中 所以你可以直接从文件中抓取出来 或者更好的是你自己写一个 图像捕捉app 再将这些蒙版加入到捕捉中 如果你有自带分割蒙版的文件 你可通过Core Image和 Image I/O对其进行编辑 David之后会进一步说到这个 我先谈谈如何用 AV Foundation API进行图像捕捉
我们要进行有关扩展的 四个阶段 第一阶段是建立 AVCapturePhotoOutput 第二阶段是在app生命周期内 捕捉请求被唤起时 之后是两个回调 一个是捕捉设置已解决时 最后一个 是照片处理完成时 关于该过程的详细介绍 可观看Brad在 2017年的专项演讲
我们先来介绍如何建立 AVCapturePhotoOutput 这经常会在你配置会话的时候使用 这时你已经在会话点开始配置了 你已经设定好了预设 添加了设备输入 添加AVCapturePhotoOutput 此时就进入到在app 生命周期的任何时刻 告诉API你想要分割蒙版的 哪个超集的阶段
当你想唤起捕捉请求时 你需要指定 AVCapturePhoto设定 所以这时你就告诉API 这就是我在该特定捕捉中想要的 再次强调 你可以指定 你已经启动的东西 或者可以指定子集 比如头发或是皮肤 现在 你已经唤起了捕捉请求 所以你给它 AVCapturePhoto设定 也给它你在哪里想召起回调的委托
时间飞逝 不久之后你就会得到 willBeginCaptureFor回调
这就是API告诉你 你向它发起了请求 但这才是你会得到的 所以 这对人像效果蒙版和 语义分割蒙版来说 是十分重要的 因为在场景中没有人像的话 你就得不到蒙版 所以你要检查语义分割蒙版的大小 在上述情况中的大小就为0
更多时间过去了 照片处理完成 这时AV语义分割蒙版又会重新回来 在这种情况中 这就是变量蒙版 所以 这一新类别 具有与人像效果蒙版 同类的方法和属性 也就是说你可以根据 Exif数据来旋转 每一个I/O文件都可以得到 CVPixelBuffer引用 或是字典表达
如果你想了解关于如何进行捕捉的 生命周期的全部介绍 请参考AVCam样本app 其中语义分割蒙版已经更新 该app将会带你完成所有的步骤
接下来有请David 他将会介绍 Core Image的有关内容
好 谢谢大家 我们刚刚学习了如何用 语义分割蒙版捕捉图像 现在我们来做一些好玩的事 学习如何利用Core Image 来加一些有趣的效果 我接下来要做一个演示 但是我要警告你 图片中会有小丑 所以如果你有小丑恐惧症 或者就是害怕小丑
那么请挡住你的眼睛 好 这是一张在我们的 设备上用人像模式 捕捉到的照片 我们在这个app里 能够非常容易地看到 在这个文件中所有不同的 语义分割蒙版 我们可以使用一般的人像效果蒙版 或者是皮肤蒙版
或是头发蒙版 又或者是牙齿蒙版 你也可以使用Core Image 将这些蒙版与其他蒙版结合起来 比如我用逻辑运算 将这两个蒙版结合起来 创造出了一个眼睛和嘴巴的蒙版 如果我回到原图 这是一张 我在Apple Park的照片 一件很厉害的事情是
通过人像效果蒙版 你可以给照片轻易加上背景 如你所见 我们可以把我放到马戏团帐篷里 虽然背景看起来很像马戏团 但是我显得格格不入 所以我们就可以使用一些效果 比如说 我们可以给我化一个小丑妆 或者如果我们还想要进一步的效果 可以给我加上绿色的头发 最后 我们可以用其他蒙版 给我化个妆
所以 这就是我今天想要说的 如何在你的app中 实现这些有趣的效果
好了 有关小丑的东西基本上都已经结束了 你现在可以看屏幕了
今天我们要说三件事情 一是如何用Core Image 创建蒙版图像 如何为这些图像加上滤镜 最后 如何保存这些文件 首先 我们先来谈谈 如何用Core Image 创建蒙版图像 有两种方法 一是可以用AVCapturePhoto API来创建蒙版图像 之后你就能够创建 Core Image 所以 代码非常简单 我们想要做的就是 运用语义分割蒙版API 来制定我们要的是头发 皮肤还是牙齿 之后会返回到 AVSemanticSegmentationMatte对象 由此我们就可以创建CIImage 或者通过该对象 我们可以加强CIImage 另一种常见的方法是 你想创建蒙版图像 可以通过从HEIF或 JPG文件来加载 这些文件中有你熟悉的主要图像 也就是RGB图像 但他们也包含辅助图像 比如说人像效果蒙版 还有一些我们介绍过的新的蒙版 皮肤分割蒙版 或是头发牙齿蒙版 代码非常简单 从HEIF文件 创建CIImage的代码 就是直接说CIImage 然后指定一个URL 关于创建辅助图像 你要做的就是做相同的调用 再提供一个选项字典 指定你想返回的蒙版图像 所以 你可以指定 auxiliarySegmentationHairMatte 或者你想的话 我们也可以将蒙版 用于其他的语义分割
所以 非常简单 就几行代码
接下来就讲讲如何 在这些图像中加上效果 刚刚我展示了很多效果 我就挑一个来重点讲 我们要做的是 从基础的RGB图像开始 然后在上面加上效果 比如说我们要做褪色白脸小丑妆 所以我们先进行一些校正 但这些校正会用于整张图片 而我们只想将它限制于皮肤区域 所以我们使用皮肤蒙版 之后我们将这三张图片结合起来 就达到了我们先要的效果
让我们来看看它的代码 其实非常简单 但首先我想 说说Core Image的 顶级功能请求 这能让人们更加容易地 发现和使用 我们的200多个内置滤镜 这是一个新的标题 叫Core Image CIFilterBuiltins 它能够让你使用所有的内置滤镜 而不用记住这些滤镜的名字 或是输入的名字
真的很棒 我来给你们展示 用到这个新标题的一些代码 所以我们要做的第一件事 是创建基础图像 我们就用contentsOf:url 来调用图像 这样就能生成RGB图像了
现在 我们来加上一些效果 首先我要将它转换为灰度图像 之后我要使用一个叫 maximumComponent的滤镜 将基础图像输入滤镜中 之后再让滤镜进行输出 这样就能生成一张像这样的灰度图像 但这看起来还不够亮 不像小丑妆 所以我们还要再加一个滤镜 我们就用gamma校正滤镜 该输入就是前一个滤镜的输出 之后我们指定gamma函数的幂 再要求输出图像 你会发现现在 指定gamma滤镜的幂很简单 它直接是一个Float 这样你就不用记NSNumber了
这是加效果的第一部分 接下来我们要做的 就是
得到皮肤分割滤镜 再次强调 正如我前面所说 我们从URL开始 指定我们要皮肤滤镜 但是 当我们得到图片的时候 我们发现它比其他图片要小 就像我们前面提到的 它默认是一半大小
所以我们要放大来与原图匹配 所以我们创建一个 CGAffineTransform 将蒙版放大至基础图像大小 之后我们将变换用于图像 这样就可以生成一个新的图像 而新图像能够匹配正确的大小
下一步就是将二者结合起来
我们用的是 blendWithMask滤镜 这很棒 在我刚刚展示的例子中 也一直在用这个滤镜 我们将背景图像指定为 基础RGB图像 看起来就像这样 接下来 我们指定输入图像 也就是前景图像 也就是白脸妆容效果的图像 最后 我们指定遮罩图像 也就是我刚才展示的图像 根据这三个输入 你就可以要求 混合效果的滤镜进行输出 结果就像这样 如你所见 这只是开始 你可以将所有有趣的效果结合起来 在你的app中生成更好的图像
当你加上了这些效果之后就要保存 基本上 你都会把它们保存为 HEIF或者JPG格式 这些格式能够支持保存辅助图像 所以 除了主要图像外 你还可以保存语义分割蒙版 这样你的app或其他app 也可以运用这些额外效果
代码非常简单 运用Core Image的 writeHEIFRepresentation 一般你先指定主要图像 也就是你要将其保存到的URL 之后是你想保存的像素格式 然后是你想保存的色彩空间 今天我想强调的是另一种 你可以用来保存图片的方法 比如说 你可以指定 主要语义分割皮肤蒙版 再指定皮肤图像 或是头发图像 牙齿图像 而所有的这四个图像都会保存到 生成的HEIF或JPG文件中
现在还有另一种达到同样效果的方法 如果你想的话 你可以保存主要图像 再将分割蒙版指定为 AVSemanticSegmentationMatte对象 API也非常简单 指定URL 主要图像 像素格式和色彩空间 在这种情况下 如果你想指定这些对象 并保存在文件中 你只需要输 AVSemanticSegmentationMattes 再提供一系列蒙版就可以了
这就是使用Core Image 和这些蒙版可以做的事 今天我谈到了如何为蒙版创建图像 如何添加滤镜 以及如何保存 我也会提到刚刚 我向你们展示的示例app 被写为Photos app插件 如果你想了解关于如何 在你的app里做到这一点 这样你就可以保存图片 不仅保存为HEIF 还可以存进用户的图片库里 我建议你参考之前的演讲 特别是2014年WWDC的 照片框架简介
好 谢谢大家 期待看到你们运用这些 好用的功能创造出的精彩 谢谢
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。