Controlando o PowerPoint com Kinect


Assista em: http://www.youtube.com/watch?v=5qHJ–oe8kw

Resolvi fazer uma pequena modificação em um projeto de controle de PowerPoint através do Kinect.

O projeto original pode ser encontrado no codeplex e é de autoria de Joshua Blake http://kinectpowerpoint.codeplex.com

Vocês podem ver mais detalhes da implementação neste post http://channel9.msdn.com/coding4fun/kinect/NUI-for-PowerPoint

As minhas alterações fazem com que seja possível movimentar o PowerPoint não apenas afastando os seus braços do corpo, mas sim através de um movimento que expressa mais naturalmente a intenção do usuário de deslizar a página atual.

Abaixo o meu algoritmo super simples:

private bool isTrackingRightHand = false;
private bool isTrackingLeftHand = false;

private void ProcessForwardBackGestureEx(Joint head, Joint rightHand, Joint leftHand)
{

    if (isTrackingRightHand && rightHand.Position.X < head.Position.X - 0.10)
    {
        System.Windows.Forms.SendKeys.SendWait("{Right}");
        isTrackingRightHand = false;
    }

    if (!isTrackingRightHand && rightHand.Position.X > head.Position.X + 0.50)
    {
        isTrackingRightHand = true;
    }

    isForwardGestureActive = isTrackingRightHand;

    if (isTrackingLeftHand && leftHand.Position.X > head.Position.X + 0.10)
    {
        System.Windows.Forms.SendKeys.SendWait("{Left}");
        isTrackingLeftHand = false;
    }

    if (!isTrackingLeftHand && leftHand.Position.X < head.Position.X - 0.50)
    {
        isTrackingLeftHand = true;
    }

    isBackGestureActive = isTrackingLeftHand;

            
}

O que este trecho de código faz é começar a identificar um movimento quando o usuário afasta a sua mão 50cm da linha da cabeça.
Se o usuário continuar o movimento até que sua mão cruze a linha da cabeça em 10cm ele dispara o evento de avançar (para a mão direita) e de voltar (para a mão esquerda) a apresentação.

Procurei respeitar todo o funcionamento do programa, a única modificação necessária é adicionar este método, declarar as variáveis e substituir a chamada do método ProcessForwardBackGesture por ProcessForwardBackGestureEx

Simples não? Vejam o video para sentir o efeito!

Divirtame-se!