Cardoso Gabriel Schade - Microsoft Kinect: Crie aplicações interativas стр 17.

Шрифт
Фон

ReconhecerDistancia

(DepthImageFrame quadro, byte[] bytesImagem, int distanciaMaxima)

{

if (quadro == null || bytesImagem == null) return;

using (quadro)

{

DepthImagePixel[] imagemProfundidade =

new DepthImagePixel[quadro.PixelDataLength];

quadro.CopyDepthImagePixelDataTo(imagemProfundidade);

DepthImagePoint[] pontosImagemProfundidade =

new DepthImagePoint[640 * 480];

kinect.CoordinateMapper

.MapColorFrameToDepthFrame(kinect.ColorStream.Format,

kinect.DepthStream.Format, imagemProfundidade,

pontosImagemProfundidade);

for (int i = 0; i < pontosImagemProfundidade.Length; i++)

{

var point = pontosImagemProfundidade[i];

if ( point.Depth < distanciaMaxima &&

KinectSensor.IsKnownPoint(point) )

{

var pixelDataIndex = i * 4;

byte maiorValorCor =

Math.Max(bytesImagem[pixelDataIndex],

Math.Max(bytesImagem[pixelDataIndex + 1],

bytesImagem[pixelDataIndex + 2]));

bytesImagem[pixelDataIndex] = maiorValorCor;

bytesImagem[pixelDataIndex + 1] = maiorValorCor;

bytesImagem[pixelDataIndex + 2] = maiorValorCor;

}

}

}

}

59

5.3. Aplicação

Casa do Código

Neste ponto você deve executar a aplicação e obter um resultado similar ao da

figura 5.4.

Figura 5.4: Escala cinza por distância (Melhorado)

No universo dos sensores praticamente nada é exato, infelizmente não podemos

obter um resultado perfeito, mas como você deve ter notado após aplicar estas técnicas, o resultado se torna totalmente aceitável e com um nível de precisão bastante impressionante.

Antes de finalizarmos este capítulo é interessante ressaltar um teste nesta apli-cação. Caso você aproxime demais sua mão do sensor ela voltará a ficar colorida, conforme figura 5.5, mesmo com a distância sendo menor do que a distância má-

xima para aplicar escala cinza. Você consegue imaginar por que isso ocorre?

60

Casa do Código

Capítulo 5. Fluxo de Profundidade

Figura 5.5: Escala cinza por distância (Teste)

Isso

ocorre

por

conta

de

nossa

verificação

KinectSensor.IsKnownPoint(point).

No início deste capítulo foi men-

cionado que o Kinect possui uma distância mínima e uma máxima para conseguir

identificar a profundidade de um ponto. Em nosso teste, quando a mão do usuário se aproximava mais do que a distância mínima do sensor ela passava a fazer parte dos pontos cuja distância o sensor não conhece.

61

Capítulo 6

Fluxo de Esqueleto do Usuário

O fluxo de esqueleto do usuário é um fluxo semelhante aos demais já apresentados nos capítulos anteriores, entretanto não há um sensor físico que o cria. Diferente dos outros, este fluxo é um conjunto de processamentos e de sensores que tornam o Kinect capaz de identificar usuários. O termo esqueleto de usuário refere-se à capacidade do Kinect que perceber o usuário e suas articulações, ou seja, com este fluxo conseguimos identificar por exemplo, as coordenadas X, Y e Z da mão do usuário.

Para efetuar o reconhecimento de diferentes tipos e tamanhos de esqueletos a

Microsoft treinou uma rede neural artificial que processa as informações do ambiente tentando encontrar algum usuário. De acordo com a própria Microsoft sua rede neural foi treinada utilizando o conceito de Motion Capture (mocap) de diversos tipos.

Este fluxo é utilizado para criar aplicações baseadas em movimentos, sendo as-

sim, ele pode ser considerado o fluxo mais importante do Kinect, pois praticamente toda aplicação utilizando o Kinect é feita baseada em movimentos.

6.1. Esqueleto do Usuário

Casa do Código

6.1

Esqueleto do Usuário

As informações do usuário são disponibilizadas através de coordenadas X, Y e Z no espaço de coordenadas do Kinect. Como vimos no capítulo anterior, o sensor é capaz de reconhecer até 6 usuários simultaneamente, entretanto, apenas 2 destes usuários terão o esqueleto disponível para a aplicação.

O esqueleto do usuário conta com vinte articulações (frequentemente chamadas

de Joints), sendo que cada uma possui suas próprias coordenadas. As articulações são pontos julgados importantes e através deles obtemos a descrição tridimensional do usuário. A figura 6.1 ilustra todas as articulações

que podem ser obtidas através do sensor.

64

Casa do Código

Capítulo 6. Fluxo de Esqueleto do Usuário

Figura 6.1: Articulações do usuário

Todas as articulações do Usuário estão interligadas essas ligações no contexto de computação gráfica são chamadas de ossos ou bones, mesmo que a ligação não tenha um osso físico propriamente dito para ligá-las.

Movimentos

Existem dois tipos de movimentos que são utilizados a partir do esqueleto do

usuário: poses/posturas e gestos.

Uma pose (também pode ser chamada de postura) é uma forma de manter o

65

6.2. Desenhando o Esqueleto do Usuário

Casa do Código

corpo parado por determinado tempo até que isto tenha algum significado, por

exemplo, quando um auxiliar de arbitragem no futebol nota que o atacante está em posição de impedimento ele ergue sua bandeira e se mantém assim até que o árbi-tro veja e aplique a regra. Gestos são os movimentos propriamente ditos, como por exemplo, um aceno de despedida.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке