音视频开发中如何实现美颜、滤镜、背景抠图等功能
2023/05/03

本文WINDOWS,MACOS 端为切入点,带大家了解一下在PC端 Express SDK + Effects SDK 的整个实现过程。帮助开发者在音视频场景中快速获得 AI 视觉功能 —— 美颜、滤镜、背景抠图等。

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

初始化Effects SDK

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

C++代码实现如下:

...
// 设置资源
zego_effects_set_models(model_path_list, 2);
zego_effects_set_resources(resouce_path_list, 4);
// 创建 effects 实例
zego_effects_create(&m_handle,license);
// 初始化effects 对象
zego_effects_init_env(handle,width,height);

初始化Express SDK

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

平台视频帧数据格式
MACOSZEGO_VIDEO_BUFFER_TYPE_CV_PIXEL_BUFFER
WINDOWSZEGO_VIDEO_BUFFER_TYPE_RAW_DATA

C++(MACOS)代码实现如下:


// 创建 express 实例
engine = ZegoExpressSDK::createEngine(appID,appSign,true, ZEGO_SCENARIO_GENERAL,nullptr);
// 选择  CVPixelBuffer 类型视频帧数据
ZegoCustomVideoProcessConfig config;
config.bufferType = ZEGO_VIDEO_BUFFER_TYPE_CV_PIXEL_BUFFER;
// 开启自定义前处理
engine->enableCustomVideoProcessing(true,&config);
// 设置视频前处理回调对象
engine->setCustomVideoProcessHandler(myHandler);

C++(WINDOWS)代码实现如下:


// 创建 express 实例
engine = ZegoExpressSDK::createEngine(appID,appSign,true, ZEGO_SCENARIO_GENERAL,nullptr);
// 选择  RAW_DATA 类型视频帧数据
ZegoCustomVideoProcessConfig config;
config.bufferType = ZEGO_VIDEO_BUFFER_TYPE_RAW_DATA;
// 开启自定义前处理
engine->enableCustomVideoProcessing(true,&config);
// 设置视频前处理回调对象
engine->setCustomVideoProcessHandler(myHandler);

Effects SDK + Express SDK 的实现逻辑

Express SDK 提供的自定义视频前处理能与 Effects SDK 完美结合起来。

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

C++(MACOS)代码实现如下:

void MyHandler::onCapturedUnprocessedCVPixelBuffer(void * buffer, unsigned long long referenceTimeMillisecond, ZegoPublishChannel channel) {
    ...
    //把Express SDK采集的数据传给Effects SDK进行处理
    zego_effects_process_image_buffer_rgb(m_handle,image.bits(), image.bytesPerLine() * image.height(),param);
    // 把Effects SDK处理后数据抛回给Express SDK
    engine->sendCustomVideoProcessedCVPixelBuffer(buffer,referenceTimeMillisecond,channel);
    ...
}

C++(WINDOWS)代码实现如下:

void MyHandler::onCapturedUnprocessedRawData(const unsigned char** data, unsigned int* dataLength, ZegoVideoFrameParam param, unsigned long long referenceTimeMillisecond, ZegoPublishChannel channel) {
    ...
    //把Express SDK采集的数据传给Effects SDK进行处理
    zego_effects_process_image_buffer_rgb(m_handle,image.bits(), image.bytesPerLine() * image.height(),frameParam);
    //把Effects SDK处理后数据抛回给Express SDK
    engine->sendCustomVideoProcessedRawData((const unsigned char**)data,dataLength,param,referenceTimeMillisecond);
    ...
}

AI视觉效果调整

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

C++代码实现如下:


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

总结

以上就是关于在 PC 端通过使用 Express SDK 和 Effects_SDK 搭建音视频+Al 的解读。ZEGO Effects 作为一款 AI 视觉产品,提供了多项智能图像渲染和算法能力,包括智能美颜、人像检测、图像分割等,被广泛应用于娱乐直播、在线教育、拍照工具等多种场景。

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

扫一扫,获取更多服务与支持
热门推荐
H.264 与 H.265 视频编解码器的区别,哪个更好?
2024/07/26
直播产品中的“六边形战士”来了!ZEGO 超低延迟直播,高质量带来新增长!
2024/07/23
什么是抖动?如何使用抖动缓冲区来减少抖动
2024/07/22
热门标签
AI 降噪
AI课堂
ExpressSDK
MSDN
RTI
SEI
webrtc
ZIM
互动白板
即构融资
在线KTV
在线K歌
屏幕共享
录屏采集
数智人
直播技术
范围语音
行业报告
语聊房
语音社交
超分
音视频
音视频开发
音视频技术
音频编码
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们