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

手势识别

手势识别

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