所有文档

          人脸识别

          人脸表情动捕驱动SDK-Android


          本文档主要介绍SDK集成和接口调用。在使用本文档前,建议您先了解相关产品简介,并已经开通了应用授权,申请并下载好相关SDK文件。

          1. 快速入门

          1.1 支持的系统和硬件版本

          • 系统:支持 Android 4.4(API Level 19)到 Android 10(API Level 29)系统。需要开发者通过minSdkVersion来保证支持系统的检测。
          • CPU架构:armeabi-v7a,arm64-v8a
          • 硬件要求:要求设备上有相机模块,陀螺仪模块。CPU 4核及以上,内存2G及以上。
          • 网络:支持WIFI及移动网络,移动网络支持使用NET网关及WAP网关(CMWAP、CTWAP、UNIWAP、3GWAP)。

          1.2 开发包说明

          sdk_output.zip
              |- sdk                           // 包括AR SDK能力所依赖的aar包
              |- dumixdemo                     // demo工程(运行demo工程时,需使用正式license及applicationid)
              |- dumixcam.apk                  // 全能力验收apk包括
              |- doc                           // 说明文档(包括美妆,美型,)

          SDK提供的dumixdemo工程以Android Studio方式提供。

          2 SDK集成步骤

          2.1 将能力的aar包导入到工程

          • 业务层根据申请的能力,会生成多个能力对应的aar。
          • 将能力对应的aar拷贝到 Android Studio 工程src/main/jniLibs目录中,并在工程内的build.gradle添加依赖。

          2.2 配置Mannifest文件,添加必要的权限

          java
              <uses-permission android:name="android.permission.CAMERA" />
              <uses-permission android:name="android.permission.INTERNET" />
              <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
              <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
              <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
              <uses-permission android:name="android.permission.RECORD_AUDIO" />
              <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
          
              <uses-feature android:name="android.hardware.camera" />
              <uses-feature android:name="android.hardware.camera.autofocus" />

          2.3 初始化相关参数

          创建完应用后,将申请好的license文件放到您应用的assets目录中,例如:

          /src/main/assets/

          注意:切勿修改license文件名称:dumixar.license

          2.4 Proguard配置

          在Proguard配置文件中增加:

          -keep class com.baidu.ar.** {*;} 
          
          -keep interface com.baidu.ar.** {*;} 
          
          -keep class com.baidu.aip.** {*;} 

          2.5 SDK初始化及算法模型设置

          2.5.1 DuMixController说明

          DuMixController对象,是AR SDK统一对外输出接口,基于该对象,可以完成对AR SDK环境初始化和各种能力调用。

          2.5.2 特效相机算法模型初始化

          java
              // 静态初始化算法模型
              DefaultParams defaultParams = new DefaultParams();
              // path支持sdcard路径或assets路径
              defaultParams.setMdlAlgoModelPath(path); // mdl算法模型路路径
              defaultParams.setFaceAlgoModelPath(path); // 人脸算法模型路径
           
              // 动态初始化单个算法模型 需在mDuMixController设置成功后调用
              mDuMixController.setMdlModelPath(path)

          依赖算法模型说明: | 能力项 | 支持机型 | 模型目录 | | :----------- | :--------- | :------------------- | | 人脸算法模型 | 全机型 | faceModels |

          2.5.3 启动 ar

          java
              mDuMixController.setup(mDuMixInput, mDuMixOutput, mDuMixCallback);

          2.5.4 Camera 绑定的SurfaceTexture 传给 DuMixController

          AR增强内容的融合依赖Camera数据

          将Camera 绑定的SurfaceTexture作为DumixInput参数,传给DuMixController类作为AR输入

          DumixOutput对象会返回一个SurfaceTexture ,作为与AR内容融合后输出并上屏渲染

          在demo中也实现基于SurfaceHolder进行渲染的上屏实现,参考(SurfaceHolderActivity.java)

          注:关于Camera功能的操作,Demo内有Camera相关操作的CameraManager封装,开发者可以参考使用。

          2.5.5 DuMixInput: AR输入参数类

          java
              // 输入纹理的SurfaceTexture,如果为null,则内部创建
              private SurfaceTexture mInputSurface;
              // 输入纹理的宽
              private int mInputWidth = 0;
              // 输入纹理的高
              private int mInputHeight = 0;

          2.5.6 DuMixOutput: AR返回参数类

          java
              // ar绘制目标,用于将最终绘制完的图像返回,支持SurfaceTexture,SurfaceHolder方式返回
              private Object mOutputSurface;
              // 如果mTargetSurface是SurfaceTexture,则此参数有效,设置为true表示需要在使用前先detachFromGLContext
              private boolean mNeedDetach = false;
              // 返回目标的宽高
              private int mOutputWidth;
              private int mOutputHeight;

          2.5.7 DumixCallback回调:

          主要处理AR环境是否初始化成功,包括setup是否成功,内容case切换状态。 其中如果要使用AR人脸特效能力,必须初始化美型,美妆默认配置arFilterInit文件。

          java
              private DuMixCallback mDuMixCallback = new DuMixCallback() {
                  @Override
                  public void onSetup(boolean b, DuMixInput duMixInput, DuMixOutput duMixOutput) {
                      // result为ar启动返回状态,返回true时才可以对arsdk 其他接口进行调用
          			if(result){
                 		 // 画质优化,美型,美妆,基础美颜的默认管线搭建。业务方必须设置,否则会造成部分功能不可用
                		  mDuMixController.updateFilterCase("/sdcard/arresource/arFilterInit");  
             			 }
                  }
          
                  @Override
                  public void onCaseCreate(boolean b, String path, String s1) {
                     // 加载case是否成功
                  }
          
                  @Override
                  public void onCaseDestroy() {
                      arLog("onCaseDestroy");
                  }
          
                  @Override
                  public void onRelease() {
                      arLog("onRelease");
                  }
          
                  @Override
                  public void onError(DuMixErrorType duMixErrorType, String s, String s1) {
                     // duMixErrorType 错误状态信息回调
                  }

          2.5.8 人脸信息回调

          通过此回调信息能获取人脸状态信息及人脸跟上跟丢信息。如何进行特征点的获取及绘制可以参考BaseActivity类

          java
          IFace face = mDuMixController.getARProxyManager().getFaceAR();
          face.setFaceListener(new FaceListener() {
          	@Override
          	public void onFaceResult(final Object resultModel) {
                  // 返回人脸特征点及跟上跟丢标识等 参考FaceResultData
                  if (resultModel instanceof FaceResultData) {
          		}
          	}
          
          	@Override
          	public void onStickerLoadingFinished(List<String> triggerList) {
          	    // 显示动作提示UI的内容
          	}
          
          	@Override
          	public void onTriggerFired(final String triggerName) {
              	// 命中triggerName
          	}	
            });

          3 SDK能力接口调用说明

          3.1 加载case内容:

          java
           /**
           * casepath: case的路径(仅支持sdcard路径)
           * caseId:case描述信息,可用于统计相关
           * /
          mDumixController.loadcase(String casepath,String caseId)

          说明:

          1. case类型的内容可实现人脸贴纸、动漫脸、人脸小游戏、特效滤镜等创意内容,也可支持手势识别触发、人脸表情触发等交互类特效,具体请参考已授权产品能力的说明。
          2. case包内有特效素材,人脸美化参数,交互逻辑代码等,具体可参考相关素材制作规范文档。

          3.2 清空case

          mDumixController.clearCase();

          3.3 AR内置消息处理

          此函数callback主要处理接收lua发送的内部消息进行处理,主要包括切换camera消息,打开控制浏览器url打开

           mDuMixController.setDefinedLuaListener(new DefinedLuaListener() {
              @Override
              public void onRequireSwitchCamera(int cameraFace) {
                         // camera切换消息
              }
              @Override
              public void onOpenUrl(String url, int type, HashMap<String, Object> more) {
                      // case打开url入口
              }
           });

          3.4 内容Case与业务层消息通信

          接收内容case内的回调消息

           // LuaMsgListener 消息回调
          mDuMixController.setLuaMsgListener(LuaMsgListener listener)
           
           // 实例:
          LuaMsgListener luaListener = new LuaMsgListener() {
             @Override
             public List<String> getMsgKeyListened() {
                // 过滤监听lua向上层发送包含event_id字段的消息
                List<String> targetMsgs = new ArrayList<String>();
                targetMsgs.add("event_id");
                return targetMsgs;
               }
             @Override
             public void onLuaMessage(HashMap<String, Object> hashMap) {
                // click_me为需要处理业务层的消息,并进行处理
                if (hashMap.get("event_id").toString().equals("click_me")) {
                  // todo  ..
                }
           }

          业务层向内容case发送消息

          // 通过此函数可以向内容Case内发送自定义消息。msg2lua为haspmap, 内容Case可以根据此参数进行解析并处理 
          mDuMixController.sendMsg2Lua(HashMap<String, Object> msg2lua)
           
          // 实例:
          /**
           * 业务层向case lua内发消息
           * 接收消息 参考 /sdcard/arcase_list/bridge/ar..
           */
          public void sendMessage2lua() {
             // 业务层向lua层发送消息
             HashMap<String, Object> luaMap = new HashMap<>();
             luaMap.put("event_name", "click_me");
             HashMap eventDataMap = new HashMap();
             eventDataMap.put("msg_id", "自定义message");
             luaMap.put("event_data", eventDataMap);
             mDuMixController.sendMsg2Lua(luaMap);
          }

          3.5 拍摄

           //path: 拍照后图片文件保存路径
          mDuMixController.takePicture(path, new PhotoCallback() {
                      @Override
                      public void onPictureTake(final boolean result, final String filePath) {
                      //result 拍照状态, filePath 返回路径
                      }
                  });

          3.6 录制

           //path: 拍照后图片文件保存路径 mRecordMaxTime :录制最大时间
          mDuMixController.startRecord(path, mRecordMaxTime, new RecordCallback() {
                      @Override
                      public void onRecorderStart(boolean b) {
                      // begin 开始录制
                      }
          
                      @Override
                      public void onRecorderProcess(int i) {
                          // 录制进度 百分比
                      }
          
                      @Override
                      public void onRecorderComplete(final boolean b, final String result) {
                      // result b ,result:file path
                      }
                  });

          3.7 停止录制

          mDuMixController.stopRecord();

          4 Demo说明

          • 基础功能:是对SDK能力接口调用展示,包括拍摄器初始化,加载内容CASE,人脸美颜特效展示等。开发者可以基于此demo进行快速集成到工程项目中。
          • 案例展示:各算法特效应用示例;开发者可快速查看对应算法的应用效果。
          • 算法测试:新算法接入SDK的开发过程示例及效果展示;需要扩展算法能力的开发者,可根据示例中的代码快速进行算法接入。
          • 运行demo时,需将正式的license替换到assets目录,且applicationID 和license对应。
          • demo中的实例包含了多个相关SDK产品的全部接口。如用户申请的license不包含其能力,调用接口时没有效果。如:license不包含美妆能力,在demo调用了美妆接口时无效果。

          5 注意事项

          1. DuMix AR引擎正常运行依赖必要的硬件基础,因此对硬件有一定的要求,对不满足的手机采用“黑名单”策略,也就是命中“黑名单”的手机会被屏蔽,不能正常使用DuMix AR。屏蔽依据的参数主要有内存大小,CPU核数,安卓版本等等手机基本信息;还有针对特殊机型的屏蔽,依据手机型号。
          2. DuMixAR SDK的 minSdkVersion为 19;targetSdkVersion 建议设为 24。
          上一篇
          人脸表情动捕驱动SDK-iOS
          下一篇
          人脸表情动捕驱动SDK-Windows Unity