绿幕抠图是影视制作过程中常见的技术手段,罕用于视频中抠除并替换背景,通过前期加工实现视频剪辑制作的更多可能性。然而,绿幕抠图技术制作老本费时费力,无奈利用于日常生活。
华为视频编辑服务近期上线指标宰割能力,可通过 AI 智能抠图精细化宰割视频中的指标物体,并且不局限于特定的物体类别,在主体明确、背景绝对简略的视频中进行主体和背景的宰割,能够获得不错的解决成果。
利用场景
指标宰割能力多利用于视频直播、在线教育、论坛会议等场景。比方,在卖货直播的场景中,能够将直播背景替换成商品详情页的轮播画面,便于用户及时理解商品;在线上论坛或者视频会议中,将背景替换成 PPT 内容或者办公场景,营造学习办公的庄重气氛。同样,指标宰割能力也可满足用户日常趣味剪辑,用户能够通过指标宰割能力剪辑人像视频,而后将背景切换各国名景,足不出户便能实现“周游世界”。
除了更换视频背景,指标宰割能力还可利用于影视播放,通过指标抠图,防止弹幕遮挡剧情主体,优化用户观看体验。联合其余技术能力,还能够将宰割后的指标物体进行复制和删除,甚至调整指标物体的动作工夫,打造更具创意的视频作品。
实现原理
那么,指标宰割能力是怎么实现的呢?
首先,用户须要抉择指标物体,而后再进行 AI 指标宰割。通过给定视频第一帧图像须要宰割指标物体的对应掩码,AI 模型会主动在后续每一帧的视频帧中匹配这个物体并尝试宰割进去。并且,模型将会保留两头帧宰割成果好的后果掩码与第一帧的掩码信息相结合,在后续视频帧中进行匹配,能够精准勾画指标物体的边缘细节,进一步晋升指标宰割的准确度。
DEMO 演示
集成形式
1. 开发筹备
具体筹备步骤可参考华为开发者联盟官网
2. 编辑工程集成
2.1 设置利用的鉴权信息
能够通过 api_key 或者 Access Token 来设置利用鉴权信息。
通过 setAccessToken 办法设置 Access Token,在利用启动时初始化设置一次即可,无需屡次设置。
MediaApplication.getInstance().setAccessToken("your access token");
通过 setApiKey 办法设置 api_key,在利用启动时初始化设置一次即可,无需屡次设置。
MediaApplication.getInstance().setApiKey("your ApiKey");
2.2 设置惟一标识 ID,即 License ID。
License ID 是进行管控的无效凭证,您要保障设置 License ID 的唯一性。
MediaApplication.getInstance().setLicenseId("License ID");
2.2.1 初始化 Editor 运行环境
创立编辑工程,须要首先创立 Editor 对象并初始化其运行环境。当来到编辑工程时,应开释 Editor 实例。
(1) 创立 Editor 对象
HuaweiVideoEditor editor = HuaweiVideoEditor.create(getApplicationContext());
(2) 指定预览窗口的布局地位
预览窗口负责视频图像画面的渲染,由视频编辑原子能力 SDK 外部创立 SurfaceView 来实现。在创立窗口之前,须要在您的 App 中指定预览窗口的布局地位。
<LinearLayout
android:id="@+id/video_content_layout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/video_edit_main_bg_color"
android:gravity="center"
android:orientation="vertical" />
// 指定预览窗口
LinearLayout mSdkPreviewContainer = view.findViewById(R.id.video_content_layout);
// 设置预览窗口承载的布局
editor.setDisplay(mSdkPreviewContainer);
(3) 初始化运行环境,如果 License 鉴权失败,会抛出 LicenseException。
当 Editor 对象创立之后,此时还没有占用理论的系统资源,须要手动抉择其环境初始化的机会,此时视频编辑原子能力 SDK 外部会创立必须的线程和定时器等。
try {editor.initEnvironment();
} catch (LicenseException error) {SmartLog.e(TAG, "initEnvironment failed:" + error.getErrorMsg());
finish();
return;
}
3.“指标宰割”能力集成
// 初始化指标宰割 AI 引擎
videoAsset.initSegmentationEngine(new HVEAIInitialCallback() {
@Override
public void onProgress(int progress) {// 初始化进度}
@Override
public void onSuccess() {// 初始化胜利}
@Override
public void onError(int errorCode, String errorMessage) {// 初始化失败}
});
// 初始化胜利后,抉择须要宰割的指标进行宰割,返回抉择宰割指标的的处理结果
// bitmap 蕴含须要宰割的指标的视频帧图片;timeStamp 为视频帧图片在工夫线上的工夫戳;points 为基于视频帧图片的坐标点汇合,左上角为原点坐标,坐标点应位于须要宰割的指标内,且个数倡议大于等于 2,需依据坐标点轨迹来确定抉择的指标
int result = videoAsset.selectSegmentationObject(bitmap, timeStamp, points);
// 指标宰割的处理结果胜利后,增加指标宰割 AI 特效
videoAsset.addSegmentationEffect(new HVEAIProcessCallback() {
@Override
public void onProgress(int progress) {// 指标宰割 AI 特效解决进度}
@Override
public void onSuccess() {// 指标宰割 AI 特效解决胜利}
@Override
public void onError(int errorCode, String errorMessage) {// 指标宰割 AI 特效解决失败}
});
// 中断指标宰割 AI 特效解决
videoAsset.interruptSegmentation();
// 移除指标宰割 AI 特效
videoAsset.removeSegmentationEffect();
// 开释指标宰割 AI 引擎
videoAsset.releaseSegmentationEngine();
理解更多详情 >>
拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee
关注咱们,第一工夫理解 HMS Core 最新技术资讯~