120
Desenvolvimento de Interfaces Naturais de Interação usando o Hardware Kinect

Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Embed Size (px)

DESCRIPTION

O curso apresentará, de forma prática, os conceitos do desenvolvimento de aplicações para Interface Naturais de Usuário usando o hardware Kinect. Visa-se dar uma visão geral dos frameworks de desenvolvimento, com uma ênfase no OpenNI, seguida por uma discussão sobre o processo de desenvolvimento de tais aplicações. Durante a apresentação serão abordadas aplicações exemplos.

Citation preview

Page 1: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Desenvolvimento de Interfaces Naturais de Interação usando o

Hardware Kinect

Page 2: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Roteiro• Evolução das interfaces de usuário e de seus dispositivos

• Evolução dos dispositivos de games

• O que é o Kinect?

o Como funciona

o Origem do dispositivo

o Possibilidades de uso

• Desenvolvimento

o Middlewares e frameworks

o Comparações de frameworks existentes

o Samples e Produtos Corollarium+Kinect

o Desenvolvendo com a OpenNI

Page 3: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Uma interface de usuário é o sistema pelo qual as pessoas (usuários) interagem com uma máquina. A interface do usuário inclui hardware (físico) e software (lógico) componentes. Interfaces de usuário existe para vários sistemas, e fornecer um meio de:

• Entrada: permitindo que os usuários manipulem um sistema • De saída: permitindo que o sistema para indicar os efeitos da manipulação dos utilizadores

Interface de usuário

Page 4: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• 1ª Interface computacional interativa

• Inserção de comandos por texto

• Comandos numerosos e compostos

• Devem ser decorados pelo utilizador

• Curva de aprendizagem e adaptação maior

Command Line Interface (CLI)

Page 5: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Dispositivo de entrada para CLI

Page 6: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Janelas, botões, menus, caixas de opção, caixas de seleção e ícones (WIMP)

• Controle artificial

• Operações devem ser aprendidas por meio de botões

Graphic User Interface (GUI)

Page 7: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Dispositivos de Entrada para GUI

Page 8: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Exige apenas que o usuário seja capaz de interagir com o ambiente por meio de interações previamente já conhecidas

• Aprendizagem facilitada, não exigindo que o usuário seja apresentado à um novo dispositivo entrada

• Interação com o computador de um modo efetivamente invisível, ou tornando-se invisível com sucessivas interações aprendidas.

Natural User Interface (NUI)

Page 9: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Segundo Weiyuan (2011), a NUI possuí as seguintes características:

• Design centrado no usuário• Largura de banda alta • Multi canal • Simples e natural• Interação baseada por imagens• Interação baseada por voz • Interação baseada no comportamento

Características de NUI

Page 10: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Touch screens• Sensores de movimento (acelerômetros)• Câmeras de profundidade (3D)• Sensores de áudio

Dispositivos comuns para NUI

Page 11: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Evolução das Interfaces de usuário

Page 12: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Consoles e a NUI

Page 13: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Vídeo da evolução dos dispositivos de controle para consoles

http://vimeo.com/18743950 - History of Gaming - by Florian Smolka

Page 14: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect
Page 15: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Fonte: http://www.ifixit.com/Teardown/Microsoft-Kinect-Teardown/4066/1

O dispositivo Microsoft Kinect*

Page 16: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Principais Características

Page 17: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Câmera RGB 640x480 – VNA38209015• IR CMOS 320x240 - OG12 / 0956 / D306 / JG05A • IR Projetor - Diodo laser de 830 nm - OG12 / 0956 / D306 / JG05A• LED de estatus

Page 18: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Motor de inclinação vertical

Page 19: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• A profundidade consiste em uma fonte de luz infravermelha (IR) que projeta um padrão de pontos

• A câmera IR detecta partes refletidas do padrão de pontos e converte suas intensidades em distâncias

• Cada quadro gerado pelo sensor de profundidade possui resolução VGA (320 × 240 pixels), contendo valores de 11 bits de profundidade que oferece 2048 níveis de sensibilidade. O fluxo de saída é executado em 30 quadros por segundo

Profundidade

Page 20: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

http://www.primesense.com/en/technology/115-the-primesense-3d-sensing-solution

Page 21: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• A câmera RGB utiliza resolução padrão (640 x 480) VGA e uma taxa de quadros 30 Hz

• A matriz de áudio consiste de quatro microfones, com cada canal de processamento de áudio de 16 bits a uma taxa de amostragem de 16 kHz. O hardware inclui a supressão de ruído ambiente

Áudio e RGB

Page 22: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• O Kinect para XBOX 360 utiliza 12 volts, mais do que a fornecida por uma porta USB padrão (5 volts).

• É necessário conectar o dispositivo na porta USB do PC e em uma fonte de alimentação separada para o Kinect para funcionar corretamente.

• O Kinect para PC, o qual não utiliza fonte auxiliar.

Alimentação

Page 23: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Implementado no Kinect, é capaz de capturar os dados do sensor infravermelho, fornecendo dados de profundidade em tempo real.

http://www.primesense.com/en/component/content/article/9-solutions/114-the-ps1080

PrimeSense PS1080-A2 - SoC image sensor processor

Page 24: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

The PrimeSensor™ Technology

The PrimeSensor

Page 25: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

http://event.asus.com/wavi/http://us.estore.asus.com/index.php?l=product_detail&p=3397

Dispositivos da ASUS com tecnologia PrimeSense

Page 26: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Dispositivo Xtion PRO LIVE

Page 27: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Brasil ≈ R$500*EUA = $$129.99

Consulta data 26/01/2012

EUA = $$149.00

EUA ≈ $200.00

EUA = $199.00

Microsoft Kinect para Xbox 360

Xtion PRO LIVE

Xtion PRO

PrimeSensor

Comparações de preço no Mercado

Page 28: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Suas características e benefícios são amplos, podendo ser aplicados em áreas como :

• Robótica• Realidade virtual• Vigilância• Educação (fisioterapia etc..)• Captura de movimento de pessoas ou objetos• Rastreamento• Captura de vídeo ou imagem 3D

Pode ser usado para desenvolvimento de aplicações NUI

Microsoft Kinect e a NUI

Page 29: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Existem diversas ferramentas de desenvolvimento, cada uma com suas características.

Ferramentas de Desenvolvimento

Page 30: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect
Page 31: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

OpenKinect é uma comunidade de pessoas interessadas em utilizar o Microsoft Kinect em computadores e outros dispositivos criando bibliotecas livres para que o Kinect seja utilizada em diferentes plataformas

• O projeto surgiu na corrida para ganhar acesso do Microsoft Kinect no PC• Héctor Martin liberou o código da libfreenect no Github• Primeiro commit em 10 Novembro de 2010• 17 de dezembro já foi implementado libfreenect plataforma win32 • A libfreenect compõe classes de desenvolvimento para acesso ao hardware

do dispositivo.

Código fonte disponível em: https://github.com/OpenKinect/libfreenect

Google Groups: OpenKinect#openkinect - Freenode

