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

Шрифт
Фон

de sua janela deve ficar similar a este:

<StackPanel Grid.Row="2" Orientation="Horizontal">

<CheckBox Name="chkEscalaCinza"

Content="Escala cinza" Margin="10,10,0,10"

HorizontalAlignment="Left" />

<CheckBox Name="chkEsqueleto"

Content="Esqueleto do Usuário"

HorizontalAlignment="Left"

Margin="10,10,0,10"/>

</StackPanel>

Além de inserir o componente na janela, também é necessário fazer a validação

81

6.2. Desenhando o Esqueleto do Usuário

Casa do Código

deste CheckBox antes de utilizar o método para desenhar o esqueleto, então nosso método que interpreta o evento AllFramesReady deve ficar assim:

private void kinect_AllFramesReady

(object sender, AllFramesReadyEventArgs e)

{

byte[] imagem = ObterImagemSensorRGB(e.OpenColorImageFrame());

if( chkEscalaCinza.IsChecked.HasValue &&

chkEscalaCinza.IsChecked.Value )

ReconhecerDistancia(e.OpenDepthImageFrame(),

imagem, 2000);

if (imagem != null)

canvasKinect.Background = new ImageBrush(

BitmapSource

.Create( kinect.ColorStream.FrameWidth,

kinect.ColorStream.FrameHeight,

96, 96, PixelFormats.Bgr32, null,

imagem,

kinect.ColorStream.FrameBytesPerPixel

* kinect.ColorStream.FrameWidth

)

);

canvasKinect.Children.Clear();

if ( chkEsqueleto.IsChecked.HasValue &&

chkEsqueleto.IsChecked.Value )

DesenharEsqueletoUsuario(e.OpenSkeletonFrame());

}

Feito isso, por padrão visualizaremos apenas a imagem da câmera do Kinect e

temos a opção de marcar o CheckBox Esqueleto do Usuário para quando dese-

jarmos visualizar o esqueleto do usuário.

82

Capítulo 7

Rastreando e Identificando

Movimentos

Neste capítulo continuaremos a utilizar o fluxo de esqueleto como no capítulo anterior, mas dessa vez focaremos na interação com o aplicativo através de movimentos.

Este método de interação pode trazer uma grande experiência ao usuário, porém

temos de levar em consideração que há alguns desafios para implementar uma boa

usabilidade com nossos movimentos. É importante para o usuário que os movi-

mentos tenham dificuldades de acordo com seu contexto, por exemplo, em um jogo

pode ser que um movimento complicado faça parte do desafio, porém se o usuário

está utilizando movimentos para navegar em um aplicativo ou acionar atalhos, eles devem ser fáceis e naturais.

Os

movimentos precisam ser bem diferenciados, evite criar movimentos simila-

res com funcionalidades diferentes, pois a interpretação de movimentos está sujeita a erros e é frustrante para a experiência do usuário acionar uma funcionalidade por acaso ao tentar executar outra.

7.1. Iniciando a Estrutura Base para Detectar Movimentos

Casa do Código

É importante conhecer o público alvo de sua aplicação e é necessário tomar pre-

cauções quanto ao tamanho do esqueleto de cada usuário e o tamanho do osso entre as articulações de cada usuário. Procure sempre fazer comparações proporcionais ao próprio esqueleto, dessa forma a interpretação do gesto se mantém consistente independente do tamanho do esqueleto.

Testar e experimentar é fundamental quando se fala de aplicações voltadas a in-

terfaces naturais. Você pode desenvolver uma aplicação baseada em movimentos

que funciona perfeitamente para você, mas que não atende seu público alvo, por-

tanto procure fazer testes, avaliar e reimplementar quantas vezes forem necessário a fim de melhorar cada vez mais a experiência do usuário.

A ideia principal da implementação do capítulo anterior é que o usuário visua-

lize seu esqueleto apenas quando desejar, isso é uma boa ideia, mas há um problema de usabilidade em nossa implementação. Quando o usuário estiver se vendo no ví-

deo exibido por nossa aplicação, ele poderá estar longe de seu computador e isso irá impossibilitá-lo de visualizar seu esqueleto naquele momento. Este mesmo problema também pode ser aplicado para quando o usuário deseja aplicar o filtro de escala cinza.

Para resolvermos isso iremos implementar o rastreamento e a identificação de

movimentos para acionar atalhos, o que pode ser bastante trabalhoso, mas monta-

remos uma estrutura na DLL AuxiliarKinect para nos ajudar.

7.1

Iniciando a Estrutura Base para Detectar Movi-

mentos

Primeiro vamos criar uma nova pasta no projeto AuxiliarKinect chamada

Movimentos. Nela serão criadas todas as classes ligadas à lógica para rastrear e identificar as poses e gestos que desenvolveremos ao longo deste livro.

Todos os movimentos em nossa aplicação poderão estar em um dos três esta-

dos de rastreamento: não identificado, em execução e identificado. Para podermos ter esses valores em nossa aplicação iremos criar um arquivo com a enumeração

EstadoRastreamento, conforme o código a seguir.

public enum EstadoRastreamento

{

NaoIdentificado,

EmExecucao,

84

Casa do Código

Capítulo 7. Rastreando e Identificando Movimentos

Identificado

}

Após isso, criaremos a primeira classe que se chamará Movimento, ela será uma

classe base para todos os movimentos (poses e gestos) de nossa aplicação. Esta classe deve ser abstrata e possuir as propriedades e métodos que todo tipo de movimento tem. Todo e qualquer tipo de movimento envolve tempo de execução, sendo assim,

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

0
Шрифт
Фон

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