iOS

人脸检测

更新时间: 2026/07/20 17:49:18

人脸检测即对本地视频流中的人脸进行实时识别与追踪,可以获取视频帧中人脸的数量以及每张人脸在画面中的位置信息。该功能通常与美颜、滤镜等效果配合使用,用于实现人脸贴纸、美颜增强、实时人脸追踪等场景。

NERTC SDK 支持人脸检测功能,检测结果通过回调实时返回。

功能介绍

人脸检测功能可以应用于以下场景:

  • 在线直播场景中,主播开启美颜或人脸贴纸时,需要实时获取人脸位置以实现精准的美颜或贴纸跟随效果。

  • 互动视频场景中,需要根据人脸位置进行画面裁剪、人像居中或背景虚化等处理。

  • 视频通话场景中,需要检测对方或本地是否有人脸出现,用于判断用户是否在摄像头前。

注意事项

  • 调用人脸检测接口前,必须先开启美颜功能。通过 startBeautyisOpenBeauty = YES 开启美颜后再调用本接口。
  • 人脸检测功能需要在引擎初始化之后调用,加入房间前后均可调用。
  • 当未检测到人脸信息时,回调中的 faceInfos 为空数组,且回调频率会降低以降低性能开销。
  • 检测结果中的人脸位置信息以视频图像的原始分辨率为坐标系,需要结合图像宽高进行坐标换算。

实现方法

  • 调用 enableVideoFaceDetect 方法可以开启或关闭人脸检测功能。

    人脸检测功能依赖美颜模块,调用本接口前请确保已通过 startBeauty()isOpenBeauty = YES 开启美颜。若美颜未开启,本接口调用无效。

  • 开启人脸检测后,检测结果通过 onNERtcEngineLocalVideoFaceDetectInfoChanged 回调返回,回调信息包括人脸数量、每张人脸的位置信息(如矩形框坐标)、以及当前视频图像的宽高。

示例代码

Object-C// 1. 先开启美颜
  int beautyRet = [[NERtcBeauty shareInstance] startBeauty];
  if (beautyRet == 0) {
      [NERtcBeauty shareInstance].isOpenBeauty = YES;
  } else {
      // 开启美颜失败,处理错误
  }

  // 2. 开启人脸检测
  int ret = [[NERtcEngine sharedEngine] enableVideoFaceDetect:YES];
  if (ret == 0) {
      // 调用成功,等待回调返回检测结果
  } else {
      // 调用失败,处理错误
  }

  // 3. 在 NERtcEngineDelegateEx 回调中获取人脸检测结果
  - (void)onNERtcEngineLocalVideoFaceDetectInfoChanged:(NERtcStreamChannelType)streamType
                                             faceInfos:(NSArray<NERtcFaceDetectPositionInfo *> *)faceInfos
                                            imageWidth:(int)imageWidth
                                           imageHeight:(int)imageHeight {
      if (faceInfos.count > 0) {
          // 检测到人脸,遍历人脸信息
          for (NERtcFaceDetectPositionInfo *info in faceInfos) {
              NSInteger x = info.x;
              NSInteger y = info.y;
              NSInteger width = info.width;
              NSInteger height = info.height;

              // 处理每张人脸的位置信息
          }
      } else {
          // 未检测到人脸
      }
  }
此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 注意事项
  • 实现方法
  • 示例代码