所有文档

          人脸识别

          3D肢体关键点SDK-原生Android

          1 简介

          当前3D肢体SDK共计输出16个人体关键点,点位顺序以MPII顺序为参考,具体点位顺序0-右脚踝、1-右膝、2-右股、3-左股、4-左膝、5-左脚踝、6-盆骨、7-胸部、8-脖子、9-头部、10-右手腕、11-右手肘、12-右肩、13-左肩、14-左手肘、15-左手腕

          当前SDK输出为人体16个关键点的3D坐标,其中x,y为屏幕坐标归一化值,z为相对于人体根节点(人为规定关键点6为根节点)的相对深度,单位为mm。

          2 快速入门

          • 系统:支持 Android 5.1到 Android 10系统。需要开发者通过minSdkVersion来保证支持系统的检测。
          • CPU架构:armeabi-v7a,arm64-v8a
          • 硬件要求:要求设备上有相机模块。
          • 网络:支持WIFI及移动网络,移动网络支持使用NET网关及WAP网关(CMWAP、CTWAP、UNIWAP、3GWAP)。

          3 SDK集成步骤

          第1步:添加授权文件

          您可以通过“合作咨询”联系相关接口人申请授权。

          • 将LICENSE文件dumixar.license放置于工程assets目录下

          第2步:导入相关库

          • 将 dumixar.jar 拷贝到您的工程的 libs 文件夹中,并检查编译依赖。 将 arm64-v8a 和 armeabi-v7a 文件夹拷贝到 Android Studio 工程src/main/jniLibs目录中。
          • 确认person_detector.nb,person_cls.nb,3dpose.nb三个模型文件的路径位置
          • 确认包名为申请时填写的包名

          第3步:配置Manifest文件,添加必要的权限

          <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.READ_PHONE_STATE" />

          第4步:初始化

          SDK初始化分为两步

          • SDK鉴权

          注意:SDK的初始化必须要最先进行

          使用能力前,务必先调用Authenticator.init初始化,否则能力无法正常使用。初始化示例如下

          // 需要预先加载动态库,否则将无法初始化
          System.loadLibrary("auth");
          Authenticator.init(getApplicationContext(), new IAuthCallback() {
              @Override
              public void onSuccess() {}
              @Override
              public void onError(String errorMessage, int featureCode) {}
          });
          • SDK加载模型

          目前提供两种初始化方式,从SD卡路径加载模型以及从assets路径加载模型,接口如下

          /** 从SD卡初始化
           * @param detectDir 检测模型路径
           * @param clsDir 分类模型路径
           * @param poseDir 肢体点模型路径
           **/
          public static native int initPose(String detectDir, String clsDir, String poseDir);
          
          /** 从asstes初始化
           * @param detectDir 检测模型路径
           * @param clsDir 分类模型路径
           * @param poseDir 肢体点模型路径
           **/
          public static native int initPoseFromAsset(String detectDir, String clsDir, String poseDir);

          调用示例如下

          // 从SD卡路径初始化,下面示例中模型文件位于SD卡/sdcard/HumanPose/mdlModels文件夹下
          ARMdlHumanPoseJNI.initPose("/sdcard/HumanPose/mdlModels", "/sdcard/HumanPose/mdlModels", "/sdcard/HumanPose/mdlModels");
          // 从asstes路径初始化,下面示例中模型文件位于工程assets中mdlModels文件夹下
          ARMdlHumanPoseJNI.setAssetManager(getAssets());
          ARMdlHumanPoseJNI.initPoseFromAsset("mdlModels", "mdlModels", "mdlModels");

          第5步:3D肢体关键点预测

          肢体点预测接口输入数据以nv21图像格式为准

          /** 从asstes初始化
           * @param data 摄像头nv21数据
           * @param width 图像宽
           * @param height 图像高
           * @param angle 图像顺时针旋转为正所需的角度
           * @param isFront 是否前置
           * @param bodyKeyPoints 3D肢体点返回数组,大小为16 * 3 * 人数, 格式为x0,y0,z0,x1,...
           * @return int 返回值为人数
           **/
          public static native int predictPose(byte[] data, int width, int height, int angle, boolean isFront, float[] bodyKeyPoints);

          调用示例如下:

          int num = ARMdlHumanPoseJNI.predictPose(nv21, previewSize.getWidth(), previewSize.getHeight(), 90, iFront, kpnts);

          返回的num为人数,kpnts大小为num*16*3

          第6步:资源释放

          SDK 使用结束后,应进行资源释放,以避免内存泄露

          // 鉴权模块资源释放
          Authenticator.release();
          // SDK模块资源释放
          ARMdlHumanPoseJNI.releasePose();

          4 关于Demo展示

          本SDK附带提供一个调用SDK及展示SDK 效果的基础Demo,在Demo中会有2D可视化及3D可视化两个展示方式:

          • 2D展示为取3D关键点中的XY屏幕坐标进行可视化,与画面中人物关键点位置匹配
          • 3D展示为在SceneKit 3D坐标系中对3D关键点的展示,由于3D坐标系与屏幕坐标系无法统一对应,所以Demo中展示时对3D关键点的坐标进行了缩放,且在3D坐标系中无法与2D屏幕画面中的人物关键点匹配位置。
          • 3D展示视图中触控屏幕可对坐标系进行旋转,以查看不同角度的人物展示。
          上一篇
          3D肢体关键点SDK-原生iOS
          下一篇
          3D肢体关键点SDK-Unity版iOS