资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

手势识别

手势识别

在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识别