虚拟背景

更新时间: 2022/07/04 06:10:04

在音视频会议场景中,为了突出人像或者保护隐私,用户不想将视窗的背景呈现出来。NEMeetingKit 通过自动识别用户人像,以自定义图片替代真实背景,从而实现设置虚拟背景。替换后,频道内所有远端用户都能看到本地用户自定义的虚拟背景。

功能原理

NEMeetingKit 支持的虚拟背景采用自研的深度学习算法,在对当前视频帧做背景分割时利用前一帧的分割结果作为先验信息,同时在 video matting 中利用时序信息解决视频分割中可能出现的闪烁问题,提升分割效果,让您在使用虚拟背景的同时也能享受优质的视频通话体验。

注意事项

  • 建议您在满足以下条件的场景中使用虚拟背景功能:
    • 采用高清摄像设备,避免遮挡摄像头且环境光线均匀。
    • 捕获的视频场景中无冗余物件,用户人像尽量保持上半身在画面内且基本无遮挡。
    • 背景色单一且尽量不与用户着装颜色相同。
  • 自定义背景图片支持 JPG ,JPEG 和 PNG 格式。建议自定义图片大小限制为 5M,且最多上传 5 张图片。
  • SDK 会在保证背景图片内容不变形的前提下,对图片进行一定程度上的缩放和裁剪,以适配视频采集分辨率。
  • 目前仅支持 GPU 为 Adreno 540 及以上或 Mali-G78 及以上的设备使用虚拟背景;暂不支持在 Texture 格式的视频或通过 Push 方法从自定义视频源获取的视频中设置虚拟背景。

配置步骤

  1. 调用 NESettingsService 类的 enableVirtualBackground 方法,并设置 enabled 参数为 true, 开启虚拟背景功能。

    请先预览摄像头时或在会议内开启摄像头后开启此功能。

  2. 调用 setBuiltinVirtualBackgrounds 方法,并通过 path 参数传入自定义背景图片的本地绝对路径,设置自定义背景图片列表。

    建议最多上传 5 张图片,单张图片的大小限制为 5 M。

  3. 启用该方法后,您可以通过调用 getBuiltinVirtualBackgrounds 方法获取已设定的自定义背景图片列表。
  4. 若您需要取消虚拟背景,请调用 enableVirtualBackground 方法,设置 enabled 参数为 false,关闭虚拟背景功能。

示例代码

  NESettingsService settingsService = NEMeetingKit.getInstance().getSettingsService();
  // 开启虚拟背景功能。
  settingsService.enableVirtualBackground(true);
  // 是否支持虚拟背景
  boolean value = settingsService.isVirtualBackgroundEnabled()
  // 获取内置虚拟背景列表
  List<NEMeetingVirtualBackground>  list= settingsService.getBuiltinVirtualBackgrounds();
NESettingsService settingsService = NEMeetingKit.getInstance().getSettingsService();
// 设置虚拟背景 图片

            List<NEMeetingVirtualBackground> virtualBackgrounds = new ArrayList<>();
            String virtualPath = MeetingApplication.getInstance().getFilesDir().getPath()+"/virtual";
            File virtualFile = new File(virtualPath);
            int size = 0;
            if(virtualFile.exists()){
               size = virtualFile.listFiles().length;
            }
            for (int i=1;i<=size;i++){
                String path = MeetingApplication.getInstance().getFilesDir().getPath()+"/virtual/"+i+".png";
                File file = new File(path);
                if(file.exists()) {
                    NEMeetingVirtualBackground virtualBackground = new NEMeetingVirtualBackground(path);
                    virtualBackgrounds.add(virtualBackground);
                }
            }
            settingsService.setBuiltinVirtualBackgrounds(virtualBackgrounds);

此文档是否对你有帮助?
有帮助
去反馈
  • 功能原理
  • 注意事项
  • 配置步骤
  • 示例代码