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

Шрифт
Фон

23

3.2. Eixo Motorizado

Casa do Código

Figura 3.2: Visão do Kinect

As informações ligadas ao eixo motorizado são disponibilizadas no SDK de

forma bastante simples.

Existem três propriedades na classe KinectSensor:

ElevationAngle,

MaxElevationAngle e MinElevationAngle. As duas últimas citadas possuem

o valor fixo de 27 e -27 respectivamente. A propriedade ElevationAngle possui

o valor igual ao valor da altura do ângulo de elevação do eixo motorizado. Nós já a utilizamos nos exercícios anteriores e você viu o quanto é simples alterar ou obter este valor.

problema com o ElevationAngle

Caso uma segunda alteração na propriedade ElevationAngle seja feita

sem que a primeira tenha sido finalizada é lançada uma exceção na apli-

cação.

24

Casa do Código

Capítulo

3. Acelerômetro e Eixo Motorizado

Aplicação

Construiremos outra aplicação WPF, então você deve fazer os passos já conhe-

cidos para a criação do projeto, incluindo a inclusão e chamada para a inicialização do sensor descrita em 2.1. Nesta aplicação iremos construir um componente que

nos permitirá alterar o valor do ângulo de elevação do eixo motorizado pela própria interface!

Como na aplicação anterior também utilizaremos o componente de layout

Grid, dessa vez precisamos apenas de duas colunas, sendo que a segunda irá ocupar o dobro de espaço da primeira. Para fazer isso, utilize o caractere de proporção ( * ).

Na primeira coluna da janela inserimos um componente Slider, que irá se encar-

regar de alterar a propriedade ElevationAngle e na outra coluna vamos inserir

um componente Label para mostrar o valor do ângulo de elevação do Kinect.

É importante lembrar que precisamos inserir como valor máximo e mínimo

do Slider 27 e -27 respectivamente, pois este é o valor limite do ângulo de ele-vação. Por opção irei inicializar a propriedade Value do Slider com o valor 0,

ou seja, com o Kinect centralizado. Através do XAML, também podemos interpre-

tar os eventos dos componentes: como teremos que atualizar o valor da propriedade ElevationAngle toda vez que o Slider tiver seu valor alterado, temos que interpretar o evento Thumb.DragCompleted, que será chamado toda vez que o usuário

interagir com o componente.

Também precisamos preencher a propriedade Name dos dois componentes, pois

iremos utilizá-los no código C# da janela. Após as configurações de layout feitas o código da janela deve estar semelhante ao código a seguir.

<Window x:Class="EixoMotorizado.MainWindow"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="MainWindow" Height="230" Width="180">

<Grid>

<Grid.ColumnDefinitions>

<ColumnDefinition Width="*"/>

<ColumnDefinition Width="2*"/>

</Grid.ColumnDefinitions>

<Slider Name="slider" Margin="10,0" Height="150"

HorizontalAlignment="Left" VerticalAlignment="Center"

Orientation="Vertical" Minimum="-27" Maximum="27"

25

3.2. Eixo Motorizado

Casa do Código

Value="0" Grid.Column="0"

Thumb.DragCompleted="slider_DragCompleted"/>

<Label Name="label" FontSize="64"

FontFamily="Segoe UI Light"

HorizontalAlignment="Center" VerticalAlignment="Center"

Content="0" Grid.Column="1" />

</Grid>

</Window>

Tendo a janela pronta, podemos partir para a implementação em C# desta apli-

cação. Criaremos um método dentro da nossa janela para atualizar os valores da

propriedade ElevationAngle do sensor e do texto exibido no label. Chamare-

mos este método de AtualizarValores e seu código deve ficar similar ao código

a seguir.

private void AtualizarValores()

{

kinect.ElevationAngle = Convert.ToInt32(slider.Value);

label.Content = kinect.ElevationAngle;

}

Simples, não é mesmo? Agora basta criar uma chamada para este método dentro

do método slider_DragCompleted e tudo já irá funcionar!

Figura 3.3: Aplicação EixoMotorizado

26

Capítulo 4

Fluxo de Cores

Nos três capítulos seguintes serão apresentadas as funcionalidades e processamentos que geram os fluxos (streams) que fazem parte da classe KinectSensor. Eles são: fluxo de cores ( ColorStream), fluxo de profundidade ( DepthStream) e fluxo de

esqueleto de usuário( SkeletonStream). Todos possuem algumas características

em comum e estão ligados a um ou mais sensores que envolvem seu processamento.

Ambos precisam ser ligados para que o Kinect comece a processá-los e possuem dois caminhos para se obter um quadro, ou utilizando um método para solicitar o último quadro já processado, ou através de um evento que é disparado cada vez que um novo quadro deste fluxo está pronto, ou seja, já completou sua etapa de processamento.

Além disso, podem ser acessados através do evento AllFramesReady, que possui

informações destes três tipos de fluxos.

O fluxograma de funcionamento de todos os fluxos supracitados é ilustrado pela

figura 4.1.

4.1. Formatos

Casa

do Código

Figura 4.1: Fluxograma de processamento

Neste capítulo vamos entender como funciona a câmera de cores do Kinect,

como utilizá-la para capturar fotos e vídeos, como tratar as imagens bit por bit e como aplicar estas funcionalidades em uma aplicação real.

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

0
Шрифт
Фон

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