Reconhecimento de gestos usando apenas técnicas simples


8

Estou seguindo um curso de visão computacional e tenho este exercício: escreva um programa que, dada uma imagem da mão, ele possa reconhecer se a mão está aberta, fechada, em um soco ou mantendo uma postura "ok", usando apenas o técnicas fornecidas até agora (pixel 4/8 conectado, região conectada, localização de contornos, localização de buracos, propriedade de blob como centróide, área, perímetro, excentricidade, momentos da imagem, transformação de imagem como invert / power / log / correção de gama / correção de gama / alongamento de contraste, histograma computação e equalização).

Eu fiz isso com algumas propriedades básicas de blob (a mão fechada tem uma excentricidade baixa, "ok" tem um buraco, a mão aberta tem uma grande diferença entre a área da elipse inscrita no blob e a própria área de blob com uma baixa excentricidade) .. Parece funcionar, mas a primeira imagem é um pouco problemática.

Eu acho que poderia haver algo mais para criar um algoritmo mais robusto. Talvez algum tipo de propriedade momentânea? Alguns eixos / orientação / pontos extremos de blob poderiam ajudar?

Imagens de teste do PS:

ok2

Está bem

aberto

soco


Você tem permissão para usar esqueletização ? Veja o artigo relevante da Wikipedia para mais idéias.
Emre

Não, não é permitido porque é o conteúdo de futuras aulas!
Nkint 11/01

Você pode tentar aplicar a Aproximação Simbólica Agregada ao contorno externo de cada objeto. Basicamente, reduza uma forma complexa a uma série temporal e, em seguida, agrupe-as de alguma forma.
precisa saber é o seguinte

eu acho que não tem que usar qualquer tipo de aprendizagem de máquina, apenas uma forma inteligente de combinar isses escritos em questão ..
nkint

talvez alguma característica morfológica?
Nkint 12/01

Respostas:


2

Você pode tentar olhar para momentos invariantes de Hu. Eles podem ser construídos a partir de momentos básicos e são invariantes em rotação, escala, reflexão e tradução.

Calcule-os para um conjunto de contornos de treinamento primeiro e depois aplique-os ao contorno de teste.

Existem implementações no Matlab e no OpenCV, pelo que me lembro.


2

De acordo com o livro Programming vision of computer with Python, uma abordagem interessante é usar recursos densos de SIFT (aka HoG) em suas imagens e alimentar esses recursos com um classificador.

Eu não tentei eu mesmo, mas parece bastante som como uma abordagem. Além disso, o inventor do recurso HoG propõe o aplicativo Flutter que funcionou muito bem nos meus testes, e seria muito estranho se o inventor não usasse seus próprios recursos ou um derivado próximo.


2

Um de meus amigos fez isso em sua tese de graduação. O que ele basicamente fez foi codificar as propriedades de cada gesto. Por exemplo, na primeira figura, use uma máscara retangular sobre as partes da mão. As partes em que a pele encontra a borda retangular da máscara devem ser anotadas e marcadas. Em seguida, as posições relativas da borda maior e da borda menor podem ser comparadas.

Portanto, para apontar para cima, você terá uma borda menor para cima e uma borda maior no pulso.

Para apontar de lado, você tem uma borda menor de um lado e uma borda maior de baixo.

As instruções, no mínimo, podem ser abordadas dessa maneira.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.