开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
人脸识别

    手势识别跟踪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)

    依赖算法模型说明: | 能力项 | 支持机型 | 模型目录 | | :----------- | :--------- | :------------------- | | 手势 | 全机型 | dlModels/gesture |

    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 错误状态信息回调
            }

    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
    下一篇
    人脸小游戏