【发布时间】:2014-09-03 05:14:50
【问题描述】:
我尝试通过主感应传感器检测两个人紧紧地拥抱或背靠背。目前我可以同时跟踪两个人,当他们站在远处时,他们的骨骼数据。但如果他们紧紧地拥抱或背靠背,他们的骨架会合二为一。谁能告诉我应该怎么做才能检测到两个人之间的动作(拥抱/背对背)?
平台:windows 7 OpenNI 版本:1.5.7 NITE 版本:1.5.2
谢谢。
【问题讨论】:
标签: openni
我尝试通过主感应传感器检测两个人紧紧地拥抱或背靠背。目前我可以同时跟踪两个人,当他们站在远处时,他们的骨骼数据。但如果他们紧紧地拥抱或背靠背,他们的骨架会合二为一。谁能告诉我应该怎么做才能检测到两个人之间的动作(拥抱/背对背)?
平台:windows 7 OpenNI 版本:1.5.7 NITE 版本:1.5.2
谢谢。
【问题讨论】:
标签: openni
我不确定单独使用 OpenNI 场景分割是否可行,因为正如您自己观察到的,两个人彼此靠近会导致轮廓合并。
您需要自己围绕这个合并问题运行自己的算法。 可能有几种不同的方法可以解决这个问题。
下面是一些暂时想到的 hacky 想法:
想法 #1
使用 OpenNI 的场景分割功能并分析用户像素,即使它们已合并。如果分析大纲。通过查看边缘(最外层像素)和质心之间的距离,您应该发现四肢(最大距离),即手/脚和头部。如果你的 blob 有两个头,可能是两个人在拥抱。
想法 #2
您知道,当用户靠近时,他们会合并为一个用户,这意味着来自 OpenNI 的新用户/丢失用户事件触发器。最重要的是,您可以跟踪每个用户的 CoM(质心,在 OpenNI 中可用)。如果两个用户之间的距离大大减小,并且紧随其后的是一个新的用户事件(合并的 blob),它的边界框比两个用户中的每个用户都大,那么很可能你的用户正在拥抱或非常彼此靠近。
想法 #3
您可以仅为每个用户跟踪上半身骨架轮廓并检测“拥抱”手势。您可以从初始粗略姿势检测开始,其中手臂的角度在特定阈值内。您可以使用DTW 来检测手势,而不是检测姿势。如果两个用户中的至少一个在 OpenNI 检测到“融合”用户之前触发了这个姿势/手势,那么您可能会检测到一个拥抱。
想法 #4
使用上面的一些想法:合并的 blob 将大于任何一个成员,并且将在用户数量减少后检测到这一事实,您可以在属于 rgb 像素上使用拥抱检测 haar 级联新检测到的合并 blob 以确认拥抱。
其中一些想法会比其他想法更容易实施,但重要的是要避免误报。理想情况下,您将拥有一个简单的场景(背景中没有复杂的物体)和良好的照明(人工冷,最好是远离红外范围的任何东西(阳光、白炽灯等)),让您的生活更轻松。我观察到,在复杂的背景下,有时甚至单个用户也可以与背景对象合并。
【讨论】: