绿幕,是一种广泛应用于电影、电视制作和视频编辑领域的技术。它通过在拍摄或录制过程中使用一块特殊颜色(通常是绿色)的背景布,然后在后期制作中将该颜色替换成其他图像或视频素材。这种技术主要基于颜色键盘合成技术(chroma keying),可以实现在虚拟环境中展示各种场景和效果。

相芯SDK绿幕功能使用图像分割算法将视频或图像中的前景和背景进行分离,具有较高的质量和准确性。能够准确地分离绿色背景,并实现平滑的背景替换,从而产生逼真的绿幕效果,同时具备较高的实时性能和效率,能够在实时或快速处理的情况下实现绿幕效果,除此以外还支持多平台,以及其他附加功能叠加使用,如绿幕和美颜的叠加使用。

1.功能介绍

相芯SDK绿幕功能详细介绍:

  1. 安全区:相芯SDK提供的绿幕技术中,安全区指在视频编辑过程中需要保留的区域,以确保前景元素(例如人物或物体)不被意外地裁剪或遮挡。通过使用安全区,用户可以精确控制绿幕效果的应用范围,确保关键的前景元素不受到意外的修改。这对于保持视频的一致性和完整性非常重要,尤其是在涉及人物或需要保留特定物体的场景中。
  2. 背景替换:相芯SDK还支持绿幕背景替换,可以帮助用户将视频或图像中的绿色背景替换为自定义的背景图像或视频。这项功能利用计算机视觉和图像处理技术,准确识别并分离绿色背景,然后将其替换为用户选择的背景。
  3. 相似度参数:相似度参数用于控制背景和前景之间的相似度阈值。较低的相似度阈值会更严格地分离背景和前景,确保准确性,但可能导致一些细节丢失。较高的相似度阈值则可能使得背景和前景的边界模糊,但可以保留更多的细节。用户可以根据需要调整相似度参数,以达到预期的分离效果。
  4. 关键颜色提取:关键颜色提取是指从绿色背景中提取关键色彩信息的过程。在绿幕技术中,绿色通常被用作背景色,因为它在大多数场景中相对较少出现于前景中。关键颜色提取算法可以识别并提取出这个特定的绿色,以便在后续的背景替换过程中准确地分离背景和前景。

2.使用前必查

在项目中使用道具贴纸特效之前,请确保:

  • 已在项目中引入Faceunity SDK,详情请参考Faceunity集成文档
  • 已申请包含绿幕权限的authpack证书文件

3.使用步骤

3.1. build.gradle配置

allprojects配置

allprojects {  
    repositories {  
        ...  
        maven { url 'https://maven.faceunity.com/repository/maven-public/' }   
        ...  
  }  
}

dependencies导入依赖

dependencies {
...
implementation 'com.faceunity:core:8.6.0' 
implementation 'com.faceunity:model:8.6.0' 
...
}

3.2构造绿幕对象BgSegGreen

绿幕bundle主要是用来作绿幕抠图使用的,用绿色或蓝色背景,抠图效果会更佳。

加载绿幕道具bundle示例

BgSegGreen bgSegGreen = new BgSegGreen(new FUBundleData(DemoConfig.BUNDLE_BG_SEG_GREEN));

设置绿幕参数

bgSegGreen.setSimilarity(BgSegGreenSource.SIMILARITY);//设置相似度
bgSegGreen.setSmoothness(BgSegGreenSource.SMOOTHNESS);//设置平滑度
bgSegGreen.setTransparency(BgSegGreenSource.TRANSPARENCY);//设置相似度

3.3构造安全区

相芯绿幕支持构造安全区域,除了内置的安全区之外还支持用户上传自定义图片,安全区域不参与绿幕抠像。

构造自定义安全区图片示例方法如下:

Public static BgSegGreenSafeAreaBean buildSafeAreaCustomBean(String path) {  
        if (path != null && path.trim().length() > 0 && new File(path).exists()) {  
            saveCachePortraitSegment(path);  
            return new BgSegGreenSafeAreaBean(0, BgSegGreenSafeAreaBean.ButtonType.NORMAL1_BUTTON, path,false);  
        }  
        return null;  
}

切换安全区域图片

void onSafeAreaSelected(BgSegGreenSafeAreaBean bean);

3.4创建自定义背景

除了内置绿幕的5个背景道具以外,相芯还支持用户自定义绿幕背景,灵活打造各种场景下多功能背景。

public static ArrayList<BgSegGreenBackgroundBean> buildBgSegGreenBackground() {  
        ArrayList<BgSegGreenBackgroundBean> backgroundBeans = new ArrayList<>();  
        String fileDir = "bg_seg_green" + File.separator + "sample" + File.separator;  
        backgroundBeans.add(new BgSegGreenBackgroundBean(R.string.cancel, R.mipmap.icon_control_none, null));  
        backgroundBeans.add(new BgSegGreenBackgroundBean(R.string.bg_seg_green_science, R.mipmap.icon_green_science, fileDir + "science.mp4"));  
        return backgroundBeans;  
}

3.5 FURenderKit加载当前特效

加载当前绿幕特效

public void bindCurrentRenderer() {  
       FUAIKit.getInstance().setMaxFaces(1); // 设置人脸数
       mFURenderKit.setFaceBeauty(FaceBeautyDataFactory.faceBeauty);  //加载美颜
       mFURenderKit.setBgSegGreen(mBgSegGreen);  //加载绿幕
       mBgSegGreenListener.onBackgroundSelected(mBgSegGreenBackgroundBeans.get(mCurrentBackgroundIndex));//加载绿幕背景
       mBgSegGreenListener.onSafeAreaSelected(mBgSegGreenSafeAreaBeans.get(mCurrentSafeAreaIndex));  //加载安全区
   }

4.API参考列表

Module

类名

说明

core

BgSegGreen

绿幕抠像功能业务模型

BgSegGreen

属性

说明

默认值

备注

enable

绿幕抠像开关

true

true表示开启,false表示关闭

isBGRA

BGRA类型

false

背景图片的颜色是否是BGRA类型

colorRGB

锚点颜色

FUColorRGBData(0.0, 255.0, 0.0)

选取的颜色RGB

similarity

相似度

0.518

取值范围0.0-1.0,相似度:色度最大容差,色度最大容差值越大,更多幕景被抠除

smoothness

平滑度

0.22

取值范围0.0-1.0,平滑:色度最小限差,值越大,更多幕景被扣除

transparency

透明度

0.0

取值范围0.0-1.0,透明度:图像前后景透明度过度,值越大,两者边缘处透明过度更平滑

centerPoint

中心坐标

FUCoordinate2DData(0.5, 0.5)

取值范围0.0-1.0, [0.5,0.5]表示中心点坐标

zoom

缩放程度

1.0

取值范围0.25-4.0

5.总结