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

Шрифт
Фон

public static KinectSensor

InicializarPrimeiroSensor(int anguloElevacaoInicial)

{

KinectSensor kinect =

KinectSensor.KinectSensors.First(sensor =>

10

Casa do Código

Capítulo 2. Primeira aplicação com o sensor

sensor.Status == KinectStatus.Connected );

kinect.Start();

kinect.ElevationAngle = anguloElevacaoInicial;

return kinect;

}

Notou como foi simples? Apenas com algumas linhas de código podemos obter

o nosso sensor, iniciar o seu processamento e alterar a angulação do eixo motorizado.

Agora você deve colocar uma chamada para este método em nossa aplicação.

Procure pela classe MainWindow, apesar de ela ser uma janela não iremos alte-

rar em nada a parte visual, então se preocupe apenas com o arquivo C# (MainWin-

dow.xaml.cs). Além de ter adicionado a referência ao assembly Microsoft.Kinect adicione também a referência para a DLL que criamos no projeto AuxiliarKinect.

Lembre-se

também de utilizar a diretiva using para estes mesmos assemblys dentro da classe MainWindow.

Nesta aplicação, além de inicializarmos com a configuração padrão do Kinect

precisamos habilitar o rastreamento de esqueleto, pois é isto que irá nos permitir verificar a posição espacial da mão e da cabeça do usuário. Então vamos criar um método chamado InicializarKinect para fazer as operações supracitadas.

private void InicializarSensor()

{

KinectSensor kinect = InicializadorKinect

.InicializarPrimeiroSensor(10);

kinect.SkeletonStream.Enable();

}

Com nossa DLL, ficou muito simples inicializar o sensor! Agora no construtor

da classe após a chamada do método InitializeComponent que já está presente

por padrão em todas as janelas, crie uma chamada para este método. Depois conecte o sensor ao seu computador e execute a aplicação, viu o que aconteceu? A aplicação já está reconhecendo o sensor e posicionando o ângulo de elevação de seu eixo motorizado!

2.2

Criando a regra de nossa aplicação

Para armazenar o resultado da comparação de altura entre a mão direita do usuário e sua cabeça iremos criar a propriedade bool MaoDireitaAcimaCabeca. Já con-11

2.2. Criando a regra de nossa aplicação

Casa do Código

figuramos o sensor e criamos a propriedade que irá armazenar o resultado de nossa regra, mas ainda não escrevemos o código que, de fato, valida esta regra e exibe a mensagem para o usuário. Onde esta regra deve ser escrita? Antes de respondermos precisamos entender mais um conceito envolvido na programação com o Kinect.

Não iremos entrar em muitos detalhes nesta primeira aplicação, mas é impor-

tante saber que o Kinect atualiza um conjunto de informações em forma de quadros ou frames. Em sua configuração padrão, a cada segundo o Kinect cria 30 quadros, e cada quadro possui seu conjunto próprio de informações.

Agora criaremos o método que executa nossa regra, para fazer esta validação

precisamos das informações referentes ao esqueleto do usuário. Elas estão encapsuladas na classe SkeletonFrame, então o método que irá executar a regra deve

receber um objeto deste tipo por parâmetro.

O rastreamento de esqueleto do usuário do Kinect pode identificar até

seis esqueletos simultâneos e todos estes esqueletos estão no objeto da classe

SkeletonFrame. Teremos que extrair a informação sobre os esqueletos do qua-

dro e logo em seguida, vamos buscar pelo primeiro esqueleto de usuário que o Kinect esteja visualizando caso exista algum, faremos a validação para nossa regra e exibiremos a mensagem. O código a seguir descreve como este método deve ser

escrito.

private void ExecutarRegraMaoDireitaAcimaDaCabeca

(SkeletonFrame quadroAtual)

{

Skeleton[] esqueletos = new Skeleton[6];

quadroAtual.CopySkeletonDataTo(esqueletos);

Skeleton usuario =

esqueletos.FirstOrDefault( esqueleto =>

esqueleto.TrackingState == SkeletonTrackingState.Tracked );

if (usuario != null)

{

Joint maoDireita = usuario.Joints[JointType.HandRight];

Joint cabeca = usuario.Joints[JointType.Head];

bool novoTesteMaoDireitaAcimaCabeca =

maoDireita.Position.Y > cabeca.Position.Y;

if ( MaoDireitaAcimaCabeca !=

novoTesteMaoDireitaAcimaCabeca)

12

Casa do Código

Capítulo 2. Primeira aplicação com o sensor

{

MaoDireitaAcimaCabeca =

novoTesteMaoDireitaAcimaCabeca;

if (MaoDireitaAcimaCabeca)

MessageBox

.Show("A mão direita está acima da cabeça!");

}

}

}

No código anterior copiamos todas as informações dos esqueletos de usuário

para um array, depois verificamos se existe algum esqueleto que possua o estado tracked (rastreado), caso exista executamos nossa regra para este esqueleto.

Agora precisamos inserir uma chamada a este método em algum lugar da nossa

aplicação, onde devemos fazer isso?

Cada vez que o Kinect processa as informações a respeito do esqueleto

de todos os usuários e gera um novo quadro, a classe

KinectSensor dis-

para um evento que teremos que interpretar.

Neste evento é fornecido um

objeto do tipo

SkeletonFrameReadyEventArgs.

Este objeto possui di-

versas propriedades e entre eles está o objeto

SkeletonFrame que deve-

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

0
Шрифт
Фон

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