首页 > 其他分享 >ZEGO 教程 | RTC + AI 视觉的最佳实践(移动端)

ZEGO 教程 | RTC + AI 视觉的最佳实践(移动端)

时间:2023-11-02 16:12:23浏览次数:48  
标签:RTC AI Express effects 音视频 Effects ZEGO SDK

 ​摘要:帮助开发者在音视频场景中快速获得 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 的创新应用。

 

标签:RTC,AI,Express,effects,音视频,Effects,ZEGO,SDK
From: https://www.cnblogs.com/zegoinfo/p/17805644.html

相关文章

  • Docker 可视化容器管理平台--portainer
    Portainer是一个开源的轻量级容器管理工具,用于简化Docker容器的部署、管理和监控。它提供了一个直观易用的WebUI,允许用户通过可视化界面来管理Docker容器、镜像、卷等资源,而无需使用Docker命令行工具。Portainer可以部署在本地Docker环境、远程Docker主机或Docker......
  • 使用 Sealos 将 ChatGLM3 接入 FastGPT,打造完全私有化 AI 客服
    FastGPT是一款专为客服问答场景而定制的开箱即用的AI知识库问答系统。该系统具备可视化工作流功能,允许用户灵活地设计复杂的问答流程,几乎能满足各种客服需求。在国内市场环境下,离线部署对于企业客户尤为重要。由于数据安全和隐私保护的考虑,企业通常不愿意将敏感数据上传到线上......
  • 报错 org.springframework.dao.DataIntegrityViolationException: Error attempting t
       原因是持久化层的字段属性 跟数据库的没有对应上,类型不对dao.DataIntegrityViolationException:Errorattemptingtogetcolumn'STATUS'fromresultset.<iftest="record.status!=null">'STATUS'=#{record.status,jdbcType=......
  • javamail发送附件DataSource使用文件流解决方案
    问题:在使用james邮件服务器发送邮件时,附件是存储在华为云服务器上的,只能通过ApacheHttpClient去下载,存储在FTP上的文件同样会碰到这个问题。API上邮件添加附件的方法:/*************1.本地文件*************///将本地文件作为附件DataSourcedataSource=newFileDataSourc......
  • 使用async和await获取axios的数据注意事项
    使用async和await获取axios的数据的注意事项确定正确使用asyncfunctiongetInfo(){constres=awaitaxios.get('http://example.com')returnres.data}上述代码等同于asyncfunctiongetInfo(){constresult=(awaitaxios.get('http://example.com')).data......
  • Fail to find the dnn implementation node CudnnRNN
    tensorflow.python.framework.errors_impl.UnknownError:   Failtofindthednnimplementation.   [[{{nodeCudnnRNN}}]]   [[model/lstm/PartitionedCall]][Op:__inference_train_function_3343]Functioncallstack:train_function->train_function->tr......
  • KEIL软件的Error: Flash Download failed - Could not load file '..\OBJ\Template.
    Error:FlashDownloadfailed - Couldnotloadfile'..\OBJ\USART.axf' 解决方案:1重新覆盖安装keil2程序编译存在错误导致 同时开多个KEIL,只有其中一个KEIL可以使用J-LINK,ST-LINK。 ......
  • nvidia-smi Failed to initialize NVML: Driver/library version mismatch
    nvidia-smiFailedtoinitializeNVML:Driver/libraryversionmismatch原因:NVIDIA内核驱动版本与系统驱动不一致, #sudormmodnvidiarmmod:ERROR:Modulenvidiaisinuseby:nvidia_modesetnvidia_uvm首先要知道现在kernelmod的依赖情况,首先我们从错误信息中知道,nvidi......
  • How to determine the correct number of epoch during neural network training? 如
     Thenumberofepochsisnotthatsignificant.Moreimportantisthethevalidationandtrainingerror.Aslongasitkeepsdroppingtrainingshouldcontinue.Forinstance,ifthevalidationerrorstartsincreasingthatmightbeaindicationofoverfittin......
  • AI技术生成照片是如何实现的,用专业角度分析
    随着人工智能技术的快速发展,AI生成图像已经成为一个备受瞩目的领域。人们可以用AI生成图像来创造数字艺术、合成虚拟场景、改进照片质量,甚至生成虚构的人物形象。这项技术的背后有着复杂的算法和深度学习模型,本文将深入探讨AI生成图像是如何实现的。一、数据集的收集与预处理AI......