- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想用kinect在python中做手势识别。
在阅读了一些理论之后,我认为最好的方法之一是使用隐马尔可夫模型 (HMM)(baum welch 或某些 EM 方法)和一些已知的手势数据进行无监督学习,以获得一组经过训练的 HMM(一个对于我想要识别的每个手势)。
然后我会进行识别,将观察数据的最大对数似然(使用维特比?)与训练集中的 HMM 相匹配。
例如,我有一些数据(右手的坐标x,y,z)用kinect设备记录了一些手势(打招呼,打拳,用手做一个圆圈)并且我做了一些训练:
# training
known_datas = [
tuple( load_data('punch.mat'), 'PUNCH' ),
tuple( load_data('say_hello.mat'), 'HELLO' ),
tuple( load_data('do_circle_with_hands.mat'), 'CIRCLE' )
]
gestures = set()
for x, name in known_datas:
m = HMM()
m.baumWelch(x)
gestures.add(m)
然后我对观察到的新数据执行最大 loglik 的识别,并为每个训练有素的 HMM 选择之前保存的具有最大 loglik 的手势:
# recognition
observed = load_data('new_data.mat')
logliks = [m.viterbi(observed) for m in gestures]
print 'observed data is ', gestures[logliks.index(max(logliks))]
我的问题是:
最佳答案
首先:这是一个非常特殊的问题,这里需要一位机器学习专家。不幸的是,在堆栈交换站点中还没有 ML 等价物……也许有一天会有一个。 :)
我猜你的方法是有效的,只是一些评论:
您刚刚在此处使用 HMM()
实例化的 HMM
类需要精心设计,以便 HMM 的结构可以表示类似于手势的某物。 HMM 在它们之间具有状态 和转换,那么您将如何为手势定义 HMM?我很肯定这是可能的(甚至认为这是一个好方法),但它需要一些思考。也许这些状态只是 3D 立方体的角,对于您识别的手势的每个观察点,您选择这个立方体最近的角。然后 BW 算法可以通过您的训练数据来近似转换可能性。但您可能需要选择更细粒度的状态模型,可能是 n * n * n 体素网格。
Viterbi 算法 给您的不是模型的可能性,而是给定序列观察的最可能状态序列。 IIRC 你会选择前向算法来获得给定模型的给定观察序列的概率。
我假设,给定一个训练有素且不太复杂的 HMM,您应该能够实时识别手势,但这只是一个有根据的猜测。 :)
关于python - 使用python : hmm learning使用kinect进行手势识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490462/
我对隐马尔可夫模型有疑问。我正在用 C# 在 Kinect 上编写一个用于手势识别的应用程序(简单的手势,如滑动、波浪、圆圈等)。我写了一个手势记录系统,之后我创建了一个特征提取器来计算点之间的速度,
在量子物理实验的背景下,我有兴趣估计描述我的实验的隐马尔可夫模型的一些参数。我知道用于估计 hmm 的所有参数的 Baum-Welch 算法。然而,我只对估计转移矩阵感兴趣,因为我有额外的数据来估计发
我在 HMM 上收到了这个作业问题,我已经解决了。我想知道我是否正确。问题是: Suppose a dishonest dealer has two coins, one fair and one b
我正在为 HMM 实现前向算法,以计算给定 HMM 发出给定观察序列的概率。我希望我的算法对下溢具有鲁棒性。我不能在对数空间中工作,因为正向算法需要概率的乘法和加法。避免下溢的最佳方法是什么? 我已经
我已经从孤立字符的许多图像中提取了特征(例如梯度、相邻像素权重和几何属性。如何使用 HMM 作为对这些数据进行训练的分类器?我读到的所有关于 HMM 的文献都涉及状态和状态转换,但我可以'不要将它连接
我不完全理解如何使用隐马尔可夫模型中的开始和结束状态。为了设计和实现过渡和排放矩阵,这些是必要的吗? 最佳答案 开始/结束状态对于建模标签是否可能出现在句子的开头或结尾是必要的。 例如,如果您有一个五
我相信我理解 HMM 的核心。通过 HMM,我们解决了评估(发射序列的概率)、解码(最可能的隐藏序列)和学习问题(从观察到的发射序列集学习转换和发射概率矩阵)。 我的问题与学习问题有关。我有发射序列,
我有一个长度为 1000 的连续单变量 xts 对象,我已将其转换为名为 x 的 data.frame,以供 RHmm 包使用。 我已经选择混合分布中有 5 个状态和 4 个高斯分布。 我想要的是下一
我相信我理解 HMM 的核心。通过 HMM,我们解决了评估(发射序列的概率)、解码(最可能的隐藏序列)和学习问题(从观察到的发射序列集学习转换和发射概率矩阵)。 我的问题与学习问题有关。我有发射序列,
我尝试运行 http://scikit-learn.org/stable/modules/hmm.html 中的示例代码: import numpy as np from sklearn import
我一直在阅读有关 HMM 理论的内容。据我了解,我们需要初始概率、转移概率和发射概率才能继续 HMM。我看到的关于 HMM 实现的例子从一开始就定义了所有这些概率。但问题是我想使用 HMM 识别手势,
我正在尝试开发一种系统,以在语音识别中将垃圾与非垃圾分开。我正在使用隐马尔可夫模型的 jahmm 实现。我对我应该将训练数据作为观察序列提供给系统的格式感到困惑。而HMM中的每个状态是由什么组成的呢?
因此,在给定学习数据集的情况下,我成功地估计了特定隐马尔可夫模型 (HMM) 中的大部分参数。这些参数是:隐藏状态的发射概率和马尔可夫链的转移矩阵$P$。我使用吉布斯采样进行学习。现在仍然缺少一组参数
这个问题与传统的手写识别有点不同。我有一个包含数千个以下内容的数据集。对于一个绘制的字符,我有几个连续的 (x, y) 坐标,其中笔被按下。所以,这是一个顺序(时间)问题。 我希望能够根据这些数据对手
我有两个训练集(已知类别的观察值)代表我数据中的两种可能状态。我想让 hmmlearn 估计开始,来自这两个训练集的转换和发射概率。 我的数据是 0-1 之间的值列表。我已经使用保守的阈值将数据分成粗
我已经阅读了一些 HMM 和 MFCC 的期刊和论文,但我仍然对它如何逐步与我的数据集(句子数据集的音频)感到困惑。 我的数据集示例(音频表单): 你好早上好 祝你考试顺利 等约343个音频数据和20
我正在尝试使用 hmmlearn 库预测给定一些数据的最佳序列,但出现错误。我的代码是: from hmmlearn import hmm trans_mat = np.array([[0.2,0.6
我是 matlab、隐马尔可夫模型和机器学习的新手,正在尝试对给定的信号序列进行分类。请让我知道我所遵循的方法是否正确: 创建一个 N × N 转换矩阵并填充随机值,每行总和为 1。 (N 将是状态数
我想用kinect在python中做手势识别。 在阅读了一些理论之后,我认为最好的方法之一是使用隐马尔可夫模型 (HMM)(baum welch 或某些 EM 方法)和一些已知的手势数据进行无监督学习
我目前正在为 Mallet 关于 HMM 的糟糕得可笑的文档而苦恼。我已经设法将数据导入到实例中(改编自 ImportExample.java 片段),我只是想知道如何使用它们来训练 HMM 模型。我
我是一名优秀的程序员,十分优秀!