Page 32: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Imagens de profundidade e RGB• Motor (posição de orientação vertical)• Acelerômetro• LED de status• Áudio • Bindings e extensões (C#, C++ , Python, Java , AS3)• Suporte nas plataformas Windows, GNU/Linux e OS X

Imagem de profundidade Imagem RGB

libFreenect

Page 33: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Não possui integração com a NITE (middleware NUI)

• Derivada da engenharia reversa do driver oficial do Kinect

• A OpenKinect não é um framework • A libfreenect é apenas um modulo, uma API para

acesso ao hardware do dispositivo Microsoft Kinect

libFreenect

Page 34: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect
Page 35: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect
Page 36: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• PrimeSense reconhece o interesse e as realizações da comunidade de código aberto sobre o Kinect

• Surgi um mês depois da libfreenect ser lançada em 09 de dezembro 2010

• Lança seus drivers do PrimeSensor em (LGPLv3+)• A OpenNI framework (LGPLv3+)• API para o desenvolvimento de aplicações que

necessitam de interação natural• É lançado o fork do Sensor Drive do PrimeSensor da

OpenNI para o Kinect (SensorKinect by Avin2)• Promove iniciativas sem fins lucrativos de utilização da

NUIGoogle Groups: OpenNI

Page 37: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• É um framework que fornece uma API para o desenvolvimento de aplicações que necessitam de interação natural.

• API abrange a comunicação com dispositivos de baixo nível (por exemplo, sensores de visão e áudio), bem como soluções de alto nível (por exemplo, o acompanhamento visual utilizando visão computacional).

• O framework está escrito e distribuído sob a GNU Lesser General Public License (LGPL)

Page 38: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect
Page 39: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• A modularidade do framework OpenNI permite sua fácil integração com outros softwares.

• Um exemplo interessante é a integração com o motor gráfico Ogre3D

Page 40: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• O NITE é um middleware usado pela interface OpenNI, e desenvolvido pela PrimeSense.

• Apesar de possuir código fechado, é gratuito e pode ser usado comercialmente.• Responsável por identificar os usuários na imagem e rastrear seus movimentos, além de prover uma API que detecta gestos.

• Modos de operação: ● Rastrear mãos, com detecção de gestos em

particular● Rastrear o corpo todo (esqueleto)

Page 41: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Controle das Mãos: permite ao usuário o controle de dispositivos digitais por meio de suas mãos.

• Controle total do corpo: permite ao usuário uma experiência imersiva, como em um vídeo game

Rastreamento de mãos

Page 42: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Coordenadas das mãos em relação ao dispositivo (X,Y e Z) Detecção de gestos (Push, swipe, steady, wave, circle)

Rastreamento de mãos

Page 43: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Pontos rastreados das juntas do corpo capaz de capturar X,Y e Z em relação ao dispositivo.

http://www.openclipart.org/people/harmonic/Vitruvian_Man.svg

X

Rastreamento de esqueleto

Page 44: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• O Microsoft Kinect SDK 1.0 para Windows

• Destinado aos sistemas operacionais Windows 7 e Windows Embedded Standard

• O SDK fornece suporte para os componentes de hardware do dispositivo Kinect.

• É um SDK proprietário, sendo a distribuição de licença, para o uso comercial, vinculada ao somente ao dispositivo Microsoft Kinect para Windows.

Microsoft Kinect SDK para Windows

Page 45: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

OpenKinect OpenNI Microsoft Kinect SDK v1.0

Licença LGPLv3+ LGPLv3+(Nite tem código fechado mas que pode ser usado comercialmente)

Proprietária e uso não comercial para o Microsoft Kinect para Xbox360.

Hardware Microsoft Kinect para Xbox360 e Microsoft Kinect para Windows

Qualquer compatível com padrão OpenNI

Microsoft Kinect

Driver libfreenect SensorKinect Avin2 Microsoft Kinect SDK v1.0

Multiplataforma de S.O Sim Sim Não

Múltiplos Kinects Sim Sim Sim

Câmera RGB Sim Sim Sim

Câmera Infravermelho Sim Sim Sim

Projetor Infravermelho Sim Sim Sim

LED de estatus Sim Sim Não

Motor de inclinação vertical Sim Não Sim

Vetor de microfones Implementado Não Sim

Detecção de gestos Implementação a partir do OpenCV

Sim, pelo middleware *

Detecção do esqueleto Não Sim, pelo middleware Sim

Detecção da mãos e módulos de reconhecimento de gestos

Não Sim, pelo middleware Não

Análisador de cena Não Sim Não

Page 46: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Desenvolvimento com a

Page 47: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Topologia de arquitetura OpenNI

• Camada do topo:o Representa a aplicação desenvolvida que

implementa NUI com a OpeNI.

• Camada do meio: o Representa a OpenNI, oferecendo interfaces

de comunicação que interagem tanto com os sensores e os componentes middleware, que analisam os dados do sensor.

• Camada de baixo:o Mostra os dispositivos de hardware que captam

os elementos visuais e de áudio da cena.

Page 48: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

OpenNI Arquitetura

Page 49: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• A OpenNI é uma camada abstrata que provê a interface para ambos: sensores físicos e componentes de middleware

• Múltiplos componentes podem ser registrados ao framework

• Estes componentes são referenciados como módulos

• Selecionar e requerer um dispositivo, ou mesmo um componente de middleware, é simples e flexível de implementação

Módulos (Componentes)

Page 50: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

•Sensor 3D

•Câmera RGB

•Câmera Infra-vermelho

•Dispositivo de Áudio (vetores de microfones, no caso do Kinect)

OpenNI - Módulos de Sensor

Page 51: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Análise de Corpo: um componente de software que processa os dados do sensor e gera o esqueleto

• Análise de Mãos: processa os dados e gera a localização das mãos

• Análise de Gestos: identifica gestos pré definidos, por exemplo, movimento balanço das mãos.

• Análise de cena: componente que analisa a imagem da cena como um todo, gerando informações como:

o A separação entre foreground e background;

o As coordenadas do plano; e

o A indentificação única das figuras na cena.

OpenNI - Módulos Middleware

Page 52: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Cenário de desenvolvimento

Page 53: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• A OpenNI é uma interface de alto-nível.

• O OpenNI define Production Node (nós de produção)

conjunto de componentes que estabelecem o processo de

criação de dados necessários para aplicações baseadas em

NUI.

• Cada nó encapsula a funcionalidade que se relaciona com a

geração do tipo de dados específicos.

• Contudo, é definido apenas o protocolo enquanto a lógica de

geração de dados deve ser implementada pelos módulos que

se ligam a OpenNI

OpenNI- Desenvolvimento

Page 54: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• A aplicação que necessite rastrear partes do corpo humano em uma cena• Isto requer que o nó de produção proveja dados do corpo para a aplicação, ou, em outras palavras, um

gerador de usuário (User Generator).

Nós de Produção - Exemplo

Page 55: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Cada nó de produção na OpenNI é definido nas categorias abaixo;

• Nós de sensores

• Nós de Middleware

Tipos de nós de produção

Page 56: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Dispositivo

• Gerador de Profundidade (Depth Generator)

• Gerador de Imagem (Image Generator)

• Gerador de Infra-vermelho (IR Generator)

• Gerador de Áudio (Audio Generator)

Nós de sensores

Page 57: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Gerador de Alerta de Gestos (Gesture Alert Generator)

• Analisador de Cena (Scene Analyzer)

• Gerador de Ponto de Mão (Hand Point Generator)

• Gerador de Usuário (User Generator)

Nós de middleware

Page 58: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

•Gravação (Recorder)

•Player

•Codec

Módulo opcional para gravação

Page 59: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

o Alternative Viewo Croppingo Frame Synco Mirroro Pose Detectiono Skeletono User Positiono Error Stateo Lock Awareo Hand Touching FOV Edge

Capabilities

É o que permite a flexibilidade de registro de múltiplos módulos, middleware ou sensores, na OpenNI. Lista atual de capabilities suportadas pela OpeNI;

Page 60: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Objeto de Contexto (The context Object)

• O contexto é o objeto principal OpenNI

• Um contexto é um objeto que mantém o estado completo de aplicações que utilizam OpenNI, incluindo todas os nós de produção utilizados pela aplicação

• O aplicativo pode criar mais de um contexto, mas os contextos não podem compartilhar informações

• Neste ponto, todos os contextos conectados em módulos são carregados e analisados

• Para liberar a memória usada pelo contexto, o aplicativo deve chamar o desligamento função

Page 61: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Um contexto é um espaço de trabalho onde o aplicativo cria um gráfico de produção OpenNI.

• Por analogia, isso é como uma partição do disco em que os usuários criem suas árvores de pastas.

• O objeto de contexto é o ponto de entrada para OpenNI e mantém o estado completo de um aplicativo usando OpenNI.

Objeto de Contexto (The context Object)

Page 62: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Objetos de metadados OpenNI encapsulam uma série de propriedades relacionados a dados específicos própios.

• Cada gerador que produz dados, tem o seu objeto de metadados específico.

• Tem papel importante na gravação e configuração de um nó no momento em que os dados correspondentes foi gerado.

• Às vezes, ao ler dados de um nó, um aplicativo muda a configuração do nó. Isso pode causar inconsistências que podem causar erros na aplicação, se não tratada adequadamente.

Objeto de Metadatas (The Metadata objects)

Page 63: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• DepthGeneratoro Um nó DepthGenerator gera um mapa de profundidade

como uma matriz de pixels, em que cada pixel é um valor de profundidade representando uma distância a partir do sensor em milímetros.

o Esta classe está no primeiro nível de classes na hierarquia de classes OpenNI que normalmente é instanciado para criar um nó real. (Exemplos de outras classes do primeiro nível são ImageGenerator SceneAnalyzer.)

o Gera sáida de um mapa de profundidade e os dados de configuração associados. Acesso apartir de um DepthMetaData.

Principais nós / Classes

Page 64: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• ImageGeneratoro O nó ImageGenerator gera mapas coloridos de

vários formatos de imagem, tais como o formato de imagem RGB24.

o A outra função importante é do metódo GetMetadata(), que, como nós outros geradores, obtém o objeto de metadados de imagem (quadro de objeto), através do qual você pode acessar todas as propriedades e os dados reais do último quadro.

o Saída de dados do tipo ImageMetaData;

Principais nós / Classes

Page 65: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• UserGeneratoro O nó UserGenerator gera dados que descrevem os usuários

reconhecidos na cena, identificando individualmente cada usuário e, assim, permitindo que ações sejam definidas para usuários especificos

o Saída de dados CoM (localização de usuário na cena) e pixels de dados do usuário do SceneMetaData

o Capabilities usados

o SkeletonCapability

Permite que o nó gerar uma representação esqueleto para cada utilizador humano reconhecido.

o PoseDetectionCapabilit

Permite que o nó de reconhecer quando o usuário se coloca em uma posição específica.

Principais nós / Classes

Page 66: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Diagrama de Herença NodeWrapper

• A classe NodeWrapper é a classe base para todas as classes nó OpenNI no C++.

Page 67: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• A classe ProductionNode é uma classe base para todos os nós de produção. Como tal, a classe ProductionNode é a classe base fundamental de toda a interface de Gráfico Produção OpenNI.

Diagrama de Herença ProductionNode

Page 68: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Diagrama de Herença Generator

• Classe base direta para todos os outros geradores, normalmente não é instanciada.

Page 69: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• A classe MapGenerator é a classe base para cada nó gerador que produz um mapa de imagem, por exemplo; mapas de profundidade, mapas de imagem a cores, mapas de IR, e mapas de análise da cena.

Diagrama de Herença MapGenerator

Page 70: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Instalando a OpenNI + NITE + Sensor

Page 71: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Demonstrações OpenNI e NITE (Samples), OpenKinect (lifreenect) e,

aplicações e vídeos de produtos Corollarium

Page 72: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Samples da OpenNI

Page 73: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer em C++

Este exemplo apresenta um programa que utiliza um nó de DepthGenerator e um nó de ImageGenerator para construir um histograma acumulativo a partir dos valores de profundidade

Page 74: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Bloco de Declaração Global

• A definição a seguir é o caminho para um script XML OpenNI, utilizado para entrada e construção de um grafo de produção.

• O grafo de produção é um conjunto de nós de produção, o qual é o principal objeto da OpenNI

Page 75: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Bloco de Declaração Global

• O bloco de declaração a seguir define os objetos OpenNI requeridos para a construção do grafo de produção

Page 76: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Programa principal

• As declarações no topo do programa coletam e reportam status e erros de qualquer função da OpenNI

Page 77: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Script de configuração de Contexto e Grafo de Produção

• O método InitFromXmlFile() é uma combinação de dois métodos de inicialização - Init() e o RunXmlScriptFromFile()

Page 78: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Verificação da existência de um Nó no script XML

• Checa se a OpenNI encontrou, pelo menos, uma definição de nó no script XML

• O programa continua a execução apenas se possuir pelo menos um nó de definição

Page 79: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Obtendo um DepthGenerator de um Grafo de Produção

• A função FindExistingNode() tenta obter uma referência a qualquer nó produção existente

• A chamada XN_NODE_TYPE_DEPTH faz referência a um xn::DepthGenerator - um nó DepthGenerator

• Uma referência é retornada ao parâmetro de profundidade – g_dpeth

Page 80: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Após a verificação da existência de uma definição de um nó é verificado se a OpenNI encontrou um nó DepthGenerator no Grafo de Produção

SimpleViewer - Obtendo um DepthGenerator de um Grafo de Produção

Page 81: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Semelhante ao exemplo anterior, porém, obtendo a referência de um nó ImageGenerator

• Uma referência é retornada ao parâmetro de imagem - g_image!

SimpleViewer - Obtendo um ImageGenerator de um Grafo de Produção

Page 82: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Obter Dados de um nó DepthGenerator

• Na seguinte declaração, o último dado gerado é armazenado de um buffer "fácil de acessar"

• Na terminologia OpenNI: o método getMetaData() obtém o dado que é designado como "metadado para ser armazenado no objeto de metadado do nó"

• O código copia o dado do frame do nó e configuração para o objeto metadado (depthMD)

• Este objeto metadado é denominada "objeto frame"

Page 83: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Obter Dados de um nó ImageGenerator

• Funciona do mesmo modo que o DepthGenerator

Page 84: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Inicializando o Mapa de Textura

• O dimensionamento do buffer do Mapa de Texturas é calculado por arredondamento da resolução completa do frame do DepthGenerator

Page 85: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - glutDisplay( ) callback

• Uma parte significante da programação da OpenNI é definida dentro do callback glutDisplay( )

• O trecho de código abaixo efetua a leitira de objetos frame dos nós DepthGenerator e ImageGenerator

Page 86: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - glutDisplay( ) callback

• É feita a chamadado Data( ) para obter os ponteiros dos objetos do frame (pDepth e pImage) em seus respectivos buffers mapeados

• Por meio dos objetos de frame todos os dados do DepthGenerator e ImageGenerator são acessíveis

Page 87: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Escalando as Imagens

• O FullXRes( ) calcula o fator de escala entre o mapa de profundidade (map depth) e a janela GL

• O FullXRes( ) obtém a resolução total do frame

Page 88: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Utilizar os dados de profundidade para construír um Histograma Acumulativo de Frequência

Page 89: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

SimpleViewer - Utilizar os dados de profundidade para construír um Histograma Acumulativo de Frequência

Page 90: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• O bloco de declaração a seguir define os objetos OpenNI requeridos para a construção do grafo de produção

xn::Context context;XnVSessionGenerator* pSessionGenerator;

Page 91: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Criação do contexto e inicialização, chamando localmente pelo arquivo XML.

• Também coletam e reportam status e erros de qualquer função da OpenNI

XnStatus rc = context.InitFromXmlFile(pathdodir)

Page 92: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Após a inicialização é verificado pelo RC se houve algum erro e, checa-se a OpenNI encontrou, pelo menos, uma definição de nó no script XML

• O programa continua a execução apenas se possuir pelo menos um nó de definição

if (rc != XN_STATUS_OK) {printf("Erro de carregamento XML: %s\n", xnGetStatusString(rc));return 1;

}

Page 93: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• O próximo bloco cria um gerenciador de sessão na NITE algo parecido com GesturesGenerator da OpenNI

• O tipo de gesto que inicializa a sessão para detecção dos gestos é o Wave ou levantar as mãos.

pSessionGenerator = new XnVSessionManager();rc = ((XnVSessionManager*) pSessionGenerator)->Initialize(&context,"Wave", "RaiseHand");

Page 94: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Após a tentativa de inicialização verificamos se tudo ocorreu bem, se não deletemos a sessão da memória e paramos a execução do programa.

if (rc != XN_STATUS_OK) {printf("Session Manager couldn't initialize: %s\n",

xnGetStatusString(rc));delete pSessionGenerator;return 1;

}

Page 95: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Agora iniciamos o contexto e todos os nós

context.StartGeneratingAll();

Page 96: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Registros dos callbacks de detecção de inicio, em progresso e de termino da sessão

pSessionGenerator->RegisterSession(NULL, &SessionStart, &SessionEnd,&SessionProgress);

Page 97: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Criação de detecção de wave e registro do callback de movimento e PointUpdate callback

XnVWaveDetector wave;wave.RegisterWave(NULL, OnWaveCB);wave.RegisterPointUpdate(NULL, OnPointUpdate);

• Após isso registramos o wave para a sessão ficar a espera do gesto

pSessionGenerator->AddListener(&wave);

Page 98: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Criação de detecção de push e registro do callback.

XnVPushDetector push;push.RegisterPush(NULL, OnPushCB);

• Após isso registramos o wave para a sessão ficar a espera do gesto

pSessionGenerator->AddListener(&push);

Page 99: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Criação de detecção de circulo e registro do callback.

XnVCircleDetector circle;circle.RegisterCircle(NULL, OnCircleCB);

• Após isso registramos o circulo para a sessão ficar a espera do gesto

pSessionGenerator->AddListener(&circle);

Page 100: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Agora iniciamos o contexto e todos os nós

context.StartGeneratingAll();

Page 101: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• Execução e loop principal do programa, onde fica aguardando o estado da sessão, se houver algum evento do teclado é parado a execução do programa.

while (!xnOSWasKeyboardHit()) {if (bRemoting) {

((XnVMultiProcessFlowClient*) pSessionGenerator)->ReadState();} else {

context.WaitAnyUpdateAll();((XnVSessionManager*) pSessionGenerator)->Update(&context);

}}

Page 102: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker em C++ (NITE)

• E após isso apagamos da memória a sessão e fechamos a execução do programa.

delete pSessionGenerator;context.Shutdown();

Page 103: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Evento 'Gesture Recognized'

• O evento Gesture Recognized representa que o nó GestureGenerator foi reconhecido e nomeado como um gesto na cena

Page 104: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• O handler chama o método StartTracking( ) do nó HandsGenerator

• Essa chamada causa o início do tracking de uma posição específica onde a aplicação espera uma mão, que a aplicação espera com um parâmetro do tipo xn::XnPoint3D

HandTracker - Evento 'Gesture Recognized'

Page 105: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• Depois de iniciado o tracking, o GestureGenerator não precisa mais ficar esperando por um gesto

HandTracker - Evento 'Gesture Recognized'

Page 106: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Evento 'Hand Create'

• O evento Hand Create representa que o nó HandsGenerator foi reconhecido e iniciou o tracking de uma nova mão em resposta a chamada da aplicação (StartTracking( ))

• Este evento retorna um ID para a nova mão.

• O código abaixo apresentao handler do Hand Create

Page 107: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Evento 'Hand Create'

• O handler executa a chamada de uma nova lista de xn::XnPoint3D

• O getPosition( ) retorna a posição de cada mão criada

Page 108: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Evento 'Hand Create'

• Agora que o HandsGenerator está rastreando a mão, é adicionado ao histórico (lista)

Page 109: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Evento 'Hand Update'

• O Hand Update sinaliza nó HandsGenerator detectou que a mão rastreada anteriormente foi reconhecida em uma nova posição específica em um novo frame

• A OpenNI continua a enviar esse evento a cada frame que a mão continue presente

• O evento retorna o ID, new position e o momento do update

Page 110: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Evento 'Hand Destroy'

• O Hand Destroy é responsável por detectar que a mão, que estava sendo rastreada, foi perdida

Page 111: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Main

Page 112: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Histograma da Aplicação

Page 113: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Inicializando o Grafo de Produção

• O construtor public HandTracker( ) inicializa o Grafo de Produção

• Cria e inicializa o GestureGenerator o addGesture( ) adiciona o "Click" ao FOV

Page 114: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - MyGestureRecognized

O MyGestureRecognized( ) é declarado para ser o handler do evento Gesture Recognized

Page 115: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Gerenciadores de Eventos

Este trecho de código implementa os handlers para os eventos de reconhecimento das mãos

Page 116: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Criando um DepthGenerator

• O nó tem o dado designado como "metadado para ser alocado em um objeto metadado do nó"

• Verifica set todos os nós generator estão gerando dados

Page 117: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

HandTracker - Calculando o Tamanho do Buffer

• Os métodos getFullXRes e getFullYRes pegam o número de linhas e colunas no frame (todo o FOV), ignorando cortes

• Isso possibilita à aplicação configurar o tamanho correto do buffer

Page 118: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

Download dos exemplos ministrados

corollarium.com/kinect

Page 119: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• http://openni.org/Documentation - OpenNI Documentation

• https://github.com/OpenKinect/libfreenect- libfreenect

• http://www.microsoft.com/en-us/kinectforwindows/develop/sdkeula.aspx - Kinect SDK EULA

• http://openkinect.org - OpenKinect. is an open community of people interested in making use of the amazing Xbox Kinect hardware with our PCs and other devices. We are working on free, open source libraries that will enable the Kinect to be used with Windows, Linux, and Mac

• http://www.primesense.com/en/press-releases/press-releases2010/109-primesense-supplies-3d-sensing-technology-to-project-natal-for-xbox-360 - PrimeSense™ supplies 3D-sensing technology to 'Project Natal' for Xbox 360

• http://www.primesense.com - PrimeSense. “PrimeSense has delivered an important component to the technology, helping us deliver revolutionary controller-free entertainment experiences”

• http://opencv.willowgarage.com/wiki/ - OpenCV

Referências

Page 120: Desenvolvimento de Interface Naturais de Interação usando o hardware Kinect

• http://www.primesense.com/en/component/content/article/9-solutions/114-the-ps108 0- PrimeSense Reference Design

• http://event.asus.com/wavi/ - WAVI Xtion. Intuitive living room experience

• http://www.ifixit.com/Teardown/Microsoft-Kinect-Teardown/4066/ - Microsoft Kinect Teardown

• http://www.xbox.com/pt-br/kinect -Microsoft Kinect for Xbox360.

• http://www.hitl.washington.edu/artoolkit/ - ARToolKit

• http://en.wikipedia.org/wiki/Natural_User_Interface - Natural user interface

• http://www.primesense.com/nite - NITE PrimeSense

• http://www.primesense.com/en/openni - OpenNI PrimeSense

• Weiyuan Liu; , "Natural user interface- next mainstream product user interface," Computer-Aided Industrial Design & Conceptual Design (CAIDCD), 2010 IEEE 11th International Conference on , vol.1, no., pp.203-205, 17-19 Nov. 2010

Referências