18

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

我制作了一些反光手套和一个红外 LED 阵列,以及一个 Wii 遥控器。Wii 遥控器进行内部斑点检测并跟踪 4 个红外光点,并通过蓝牙加密狗将此信息传输到我的计算机。

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

替代文字替代文字替代文字

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

手势识别通常是如何实现的?除了任何琐碎的事情之外,我如何编写软件来识别和识别各种手势:各种滑动、圆周运动、字母追踪等。

4

6 回答 6

11

正如我所见,手势识别通常是使用类似于图像识别软件的机器学习技术来实现的。 这是关于在 c# 中进行鼠标手势识别的 codeproject 上的一个很酷的项目。我确信这些概念非常相似,因为您可以将问题减少到 2D 空间。如果你得到一些与此相关的东西,我很乐意看到它。伟大的项目理念!

于 2009-03-19T19:20:15.453 回答
8

一种看待它的方法是作为压缩/识别问题。基本上,您想要获取一大堆数据,丢弃大部分数据,然后对剩余部分进行分类。如果我这样做(从头开始),我可能会进行如下操作:

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

看到你的照片后(每手两点,而不是四点,多哈!)我将上面的修改如下:

  • 对对进行 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)
    
于 2009-03-19T19:45:42.023 回答
1

如果有人感兴趣,可以看一下这种技术所做的事情的视频吗?

Pattie Maes 演示第六感 - TED 2009

于 2009-03-21T05:13:11.073 回答
0

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

于 2009-03-22T09:02:17.537 回答
0

Err.. 过去一年左右我一直在研究手势识别,但我不想说太多,因为我正在尝试为我的技术申请专利 :) 但是......我们有一些运气使用自适应提升,尽管你所做的看起来根本不同。你只有 4 个数据点要处理,所以我认为你真的不需要“减少”任何东西。

我要研究的是像 Flash 这样的程序如何将手绘的圆圈变成一个实际的圆圈。似乎您可以在大约一秒钟的时间内跟踪这些点,然后以某种方式“平滑”路径,然后您可能可以通过硬编码您的手势(如果您使它们足够简单)而逃脱。否则,是的,您将需要使用学习算法。神经网络可能会起作用……我不知道。只是抛出想法 :) 也许看看OCR是如何完成的......甚至是霍夫变换。在我看来,这是一个识别形状的问题,而不是识别手势的问题。

于 2009-03-21T05:03:02.143 回答
-1

我不太精通这类数学,但我在某处读到人们有时使用马尔可夫链隐马尔可夫模型来进行手势识别。

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

于 2009-03-21T04:11:22.893 回答