распознавание жестов с помощью Kinect с Python: хм обучения - PullRequest
4 голосов
/ 13 декабря 2011

Я хочу сделать распознавание жестов в python с помощью kinect.

После прочтения некоторой теории, я думаю, что один из лучших методов - это обучение без учителя с использованием скрытой модели Маркова (HMM) (baum welch или некоторый EMметод) с некоторыми известными данными жестов, чтобы получить набор обученных 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)

затем я выполняю распознавание наблюдаемых новых данных, выполняя max loglik, и выбираю сохраненный жест, который имеет максимальный loglik для каждого обученного HMM:

# recognition
observed = load_data('new_data.mat')
logliks = [m.viterbi(observed) for m in gestures]

print 'observed data is ', gestures[logliks.index(max(logliks))]

Мои вопросы:

  • Это что-то совершенно глупое?
  • Сколько тренировочных комплектов для реального случая?
  • Сколько состояний для каждого HMM?
  • Можно ли сделать это в реальном времени?

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Прежде всего: это очень особенный вопрос, вам понадобится специалист по машинному обучению. К сожалению, среди сайтов обмена стеками здесь нет эквивалента ML ... может быть, когда-нибудь он будет. :)

Полагаю, ваш подход верен, только некоторые замечания:

  • Класс HMM, который вы только что создали, с помощью HMM(), должен быть создан таким образом, чтобы структура HMM могла представлять что-то похожее на жест. HMM имеют состояний и переходов между ними, так как бы вы определили HMM для жеста? Я уверен, что это возможно (и даже думаю, что это хороший подход), но это требует некоторого размышления. Возможно, состояния - это просто углы трехмерного куба, и для каждой наблюдаемой точки вашего распознанного жеста вы выбираете ближайший угол этого куба. Алгоритм BW может затем аппроксимировать вероятности перехода через ваши тренировочные данные. Но вам может потребоваться выбрать более детализированную модель состояния, например, сетку вокселей n * n * n.

  • Алгоритм Витерби дает вам не вероятность модели, а наиболее вероятную последовательность состояний для данного наблюдения последовательности. IIRC вы выбрали бы алгоритм пересылки , чтобы получить вероятность заданной последовательности наблюдений для данной модели.

Я предполагаю, что, учитывая хорошо обученный и не слишком сложный HMM, вы должны быть в состоянии распознавать жесты в режиме реального времени, но это только обоснованное предположение. :)

1 голос
/ 14 декабря 2011

Уже успешно применяется во многих вариациях: http://scholar.google.co.il/scholar?hl=en&q=HMM+Gesture+Recognition.

Примечания:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...