体感操控演示文稿系统的设计与实现

2022-09-10

在会议、演讲或授课等活动中, 演示文稿作为重要的辅助工具, 应用范围越来越普遍, 但是对于演示文稿的操作与控制还仅限于通过鼠标或键盘来实现, 这在一定程度上限制了演讲者可以活动的范围, 有时甚至减少了演讲者与听众的互动, 或者降低了所讲述内容的质量。虽然可以使用激光笔, 但激光光点会扰乱听众的视线。为了使演讲者能够更加自然、友好的自由控制演示文稿, 使用手势对其控制。手势含有大量的交互信息, 且提供了自然、直接的人机交互方式, 同时也符合人类的行为习惯。

一、设计

Kinect是一种3D体感摄影机, 它能够准确地追踪人体骨骼, 识别人体的动作并实时处理。人可以站在Kinect前做出各种动作来与计算机交互, 而不需要佩带或接触任何输入设备。通过Kinect体感设备与演示文稿的结合, 提高了演讲者对演示文稿的灵活控制, 进而提高了演讲效果。

系统以Kinect以及Kinect for windows软件开发包 (Software Development Kit, SDK) 为基础。Kinect SDK中包括Kinect的驱动程序以及一些接口 (API) , 提供彩色图像视频流、深度图像视频流、骨骼跟踪数据、音频数据流、及语音识别等API, 系统选择C#作为开发语言, 开发包使用版本是SDK1.7。

Kinect SDK可以提供可视范围内2个人全身骨骼数据, 每秒产生约30帧骨骼数据, 可识别6个用户的中心位置, 提供20个骨骼关节点三维坐标, 如图1所示, 包括头部 (HEAD) 、左右手 (HAND LEFTRIGHT) 、左右腕 (WRIST LEFTRIGHT) 、左右肘 (ELBOW LEFTRIGHT) 、左右肩 (SHOULDER LEFTRIGHT) 、肩部中央 (SHOULDER CENTER) 、脊椎 (SPINE) 、臀部中央 (HIP CENTER) 、左右臀 (HIP LEFTRIGHT) 、左右膝 (KNEE LEFTRIGHT) 、左右踝 (ANKLE LEFTRIGHT) 、左右脚 (FOOT LEFTRIGHT) 这20个点, 但无法识别面部朝向, 也不能提供手指级别的跟踪。

骨骼跟踪是Kinect NUI API中重要的组成部分, SDK中关节点数据是以骨骼跟踪数据流提供的, 是以注册事件模型的获取的, 首先注册SkeletonFrameReady事件, 每当事件触发时, 将会调用SkeletonFrameReadyEventArgs来获取数据帧。当Kinect产生了骨骼数据流就会调用注册的事件, 以SkeletonFrameReadyEventArgs对象的OpenSkeletonFrame () 方法获取骨骼数据帧。

每一帧数据保存在Skeleton对象中, Skeleton表示一帧骨骼数据, 其中保存着20个三维点 (Joint数据类型的数据) , 通过Skeleton对象调用Joints[JointType.Head]方法就可以获取头部点的Joint数据, 这个枚举型数据Joint包含了头部点的X, Y, Z的值。下图表示从Kinect SDK中获取的原始骨骼关节点数据, 每个关节点具有三维信息, 也被称作三维关节点数据, 图2是获取到一帧骨骼数据的部分关节点三维数据。

二、实现

实现手势识别, 必须事先定义手势的含义, 根据演示文稿中常用的打开、最大化、第一页、最后一页、上一页、下一页以及关闭功能, 定义了7种手势, 如表1所示。

三、手势识别

系统的手势识别方法无需进行前期手势的分割, 而是直接通过分析骨架节点之间的位置关系以及左右手的运动信息实现对手势的识别, 并将识别结果应用到对PPT的全自动控制。

根据表1定义的手势, 只需要用到其中3个骨架节点信息, 即左手位置信息、右手位置信息以及头部位置信息, 分别用LeftHand、RightHand和Head表示。现在可通过判断左右手与头部之间的位置关系以及左右手的运动信息实现对手势的识别。设定人体离Kinect传感器1m左右, 则当LeftHand.Y>Head.Y且RightHand.Y>Head.Y时, 识别出的手势为“Left Right Up”;当LeftHand.YHead.Y时, 识别出的手势为“Right Up”;当LeftHand.Y>Head.Y且RightHand.Ythreshold2时, 识别出的手势为“Left Right Straight”;当RightHand.X-LeftHand.Xthreshold3时, 识别出的手势为“Right To Right”;设经过0.5s以后右手位置为NextLeftHand, 当NextLeftHand.X-LeftHand.X>threshold4时, 识别出的手势为“Left To Left”。经过试验验证, 当Kinect传感器距离人体1m时, 以上阈值threshold1取400、threshold2取20、threshold3取100较为合适。

四、PPT控制

根据手势识别的结果, 只有当识别的手势为“Left Right Up”时, 才调用MFC中的ShellExecuteA () 函数打开PPT文件, 再调用FindWindowA () 函数获取该文件的句柄, 设为hwnd, 这样就可以通过PostMessage () 函数向该PPT句柄发送相应的消息实现对PPT的控制。当手势为“Left Right Straight”时, 发送VK_F5消息以最大化PPT;当手势为“Right Up”时, 发送VK_HOME消息将PPT翻到第一页;当手势为“Left Up”时, 发送VK_END消息将PPT翻到最后一页;当手势为“Left To Left”时, 此时需要判断PPT是否在第一页, 若不是, 则发送VK_LEFT消息将PPT上翻一页;当手势为“Right To Right”时, 此时需要判断PPT是否在最后一页, 若不是, 则发送VK_LEFT消息将PPT下翻一页;当手势为“Left Right Combine”时, 发送VK_MENU和VK_F4消息关闭PPT文件。

摘要:本文以kinect体感设备为工具, 个人电脑为平台, 通过人体的动作对演示文稿进行操控, 改变传统的操作模式, 实现动态的人机交互, 从而提高了对演示文稿的灵活控制。

关键词:Kinect,手势,识别

上一篇:油砂山改善水井射孔方式实验实施效果评价下一篇:新课改下初中美术教学现状及措施