-
Notifications
You must be signed in to change notification settings - Fork 271
filter
Franken Zeng edited this page Nov 15, 2017
·
48 revisions
美颜是指对主播图片进行美白、磨皮、红润等效果,目前SDK内置了如下6种美颜:
Filter | 名称 | 美白 效果 |
磨皮 效果 |
红润 效果 |
是否依赖 KSYGPUResource. bundle |
---|---|---|---|---|---|
KSYGPUBeautifyExtFilter | 嫩肤 | 中 | 中 | 强 | 否 |
KSYGPUBeautifyFilter | 白肤 | 强 | 中 | 低 | 否 |
KSYGPUDnoiseFilter | 自然 | 中 | 低 | 低 | 否 |
KSYGPUBeautifyPlusFilter | 柔肤 | 中 | 中 | 中 | 否 |
KSYBeautifyFaceFilter | 白皙 | 中 | 强 | 低 | 是 |
KSYBeautifyProFilter | 粉嫩 | 中 | 强 | 中 | 是 |
KSYBeautifyProFilter中传入参数(1、2、3、4)区别仅仅在于磨皮,其中1比较柔和,但在较亮的场景下,画面会比较朦胧。3(natural)相对更加清晰,4最清晰。2和4相对1和3,计算更复杂。总体清晰度1<3<2<=4,处理速度(1=3)>(2=4)。
效果描述是只针对默认效果,后两个滤镜的三种效果参数可独立调节,其余滤镜只能设置等级,详见接口
- v1.8.1 新增 美颜滤镜KSYBeautifyFaceFilter, 如果启用红润参数需要依赖KSYGPUResource.bundle中的资源
- v1.8.1 新增 特效滤镜KSYBuildInSpecialEffects, 其中包括6种内置特效和自定义特效接口, 需要依赖 KSYGPUResource.bundle中的资源
- v1.9.3 新增 美颜滤镜KSYBeautifyProFilter, 本次主要针对之前美颜存在肤色不自然、偏色等问题,以及针对我们的使用场景,对美颜进行了优化, 需要依赖 KSYGPUResource.bundle中的资源
特效滤镜,或者叫风格滤镜 是指对整个图像的进行处理,改变图像整体的颜色风格.
特效滤镜都需要用到资源文件, 如果直接使用KSYGPUResource.bundle,或者将资源图片都导入到MainBundle中去, 则可以直接通过 KSYBuildInSpecialEffects的effectType属性来进行切换.
//初始化并指定effectIdx来创建对应效果
KSYBuildInSpecialEffects * sf = [[KSYBuildInSpecialEffects alloc] initWithType:KSYGPUEffectType_Freshy];
//指定effectIdx来切换到对应效果
[sf setSpecialEffectsIdx: effectIdx];
// 通过effectType来切换效果
sf.effectType = KSYGPUEffectType_Sweety;
idx | KSYGPUEffectType | 名称及效果 | 资源文件名称 | 引入版本 |
---|---|---|---|---|
1 | Freshy | 小清新 | 1_xiaoqingxin.png | v1.8.1 |
2 | Beauty | 靓丽 | 2_liangli.png | v1.8.1 |
3 | Sweety | 甜美可人 | 3_tianmeikeren.png | v1.8.1 |
4 | Sepia | 怀旧 | 4_huaijiu.png | v1.8.1 |
5 | Blue | 蓝调 | 5_landiao.png | v1.8.1 |
6 | Nostalgia | 老照片 | 6_laozhaop.png | v1.8.1 |
7 | Sakura | 樱花 | 7_yinghua.png | v2.1.1 |
8 | Sakura_night | 樱花 (光线较暗) |
8_yinghua_night.png | v2.1.1 |
9 | Ruddy_night | 红润 (光线较暗) |
9_hongrun_night.png | v2.1.1 |
10 | Sunshine_night | 阳光 (光线较暗) |
10_yangguang_night.png | v2.1.1 |
11 | Ruddy | 红润 | 11_hongrun.png | v2.1.1 |
12 | Sushine | 阳光 | 12_yangguang.png | v2.1.1 |
13 | Nature | 自然 | 13_ziran.png | v2.1.1 |
14 | Amatorka | 恋人 | 14_amatorka.png | v2.9.1 |
15 | Elegance | 高雅 | 15_elegance.png | v2.9.1 |
16 | 1977 | 红粉佳人 | 16_map_1977.png | v2.9.1 |
17 | Amaro | 优格 | 17_*.png | v2.9.1 |
18 | Brannan | 流年 | 18_*.png | v2.9.1 |
19 | Early_bird | 柔光 | *19_*.png | v2.9.1 |
20 | Hefe | 经典 | 20_*.png | v2.9.1 |
21 | Hudson | 初夏 | *21_*.png | v2.9.1 |
22 | Ink | 黑白 | 22_*.png | v2.9.1 |
23 | Lomo | 纽约 | *23_*.png | v2.9.1 |
24 | Lord_kelvin | 上野 | 24_*.png | v2.9.1 |
25 | Nashville | 碧波 | 25_*.png | v2.9.1 |
26 | Rise | 日系 | *26_*.png | v2.9.1 |
27 | Sierra | 清凉 | *27_*.png | v2.9.1 |
28 | Sutro | 移轴 | 28_*.png | v2.9.1 |
29 | Toaster | 梦幻 | 29_*.png | v2.9.1 |
30 | Valencia | 恬淡 | 30_*.png | v2.9.1 |
31 | Walden | 候鸟 | *31_*.png | v2.9.1 |
32 | Xproll | 淡雅 | *32_*.png | v2.9.1 |
表格中, * 表示通配符, 说明对应的效果需要多个资源文件,但是对应的资源文件都是用改效果的effectIdx作为前缀的 有的效果,相互之间会公用一些资源文件, 所以有的资源文件的前缀有多个effectIdx,用下划线分隔开了,比如19_23_31_32_vignette_map.png在effectIdx的19,23,31和32等4个效果中都有用到
- 资源文件的下载地址在这里 https://ks3-cn-beijing.ksyun.com/ksy.vcloud.sdk/Ios/KSYLive_iOS_Resource/KSYGPUResource.zip
- 如果只需要其中的一个或几个效果(而不是全部), 可以不引入KSYGPUResource.bundle, 只需要将选中效果对应的png资源文件放到main bundle中即可. 对应的依赖关系,请参照上图, 直观的说就是将以效果的effectIdx为前缀的png图片引入即可. 单独挑选时请注意有的效果需要多个图片.比如KSYGPUEffectType_Xproll, effectIdx为32, 需要依赖(32_xpro_map.png, 19_23_31_32_vignette_map.png 等两个图片)
- 美颜滤镜 KSYBeautifyFaceFilter 和 KSYBeautifyProFilter 只需要依赖三个图片文件, 如果只需要美颜滤镜, 也可以不引入KSYGPUResource.bundle, 只需要将0_hongrun2.png, 0_pink.png, 13_ziran.png等资源文件放到main bundle中即可.
用户如果需要自定义滤镜,滤镜必须是继承GPUImageOutput类的,而且实现了GPUImageInput协议,使用方法参考下面的示例。
初始化滤镜
- 美颜滤镜
//初始化滤镜
_filter = [[KSYGPUBeautifyExtFilter alloc] init];
- 滤镜组合
//初始化美颜滤镜
KSYGPUBeautifyExtFilter * bf = [[KSYGPUBeautifyExtFilter alloc] init];
//初始化褐色(怀旧)滤镜
GPUImageSepiaFilter * pf =[[GPUImageSepiaFilter alloc] init];
//组装滤镜
[bf addTarget:pf];
//初始化滤镜组
GPUImageFilterGroup * fg = [[GPUImageFilterGroup alloc] init];
//将滤镜添加到滤镜组
[fg addFilter:bf];
[fg addFilter:pf];
//组装滤镜
[fg setInitialFilters:[NSArray arrayWithObject:bf]];
[fg setTerminalFilter:pf];
_filter = fg;
- 美白滤镜
//初始化美颜滤镜
_filter = [[KSYBeautifyFaceFilter alloc] init];
设置滤镜
[_kit setupFilter: _filter];
调整滤镜参数
对于美颜滤镜可以调节美颜等级
[(KSYGPUBeautifyExtFilter *)_filter setBeautylevel: level];//level 1.0 ~ 5.0
对于美白滤镜可以调节磨皮、白皙的等级
(KSYBeautifyFaceFilter *)_filter.grindRatio = level;//0.0 ~ 0.8 0.7为默认等级
(KSYBeautifyFaceFilter *)_filter.whitenRatio = level;//0.0 ~ 1.0 0.5为默认等级
取消滤镜
_filter = nil;
[_kit setupFilter: _filter];//取消滤镜只要将_filter置为nil就行
测试说明
- 温度取值摄像头下方
- 设备为iphone6s iOS 9.3
- 采集配置:分辨率360p、帧率15fps
Filter Name | 名称 | CPU占用(开启前) | CPU占用(开启后) | GPU占用(开启前) | GPU占用(开启后) | 设备温度(开启前) | 设备温度(开启10mins后) |
---|---|---|---|---|---|---|---|
KSYGPUBeautifyExtFilter | 嫩肤 | 21.85% | 26.2% | 20.4% | 21.1% | 30 | 32.4 |
KSYGPUBeautifyFilter | 白肤 | 21.85% | 27.15% | 20.4% | 22.1% | 30 | 30.1 |
KSYGPUDnoiseFilter | 自然 | 21.85% | 25.7% | 20.4% | 25.4% | 30 | 32.9 |
KSYGPUBeautifyPlusFilter | 柔肤 | 21.85% | 31.6% | 20.4% | 21.2% | 30 | 32.7 |
KSYBeautifyFaceFilter | 白皙 | 21.85% | 25.1% | 20.4% | 23.7% | 30 | 32.5 |
KSYGPUBeautifyExtFilter | KSYGPUBeautifyFilter |
---|---|
KSYGPUDnoiseFilter | KSYGPUBeautifyPlusFilter |
---|---|
KSYBeautifyFaceFilter 50% | KSYBeautifyFaceFilter 100% |
---|---|
某椒 | 某客 |
---|---|
KSYGPUBeautifyExtFilter | KSYGPUBeautifyFilter |
---|---|
KSYGPUDnoiseFilter | KSYGPUBeautifyPlusFilter |
---|---|
KSYBeautifyFaceFilter 50% | KSYBeautifyFaceFilter 100% |
---|---|
某椒 | 某客 |
---|---|