在解释问题之前让我解释一下我的需求。 我期待着手控应用程序。 使用手掌进行导航,使用抓握/拳头进行点击。
目前,我正在与 Openni 合作,这听起来很有前途,并且几乎没有对我的案例有用的示例,因为它在示例中内置了手部跟踪器。这暂时符合我的目的。
我想问的是,
1) 拥有拳头/抓取检测器的最佳方法是什么?
我在提取的 RGB 数据上训练并使用了 Adaboost 拳头分类器,这非常好,但是,它有太多错误检测,无法继续前进。
所以,这里我再提出两个问题
2) 有没有其他好的库能够使用深度数据满足我的需求?
3)我们能否训练自己的手势,尤其是使用手指,因为一些论文提到了 HMM,如果可以,我们如何继续使用像 OpenNI 这样的库?
是的,我尝试使用 OpenNI 中的中间件库,例如抓取检测器,但是它们无法满足我的目的,因为它既不开源也不符合我的需要。
除了我问的,如果你觉得有什么可以帮助我的,我会采纳为好建议。
最佳答案
您不需要训练您的第一个算法,因为它会使事情复杂化。 也不要使用颜色,因为它不可靠(与背景混合并根据光照和视点发生不可预测的变化)
- 假设您的手是最近的物体,您可以简单地 按深度阈值将其分割出来。您可以手动设置阈值,使用最接近的深度直方图区域,或执行 connected component在深度图上首先将其分解为有意义的部分(然后不仅根据其深度而且还根据其尺寸、运动、用户输入等选择对象)。这是连接组件方法的输出:
申请 convex defects从opencv库中寻找手指;
跟踪手指而不是在 3D 中重新发现它们。这将增加稳定性。大约 3 年前,我成功地实现了这种手指检测。
关于opencv - 使用 Kinect 进行手指/手势识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777821/