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

Шрифт
Фон

Apesar de ser bastante simples obter informações a respeito do usuário, não

se engane, uma aplicação baseada em movimentos foge bastante da trivialidade.

Lembre-se que geralmente é necessário fazer com que os movimentos sejam detec-

tados independente do esqueleto do usuário, o que pode se tornar um problema, já que as pessoas possuem tamanhos totalmente diferentes, tanto em tamanho total,

quanto em tamanho de um osso. Além disso, quando falamos de gesto, há mais um

complicador: o tempo de execução.

6.2

Desenhando o Esqueleto do Usuário

Vamos continuar com nossa aplicação dos capítulos anteriores. Agora acrescenta-

remos implementações utilizando o fluxo de esqueleto. Nossa implementação irá

desenhar as articulações e o esqueleto do usuário sobre a imagem da câmera que já está implementada.

A primeira coisa a ser feita é desenhar o esqueleto do usuário. Não há um mé-

todo nativo que faça este desenho para nós, então que tal criarmos um método de extensão para a classe SkeletonFrame? Faremos isso, mas dessa vez vamos fazer

a implementação em outras classes em nossa própria aplicação e não em nossa DLL

AuxiliarKinect. Isso porque o desenho será feito utilizando objetos WPF e não

vamos acoplar nossa DLL auxiliar neste tipo de projeto.

Para

começar

vamos

criar

uma

classe

chamada

EsqueletoUsuarioAuxiliar.

Esta classe irá implementar os métodos

para desenhar o esqueleto do usuário, além disso, ela deve receber um objeto

do tipo KinectSensor em seu construtor, pois precisaremos dele para fazer o

mapeamento do esqueleto, conforme o exemplo de código.

public class EsqueletoUsuarioAuxiliar

{

private KinectSensor kinect;

public EsqueletoUsuarioAuxiliar(KinectSensor kinect)

{

66

Casa do Código

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

this.kinect = kinect;

}

}

Agora

precisamos

criar

dentro

desta

classe

o

método

ConverterCoordenadasArticulacao.

Ele irá retornar as coordenadas de

uma articulação convertidas para um plano de duas dimensões.

Utilizaremos

novamente o

CoordinateMapper para fazer esta conversão, mas dessa vez

converteremos um SkeletonPoint para um ColorImagePoint. Este nosso

novo método irá receber por parâmetro a articulação cujas coordenadas se deseja obter e dois valores do tipo double que devem conter os valores referentes à altura e largura do componente da janela em que iremos desenhar as articulações.

É importante lembrar-se de fazer uma regra de três para que a posição da articu-lação se enquadre no tamanho do componente que iremos desenhar nosso esqueleto, esta etapa pode ser ignorada caso o componente tenha exatamente o mesmo tamanho da imagem inserida no formato da ColorStream do Kinect, o método deve

ficar similar ao código a seguir.

private ColorImagePoint ConverterCoordenadasArticulacao

(Joint articulacao, double larguraCanvas, double alturaCanvas)

{

ColorImagePoint posicaoArticulacao =

kinect.CoordinateMapper.MapSkeletonPointToColorPoint

(articulacao.Position, kinect.ColorStream.Format);

posicaoArticulacao.X = (int)

(posicaoArticulacao.X * larguraCanvas) /

kinect.ColorStream.FrameWidth;

posicaoArticulacao.Y = (int)

(posicaoArticulacao.Y * alturaCanvas) /

kinect.ColorStream.FrameHeight;

return posicaoArticulacao;

}

Com este método pronto já podemos converter a posição de nossas articulações,

agora precisamos criar o componente que será desenhado na janela. Criaremos um

método que se chama CriarComponenteVisualArticulacao para fazer este

67

6.2. Desenhando o Esqueleto do Usuário

Casa do Código

trabalho. Este novo método também deve ser inserido na classe que estamos traba-lhando. Para que seja possível desenhar as articulações em forma de círculos em um painel WPF iremos utilizar o objeto Ellipse, logo este método deve retornar um

objeto deste tipo. Para uma maior personalização iremos fazer com que o método

receba por parâmetro: o diâmetro do círculo, a largura da borda e a cor que o círculo será desenhado. A função deste método será utilizar estes parâmetros para a criação e configuração do Ellipse, conforme o código.

private Ellipse CriarComponenteVisualArticulacao

(int diametroArticulacao, int larguraDesenho, Brush corDesenho)

{

Ellipse objetoArticulacao = new Ellipse();

objetoArticulacao.Height = diametroArticulacao;

objetoArticulacao.Width = diametroArticulacao;

objetoArticulacao.StrokeThickness = larguraDesenho;

objetoArticulacao.Stroke = corDesenho;

return objetoArticulacao;

}

Já conseguimos obter as coordenadas da articulação e criar o componente visual

para representá-la, agora criaremos um método que utilize estes dois criados anteriormente para fazer o desenho da articulação em sua posição. Chamaremos este

novo método de DesenharArticulacao, ele deve receber por parâmetro um ob-

jeto Joint que é a representação da articulação do usuário e um objeto Canvas

que é o painel WPF que utilizaremos para desenhar o esqueleto do usuário.

public void DesenharArticulacao

(Joint articulacao, Canvas canvasParaDesenhar)

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

0
Шрифт
Фон

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