手势识别
所有文档

          AR开放平台

          手势识别

          在DuMix AR中可通过扫描识别特定的手势识别AR特效内容,目前支持的可识别手势为单手手掌(五指伸展)、点赞(拇指向上)、OK(食指和拇指扣环)、比心(食指和拇指交叉)、单手比1(仅食指伸出)等五种手势,使用场景限空间识别IMU场景,不能和slam场景以及2D跟踪场景结合使用。

          Sample case :代码下载

          SDK 最低支持版本:2.2

          百度App 最低支持版本:10.3

          手势识别模型

          手势识别的模型是基于paddlepaddle模型库经由AR算法训练封装而成,开发者在使用手势识别能力前,需要在ar场景包中引入该paddle模型文件gesture.paddle,固定路径为 ar/models/paddle/gesture.paddle

          效果demo中的paddle文件包含了目前支持的五种手势的模型,可直接复用。
          导入模型后,需在target.json文件中配置相关参数。

          "paddle_model":{
              "path":"models/paddle/gesture.paddle"
          }

          path为模型文件所在路径,仅手势paddle可用。

          注意:

          • paddle文件在ar场景包中占用空间较大,请注意资源的分配,不同的算法模型包含的可识别手势不同。
          • 如未使用paddle能力,不要在json中配置paddle模型,因为SDK会根据paddle配置做一些数据准备工作,带来不必要的性能损耗。

          手势识别实现

          LUA 代码参考

          app.on_loading_finish = function()
             --API1:开启手势识别能力 
             PaddleGesture:send_control_msg(1)
          end
          
          --API2:手势识别回调接口
          PaddleGesture.on_gesture_detected = function(mapData)
              local count = mapData['gesture_count']
              resultMap = mapData['gesture_result1']
              result = resultMap['type']
              score = resultMap['score']
              x1 = resultMap['x1']
               y1 = resultMap['y1']
               x2 = resultMap['x2']
               y2 = resultMap['y2']
              if (score < 0.8) then
                  --得分小于0.8的手势弃用
                  return
             end 
            if (result == 2) then
                --当识别到手掌后显示模型
                scene.pod:set_visible(true)
            end
          end

          注意:

          • 手势识别的API详解见:Lua API
          • MapData里为手势的检测结果,包含gesture_count和gesture_result两个字段,gesture_result也为mapdata类型,包含7个字段,其中type字段表示手势类型,是5个固定值,分别对应五种手势。在场景交互脚本里可根据需要取出相应的手势类型,当判断相应手势类型识别成功后执行对应的function()实现逻辑。如果Case里算法模型有更新,type的对应关系以及值是会发生变化和扩充的。
          • gesture_result中的score字段表示手势得分,取出该字段后可在场景交互脚本中控制手势的有效性。
          • x1、y1、x2、y2为相机识别到的手势轮廓(矩形区域对角点坐标)在屏幕上的占比,在未使用接口PaddleGesture:send_control_msg(0)关闭手势识别回调前,会根据手势的移动不断更新这些数据,开发者可根据需要取出这些数据做动态处理。
          • 如果未使用接口关闭手势识别,算法会不断检测手势并返回数据,会对手机的功耗产生影响。
          • 因为安卓手机配置不同,各手机识别一次手势并回调数据的时间间隔也不同,大概范围在几十毫秒到300毫秒以上不等。
          上一篇
          粒子
          下一篇
          Logo识别