用AR Engine手部骨骼跟踪能力实现虚拟手表试戴( 二 )


调用ARHandTrackingConfig接口 , 初始化手部识别 。
mArSession = new ARSession(context);ARHandTrackingConfig config = new ARHandTrackingconfig(mArSession);

  1. 获取到ARhandTrackingconfig后 , 可以设置使用相机的前置或者后置等等一些可选的方法:
Config.setCameraLensFacing(ARConfigBase.CameraLensFacing.FRONT);
  1. 你需要把你获取到的手部识别获取到的config配置到ArSession中 , 然后启动手部识别场景:
mArSession.configure(config);mArSession.resume();
  1. 初始化HandSkeletonLineDisplay类 , 此类是根据手骨架点的坐标来绘制手骨架线:
Class HandSkeletonLineDisplay implements HandRelatedDisplay{//此类需要几个方法//初始化方法public void init(){}//绘制手骨架点的方法,这里需要传入ARHand对象 , 用来获取数据public void onDrawFrame(Collection<ARHand> hands,){//调用getHandskeletonArray()方法用来获取手部关节点坐标数据Float[] handSkeletons=hand.getHandskeletonArray();//把handSkeletons传入到实时更新数据方法中updateHandSkeletonsData(handSkeletons);}//更新骨架点的连接数据 , 在更新任何帧的时候调用此方法public void updateHandSkeletonLinesData(){//用来创建并初始化缓冲区对象的数据存储GLES20.glBufferData(…,mVboSize,…);//用来更新缓冲区对象中的数据GLES20.glBufferSubData(…,mPointsNum,…);}}
  1. 初始化HandRenderManager类 , 此类是来渲染从HUAWEI AREngine获取的数据
Public class HandRenderManager implements GLSurfaceView.Renderer{ //设置ARSession对象 , 用于获取onDrawFrame方法中的最新数据 。Public void setArSession(){ }}
  1. 在HandRenderManager类中 , 初始化onDrawFrame()方法:
Public void onDrawFrame(){//在这个方法中调用了setCameraTextureName(),update()等方法用来更新ArEngine的计算结果//应用在获取到最新数据时来调用此接口 。mSession.setCameraTextureName();ARFrame arFrame = mSession.update();ARCamera arCamera = arFrame.getCamera();//获取人体手部跟踪时返回的跟踪结果Collection<ARHand> hands =mSession.getAllTrackables(ARHand.class);//把获取到的hands对象循环传入更新手势识别信息方法中,进行处理For(ARHand hand:hands){updateMessageData(hand);}}8.最后在展示效果的HandActivity页面,给SurfaceView 设置渲染器 。
mSurfaceView.setRenderer(mHandRenderManager);设置渲染模式mSurfaceView.setRenderMode(GLEurfaceView.RENDERMODE_CONTINUOUSLY);具体实现可参考示例代码 。
了解更多详情>>
访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee
关注我们 , 第一时间了解 HMS Core 最新技术资讯~
【用AR Engine手部骨骼跟踪能力实现虚拟手表试戴】

经验总结扩展阅读