AI 美颜
  • iOS
  • Android : Java
  • macOS
  • Windows
  • 产品简介
    • 概述
    • 发布日志
    • 计费说明
  • 下载
  • 体验 App
  • 快速开始
    • 跑通示例源码
    • 集成 SDK
    • 导入资源和模型
    • 在线鉴权
    • 实现图像处理
  • 基础功能
  • 最佳实践
  • 客户端 API
  • 常见错误码
  • 常见问题
  • 文档中心
  • AI 美颜
  • 快速开始
  • 实现图像处理

实现图像处理

更新时间:2024-01-12 15:33

1 前提条件

在实现基本的 AI 功能之前,请确保:

2 使用步骤

本节介绍如何使用 ZegoEffects SDK 实现基本的图像处理功能,API 调用时序如下图:

/Pics/AI_Vision/QuickStarts/Implemention_Android_zh.png

2.1 创建 Effects 对象

  1. 传入 AI 资源或模型。
    使用 Effects 的 AI 相关功能前,必须调用 setResources 接口导入 AI 资源或模型,详情请参考 快速开始 - 导入资源和模型

    // 传入人脸识别模型的绝对路径。人脸检测、大眼、瘦脸功能均须导入
    ArrayList<String> aiModeInfos = new ArrayList<>();
    aiModeInfos.add("sdcard/xxx/xxxxx/FaceDetectionModel.bundle");
    aiModeInfos.add("sdcard/xxx/xxxxx/Segmentation.bundle");  
    
    // 传入模型路径列表,必须在 create 之前调用
    ZegoEffects.setResources(aiModeInfos);
  2. 导入鉴权文件,创建 Effects 对象。

    调用 create 接口,传入 1 前提条件 获取到的鉴权文件,创建 Effects 对象。

    // 创建 effects 对象,传入鉴权文件 License 内容(鉴权内容请以实际获取的文件为准)
    String license = "xxxxxxx";
    ZegoEffects mEffects = ZegoEffects.create(license, applicationContext);

2.2 初始化 Effects 对象

  1. 传入待处理的原始图像宽、高,调用 initEnv 接口初始化 Effects 对象。

    // 初始化 Effects 对象,传入当前待处理的原始图像宽高
    mEffects.initEnv(1280, 720);
  2. 调用 enableWhiten/enableBigEyes/setPortraitSegmentationBackgroundPath/enablePortraitSegmentation 接口开启各项 AI 功能。

    // 1. 开启美白功能
    // 2. 开启大眼功能
    // 3. 开启 AI 人像分割功能,并传入分割背景图的绝对路
    mEffects.enableWhiten(true)
            .enableBigEyes(true)
            .setPortraitSegmentationBackgroundPath("MY_BACKGROUND_PATH", ZegoEffectsScaleMode.ASPECT_FILL);
            .enablePortraitSegmentation(true);

2.3 处理图像

SDK 支持 RGB、YUV、Texture 等多种格式来处理图像,开发者可以参考如下表格:

视频帧类型 视频数据帧格式 处理数据接口
Buff 类型
  • BGRA32
  • RAGB32
processImageBufferRGB
Buff 类型
  • NV12
  • NV21
  • I420
  • YV12
processImageBufferYUV
Texture 类型
  • BGRA32
  • RAGB32
processTexture
  • 调用 processTexture 接口时,传入的纹理 ID 必须是 Texture2D 类型,不支持相机直出的 OES 纹理,需要开发者自行转换成 2D 类型的纹理之后,再提供给 processTexture 接口。

以下示例代码是通过 processTexture 接口来进行图像处理:

ZegoEffectsVideoFrameParam zegoEffectsVideoFrameParam = new ZegoEffectsVideoFrameParam();
zegoEffectsVideoFrameParam.setFormat(ZegoEffectsVideoFrameFormat.RGBA32);
zegoEffectsVideoFrameParam.setWidth(width);
zegoEffectsVideoFrameParam.setHeight(height);
// 传入待处理的原始视频的 textureID,返回处理后的 textureID。
zegoTextureId = mEffects.processTexture(mTextureId, zegoEffectsVideoFrameParam);
本篇目录