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.