在多点触控环境中使用哪些方法/算法进行手势识别?

时间:2009-03-19 19:13:55

标签: gesture-recognition wiimote

在多点触控环境中,手势识别如何工作?使用哪些数学方法或算法来识别或拒绝可能的手势数据?

我创造了一些反光手套和一个红外LED阵列,再加上一个Wii遥控器。 Wii遥控器进行内部斑点检测并跟踪4点红外线,并通过蓝牙适配器将此信息传输到我的计算机。

这是基于Johnny Chung Lee's Wii Research。我的精确设置与荷兰的研究生一样here。我可以轻松地在2d空间中跟踪4个点的位置,并且我已经编写了我的基本软件来接收和可视化这些点。

alt text alt text alt text

荷兰学生通过基本的捏合点击识别获得了很多功能。如果可以的话,我想更进一步,并实施其他一些手势。

手势识别通常如何实施?除了任何微不足道的事情,我怎么能编写软件来识别和识别各种手势:各种滑动,圆周运动,字母跟踪等。

6 个答案:

答案 0 :(得分:11)

正如我所看到的那样,手势识别通常使用类似于图像识别软件的机器学习技术来实现。 Here's a cool project on codeproject about doing mouse gesture recognition in c#。我确信这些概念非常相似,因为您可以将问题缩小到2D空间。如果你对此有所了解,我很乐意看到它。伟大的项目理念!

答案 1 :(得分:8)

查看它的一种方法是作为压缩/识别问题。基本上,您想要获取大量数据,丢弃大部分数据,并对其余数据进行分类。如果我这样做(从头开始),我可能会按照以下步骤进行:

  • 使用滚动历史记录窗口
  • 获取起始帧中四个点的重心,保存它,并将其从所有帧中的所有位置中减去。
  • 将每个帧分为两个部分:星座的形状和它的CofG相对于最后一帧的移动。
  • 保存最后一帧的绝对CofG
  • 一系列CofG更改为您提供滑动,波浪等。
  • 星座变形系列为你提供捏合等。

看到你的照片后(每只手两个点,而不是一个点上的四个点,doh!)我会修改上面的内容如下:

  • 对成对进行CofG计算,但需要注意:
    • 如果有四个点可见,则选择对以最小化内对距离的乘积
    • 如果有三个点可见,最近的两个是一对,另一个是另一个
    • 使用先前/后续帧来覆盖需要时
  • 而不是星座,你有一个嵌套的距离/方向对结构(即手之间有一个D / O,每只手还有一个D / O)。
  • 将完整的缩小数据传递给每个手势的识别器,并让他们理清他们关心的内容。
  • 如果你想变得可爱,可以做一点DSL来识别模式,并写下如下内容:

    fire when
        in frame.final: rectangle(points) 
      and
        over frames.final(5): points.all (p => p.jerk)
    

    fire when
        over frames.final(3): hands.all (h => h.click)
    

答案 2 :(得分:1)

如果有人对此类技术所采取的措施的视频?

Pattie Maes demos the Sixth Sense - TED 2009

答案 3 :(得分:0)

我对这种类型的数学并不十分熟悉,但我读过某些地方,人们有时会使用Markov ChainsHidden Markov Models进行手势识别。

也许在计算机科学这方面有更多背景的人可以进一步阐明它并提供更多细节。

答案 4 :(得分:0)

呃..我在过去一年左右的时间里一直致力于手势识别,但我不想说太多,因为我正试图为我的技术申请专利:)但是......我们已经虽然你所做的事情看起来有根本的不同,但我还是对自适应性提升感到满意。你只需要处理4个数据点,所以我认为你真的不需要“减少”任何东西。

我要研究的是像Flash这样的程序如何将写意绘制的圆圈变成实际的圆圈。看起来你可以跟踪持续时间大约一秒的点,然后以某种方式“平滑”路径,然后你可能可以通过硬编码你的手势(如果你让它们变得足够简单)。否则,是的,您将要使用学习算法。神经网可能有用......我不知道。只是抛出想法:)也许看看OCR是如何完成的......甚至是Hough transforms。在我看来,这比识别手势更能识别形状。

答案 5 :(得分:0)

我看过的大多数简单的手势识别工具都使用基于矢量的模板来识别它们。例如,您可以将右滑动定义为“0”,将复选标记定义为“-45,45,45”,将顺时针圆圈定义为“0,-45,-90,-135,180,135,90,45, 0“,等等。