(个人)实时交互的太极拳学习系统创新实训第二周(一)

首先介绍一下DTW的思想

假设现在有一个标准的参考模板R,是一个M维的向量,即R={R(1),R(2),……,R(m),……,R(M)},每个分量可以是一个数或者是一个更小的向量。现在有一个测试的模板T,是一个N维向量,即T={T(1),T(2),……,T(n),……,T(N)}同样每个分量可以是一个数或者是一个更小的向量,注意M不一定等于N,但是每个分量的维数应该相同。算法的目的是要计算出测试模板T和标准模板R之间的距离。因为两个模板长度不同,所以其对应匹配的关系有很多种,我们需要找出其中距离最短的那条匹配路径。参考链接:点击打开链接

结合我们的项目,标准的参考模板就是提前录好的一整段杨氏太极拳动画,测试的模板就是实时用动捕设备采集的数据。首先只考虑一个关节的匹配。那么N应该就是帧数,测试模板T中每个分量是一个三维向量(x,y,z),通过这种动态规划的算法,首先得到一个M×N的距离矩阵,然后得到损失矩阵,进而得到模板之间的距离,并通过最终的距离给出这一关节的分数。
因为我们是要实时交互的,所以算法的运行速度是一个很大的问题,查阅资料,发现有一些加速DTW的算法,待我实现DTW之后会尝试一下。

问题

在实现算法的过程中,意识到一个问题:测试模板的最终帧该如何确定呢?即我在何时对该帧及以前的帧序列进行一次DTW。
目前我有这么几个想法:
①整套太极打完,以整套动作为一个序列去和标准动作匹配。这个很省事,但是会有延时,而且这么大的向量去做递归,感觉内存会爆炸。
②分招式进行匹配。这个我觉得可行度很高,但是要手动给标准动作找出分界点,感觉有点不智能呢。
③在用户打太极的过程中,每隔t秒,把当前帧与标准动作序列帧进行匹配,找到最相似的一帧,从而截取出标准模板。但是这个方法一是会增大计算量,二是容易出错(可能最相似的那一帧,并不是我们想要的那一帧)。

进一步工作

1、在VS里用C++实现DTW算法,使其可以处理数据,可以先用一个关节的数据来试试。然后优化。
2、诺亦腾设备双脚的传感器出了一些问题,要花时间修复一下。。。


猜你喜欢

转载自blog.csdn.net/qq_33244381/article/details/79916521