​摘要:帮助开发者在音视频场景中快速获得 AI 视觉功能 —— 美颜、滤镜、背景抠图等。

文|即构 Native SDK 开发团队

Z世代作为社会新的消费主力,追求个性、热爱新奇事物,青睐与酷炫新奇的玩法、紧跟娱乐潮流。AI+音视频的结合,作为在音频和视频之外第三个场景玩法创新的支撑点,刚好迎合了潮流属性。

当前市场中难以找到AI视觉&音视频双能力稳定可靠的供应商,AI视觉与音视频各自的技术门槛令众多企业的技术综合能力,用户不得不对接更多的供应商,而这也让更贴合用户需求的一体化服务迟迟没有到来。

接入速度慢?

维护成本高?

响应不及时?

ZEGO 即构科技在今年6月推出了 AI 视觉产品“ZEGO Effects”,用稳定可靠的AI+音视频能力提供更便捷高效的一站式服务,解决行业痛点,基于基础的音视频服务,满足用户在音视频场景中对于美颜、滤镜、AI 特效等 AI 视觉功能的需求。

本篇文章我们将介绍如何使用 Zego 即构科技的 Express SDKEffects SDK 产品,快速完成在移动端的音视频 + AI 场景的搭建

一、概念介绍

在正式开始介绍音视频+AI场景搭建实操之前,先简单介绍下Express SDK 和 Effects SDK 的基础概念。

1、Express SDK

Express SDK 是指 ZEGO 实时音视频 SDK,能够为开发者提供便捷接入、高清流畅、多平台互通、低延迟、高并发的音视频服务,可以实现一对多,多对多的实时音视频互动,秀场直播,视频会议等场景。

2、Effects SDK

Effects SDK 是指 ZEGO AI 视觉 SDK,提供多项智能图像渲染和算法能力,包括智能美颜、AR 特效、图像分割等,可广泛应用于娱乐直播、在线教育、拍照工具等多种场景。

充分满足泛娱乐场景下各类玩法,让企业快速获得 AI+ 音视频创新能力:

  • 美颜 —— 智能美颜、基于精准的人脸关键点监测和 3D 模型的高级美颜、自然美妆;

  • AR 特效 —— ZEGO Effects 提供多种 AR 特效,支持 2D/3D 贴纸,脸部贴纸,对于复杂背景,光照变化及人物夸张姿态等有极强的鲁棒性;

  • 智能分割 —— 通过精准分割改变画面背景,用户可需求实现视频、直播场景自由变换,再辅以多样背景素材,可以实现更多有趣玩法;

  • 百变滤镜 —— 提供多种精美滤镜,包括清新、日系、柔美、森林、光效等不同主题,可以轻松变换图像风格。

AI 视觉在音视频代码中的实现逻辑

下面我们将以 iOS,Android 端为切入点,带大家了解一下 Express SDK + Effects SDK 整个实现过程。

1、初始化 Effects SDK

初始化 Effects SDK 主要是完成对象的创建和资源的设置。

objective-c 代码实现如下:

...
// 设置资源
[ZegoEffects setModels:@[faceDetectionModelPath, segmentationModelPath]];
[ZegoEffects setResources:@[pendantBundlePath, whitenBundlePath]];
// 创建 effects 实例
ZegoEffects *effects = [ZegoEffects create:@license];
// 保存 effects 实例
self.effects = effects;
// 初始化effects 对象
[self.effects initEnv:CGSizeMake(width, height)];

java代码实现如下:

...
// 设置资源
ZegoEffects.setModels(aiModeInfos);
ZegoEffects.setResources(aiResources);
// 创建 effects 实例
ZegoEffects effects = ZegoEffects.create(license, getApplication());
// 初始化effects 对象
effects.initEnv(width, height);

2、初始化 Express SDK

初始化 Express SDK 主要完成视频帧数据格式的设置,启动自定义前处理功能以及注册回调对象。这里需要注意的是,不同平台下所用的视频帧格式有所不同。

平台

视频帧数据格式

iOS

ZegoVideoBufferTypeCVPixelBuffer

Android

GL_TEXTURE_2D

objective-c 代码实现如下:

// 创建 express 实例
[ZegoExpressEngine createEngineWithAppID:appID appSign:appSign isTestEnv:YES scenario:ZegoScenarioGeneral eventHandler:self];
// 选择 CVPixelBuffer 类型视频帧数据
ZegoCustomVideoProcessConfig *processConfig = [[ZegoCustomVideoProcessConfig alloc] init];
processConfig.bufferType = ZegoVideoBufferTypeCVPixelBuffer;
// 开启自定义前处理
[[ZegoExpressEngine sharedEngine] enableCustomVideoProcessing:YES config:processConfig channel:ZegoPublishChannelMain];
// 设置视频前处理回调对象
[[ZegoExpressEngine sharedEngine] setCustomVideoProcessHandler:self];

java 代码实现如下:

// 创建 express 实例
engine = ZegoExpressEngine.createEngine(appID, appSign, true, ZegoScenario.GENERAL, getApplication(), null);
// 选择 GL_TEXTURE_2D 类型视频帧数据
ZegoCustomVideoProcessConfig config = new ZegoCustomVideoProcessConfig();
config.bufferType = ZegoVideoBufferType.GL_TEXTURE_2D;
// 开启自定义前处理
engine.enableCustomVideoProcessing(true, config, ZegoPublishChannel.MAIN);
//设置视频前处理回调对象
engine.setCustomVideoProcessHandler(myHandler);

3、Express SDK + Effects SDK 的实现逻辑

Express SDK 提供的自定义视频前处理能与 Effects SDK 完美结合起来。自定义视频前处理功能无需开发者管理设备输入源,开发者只需在 Express SDK 提供的采集回调函数中对原始数据进行操作,再把数据传回给 Express SDK 即可。而 Effects SDK 在这个过程中负责对原始数据的处理。

objective-c 代码实现如下:

- (void)onCapturedUnprocessedCVPixelBuffer:(CVPixelBufferRef)buffer timestamp:(CMTime)timestamp channel:(ZegoPublishChannel)channel {
...
// 把Express SDK采集的数据传给Effects SDK进行处理
[self.effects processImageBuffer:buffer];
// 把Effects SDK处理后数据抛回给Express SDK
[[ZegoExpressEngine sharedEngine] sendCustomVideoProcessedCVPixelBuffer:output timestamp:timestamp channel:channel];
...

java 代码实现如下:

public void onCapturedUnprocessedTextureData(int textureID, int width, int height, long referenceTimeMillisecond, ZegoPublishChannel channel) {
ZegoEffectsVideoFrameParam param = new ZegoEffectsVideoFrameParam();
param.format = ZegoEffectsVideoFrameFormat.BGRA32;
param.width = width;
param.height = height;
// 把Express SDK采集的数据传给Effects SDK进行处理
int processedTextureID = effects.processTexture(textureID, param);
// 把Effects SDK处理后数据抛回给Express SDK
express.sendCustomVideoProcessedTextureData(processedTextureID, width, height, referenceTimeMillisecond);
}

4、AI视觉效果调整

Effects_SDK 还提供了美颜,美型,背景分割,人脸检测,挂件,滤镜等功能,广泛应用于娱乐直播,在线教育,拍照工具等多个场景,开发者可根据需要调用相应的接口。

objective-c 代码实现如下:

// 开启美白功能
[self.effects enableWhiten:YES];
// 设置美白强度,范围 [0, 100],默认为 50
ZegoEffectsWhitenParam *param = [[ZegoEffectsWhitenParam alloc] init];
param.intensity = 100;
[self.effects setWhitenParam:param];

java 代码实现如下:

// 开启美白功能
effects.enableWhiten(true);
// 设置美白强度,范围 [0, 100],默认为 50
ZegoEffectsWhitenParam param = new ZegoEffectsWhitenParam();
param.intensity = 100;
effects.setWhitenParam(param);

总结

以上就是关于在移动端通过使用 Express SDK 和 Effects_SDK 搭建音视频+Al 的解读。

ZEGO Effects 作为一款 AI 视觉产品,提供了多项智能图像渲染和算法能力,包括智能美颜、人像检测、图像分割等,被广泛应用于娱乐直播、在线教育、拍照工具等多种场景。

这是 AI 能力与音视频的有机结合,我们也期待在将来可以实现更多音视频与 AI 的创新应用。

ZEGO 教程 | RTC + AI 视觉的最佳实践(移动端)的更多相关文章

  1. EffectiveTensorflow:Tensorflow 教程和最佳实践

    Tensorflow和其他数字计算库(如numpy)之间最明显的区别在于Tensorflow中的操作是符号. 这是一个强大的概念,允许Tensorflow进行所有类型的事情(例如自动区分),这些命令式 ...

  2. 听说你还不会用Dagger2?Dagger2 For Android最佳实践教程

    前言 Dagger2是现在非常火的一个依赖注入框架,目前由Google维护,在Github上面已经有12K star了.Dagger2的入门门槛其实是比较高的,据了解,目前有很多Android工程师对 ...

  3. 2018亚太CDN峰会开幕, 阿里云王海华解读云+端+AI的短视频最佳实践

    4月11-12日,2018亚太CDN峰会在北京隆重召开,在11日下午的短视频论坛中,阿里云高级技术专家王海华进行了<短视频最佳实践:云+端+AI>的主题演讲,分享了短视频的生命周期关键点和 ...

  4. CSS 布局:40个教程、技巧、例子和最佳实践

    前言: 布局是WEB开发一个重要的课题,进入XHTML/CSS后,使用TABLE布局的方式逐渐淡出,CSS布局以众多优点成为主流,本文将介绍40个基于CSS的web布局的资源和教程.文章的出处在htt ...

  5. 腾讯云AI应用产品总监王磊:AI 在传统产业的最佳实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海 ...

  6. Sentry 后端监控 - 最佳实践(官方教程)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  7. 教程 - 在 Vue3+Ts 中引入 CesiumJS 的最佳实践@2023

    目录 1. 本篇适用范围与目的 1.1. 适用范围 1.2. 目的 2. 牛刀小试 - 先看到地球 2.1. 创建 Vue3 - TypeScript 工程并安装 cesium 2.2. 清理不必要的 ...

  8. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...

  9. PHP 教程:Composer 最佳实践

    概述 Composer 是 PHP 应用程序的依赖管理器,最初发布于大约 8 年前,2012 年 3 月. 在 php 中使用 Composer 可以提高代码的可重用性,并使你的项目能够轻松地集成来自 ...

  10. Kubernetes集群的监控报警策略最佳实践

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/79652064 本文为Kub ...

随机推荐

  1. java.net.UnknownHostException: api.weixin.qq.com解决办法

    java.net.UnknownHostException: api.weixin.qq.com at java.net.AbstractPlainSocketImpl.connect(Abstrac ...

  2. linux系统是未来_大小写敏感_case_sensitive_编程原生态

    修改 py 文件 回忆上次内容 上次尝试了 两个vim 同时打开 同一py文件 vim出现了Error 有各种选择     错误拼写 pront 导致 运行时 出现了NameError         ...

  3. oeasy教您玩转vim - 22 - 配置文件

    配置文件 回忆上节课内容 我们上次了解到了状态横条 通过转义表示 item 控制 item 宽度的方法 将 item 成组的方法 还有一个总开关 laststatus 但是每次都要写很长的一段话来配置 ...

  4. 【译】使 Visual Studio 更加可视化

    任何 Web.桌面或移动开发人员都经常使用图像.你可以从 C#.HTML.XAML.CSS.C++.VB.TypeScript 甚至代码注释中引用它们.有些图像是本地的,有些存在于线上或网络共享中,而 ...

  5. 【游记】CSP 2023

    day 0 和 printfmingren 整理了一下不会的知识点,发现有点多,遂开摆 音游真的太好玩了 对着<算法竞赛进阶指南>复习了下对拍器的写法,把部分算法的模板又打了一遍 感觉前途 ...

  6. 从零开始写 Docker(十九)---增加 cgroup v2 支持

    本文为从零开始写 Docker 系列第十九篇,添加对 cgroup v2 的支持. 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 d ...

  7. scratch源码下载 | 飞天厨师

    程序说明: <飞天厨师>是一款使用Scratch平台制作的游戏程序.在这个游戏中,玩家将控制一名厨师角色,他在天空中不断掉落.玩家需要利用方向键左右移动厨师,以便他能够准确地踩在空中的食物 ...

  8. [HTTP] HTTP 协议 Response Header 之 Content-Length、Transfer-Encoding与Content-Encoding

    0 引言 在近期项目一场景中,一 Web API (响应内容:7MB - 40MB.数据项:5W-20W条)的网络传输耗时较大,短则 5s,长则高达25s,前端渲染又需要耗时 9s-60s. 在这个场 ...

  9. RHCA rh442 002 监控工具 脏页 块设备名 缓存

    sar 看某一个时间的数据 sar -d 1 5 与iostat类似 计算机识别设备按编号识别 0-15预留出 8 为iscsi设备 做一个块设备名 名字不重要是给人看的,重要的是编号 8 17(主编 ...

  10. Mysql函数10-IF

    IF函数用于判断条件是否成立,成立则执行命令1,不成立则执行命令2. 1.sql查询出一列create_time select create_time from goods where id=65 2 ...