Atualmente, estou trabalhando em um sistema de reconhecimento de gestos (para um aplicativo Android). Acho que concluí a etapa de processamento da imagem, onde sou capaz de extrair o contorno da mão (estou usando uma luva para evitar a subtração de fundo por enquanto).
Também estou obtendo a elipse / retângulo delimitador, o centróide como características de forma 'importantes' da mão.
Meu problema é que não há muita literatura indicando qual é o próximo estágio antes da classificação da imagem através do modelo oculto de Markov. Estou achando esse estágio de 'Extração de recursos' muito ambíguo.
Atualmente, estou obtendo uma lista de ângulos do contorno (que é aproximado para obter um número limitado de ângulos)
O problema é que não tenho idéia do que fazer a seguir. Quando pesquiso literatura como 'Classificação de formas usando HMMs', ainda acho difícil o que devo fazer a seguir.
Como ferramenta para o HMM, planejo usar o JaHMM. Mas não sei como experimentar a ferramenta nesse estágio, pois não sei qual será a entrada para esse estágio de classificação!
Encontrei uma lista de funções que encontrei em alguma literatura, como Descritores Rápidos de Fourier, Descritores de Curvatura, B Spline; no entanto, não tenho noção de como aplicar essas funções aos meus dados atuais (ou seja, lista de ângulos, por exemplo: -63, 154, 3, 23, 54, ....)
ATUALIZAÇÃO 1:
Obrigado pela sua informação. @Peter K.
Em relação às poses: eu procuraria um conjunto de palavras em língua de sinais americana, escritas com os dedos, por exemplo, 'cachorro' -> 'd' 'o' 'g' (3 estados); mas no momento em que ainda não decidi o que fazer.
Atualmente, estou lendo mais alguns artigos para ver que tipo de informação devo extrair, como:
- centróide da mão
- ângulo de movimento
- distância de um ponto em particular a diferentes pontos do contorno da mão (etc.)
Agora, encontrei um artigo que parece mostrar o que quero fazer, não tenho certeza:
http://espace.library.uq.edu.au/eserv.php?pid=UQ:10700&dsID=n0273.pdf
Atualmente, estou lendo a seção 5 - Quantização vetorial (ouvi falar desse termo antes, mas não sei realmente o que ele envolve, e na figura 5 parece haver um algoritmo complexo que, se entendi corretamente, converte o conjunto de valores que alcanço da mão (mencionada anteriormente) em 1 dígito, que eu posso usar como sequência de observação para treinar um HMM para um sinal específico 1. Você acha que estou seguindo o caminho certo? (Estou trabalhando no Android, (NDK) , Encontrei o JaHMM como uma ferramenta HMM e usei o OpenCV para processamento de imagens.
@ Peter K. Obrigado pela sua resposta. Com relação à geração de dados, planejava seguir as etapas deste artigo, depois de produzir meu conjunto de dados pessoais: (seções 4 e 5) http://www.i.ci.ritsumei.ac.jp/~shimada/papers/vi02 -tanibata.pdf
ATUALIZAÇÃO 2: lembrando que um gesto é formado de {postura a, postura b, postura c}
Agora estou pensando que devo usar alguma forma de algoritmo de classificação. Ou seja, atualmente tenho um conjunto de vetores de recursos:
Postura A: [ângulo de elipse em torno dela, relação altura: largura]
- 0.802985 33.909615
- 0.722824 31.209663
- 0.734535 30.206722
- 0,68397 31,838253
- 0.713706 34.29641
- 0.688798 30.603661
- 0,721395 34,880161
Postura B: [estruturada da mesma maneira que a postura A]
- 0.474164 16.077467
- 0.483104 14.526289
- 0.478904 14.800572
- 0.483134 14.523611
- 0.480608 14.41159
- 0.481552 15.563665
- 0.497951 15.563585
etc ..
e gostaria que, ao alimentar um vetor de característica, obtenho um símbolo simples, por exemplo, 'A', 'B' etc.
Isso é possível? Também migrei a pergunta aqui: /programming/15602963/vector-quantization-algorithms-used-to-provide-observation-sequences-for-hidden
fonte
Respostas:
Eu usei o HMM para reconhecimento de gestos (não para reconhecimento de pose). O que eu fiz foi: rastrear a mão e reconhecer o gesto que a mão estava desenhando no ar, você pode imaginá-la como uma trilha.
Você pode usar o HMM como reconhecedor de sequência. Primeiro, você precisa transformar sua imagem em uma sequência numérica discreta.
Para cada gesto que você deseja reconhecer, você precisa treinar um HMM para isso.
Então você tem um dicionário com alguma palavra conhecida. Cada um é um HMM treinado. Se você tiver uma nova palavra (observação desconhecida), poderá calcular a probabilidade de cada palavra do dicionário ser provavelmente a desconhecida.
Algum pseudo-código:
Agora, veja qual é o valor máximo em probabilidades e você obtém a palavra mais provável do dicionário!
Veja aqui:
http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/Reprints/tutorial%20on%20hmm%20and%20applications.pdf
http://www.codeproject.com/Articles/69647/Hidden-Markov-Models-in-C
http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/
fonte
Vamos começar com o reconhecimento de pose. Este documento rastreia o limite da mão e conta o número de detecções da ponta do dedo a partir desse limite. Uma coisa a ser observada nesse artigo é que não há informações de "estado" necessárias. Para estimativa de pose / posição, os HMMs provavelmente não são um bom ajuste.
As informações dos gestos se encaixam melhor na gama HMM para a solução de problemas. No entanto, eu precisaria ver um pouco mais do tipo de dados que você usará para gestos. Você pode explicar um pouco mais sobre o algoritmo que gera os dados que você possui?
O problema é que a seleção da estrutura correta do modelo Markov oculto influencia bastante a precisão alcançável ... Aviso: link PDF!
fonte