1

だから、マウスが頭の動きによって制御される Kinect アプリケーションを作成しようとしています。

        if (faceFrame.TrackSuccessful)
        {               
            var xBase = System.Windows.Forms.Screen.AllScreens[0].Bounds.Width;
            var yBase = System.Windows.Forms.Screen.AllScreens[0].Bounds.Height;
            var xCentroTela = xBase / 2;
            var yCentroTela = yBase / 2;
            var xInicial = Convert.ToInt32(pontosFace[41].X);
            var yInicial = Convert.ToInt32(pontosFace[41].Y);

            if (flagPosicao == 0)
            {
                SetCursorPos(xCentroTela, yCentroTela);

                flagPosicao = 1;
            }

            //Works
            int topofscreen = ((100 * yBase) * yInicial) / (50 * yCentroTela);
            int leftofscreen = ((100 * xBase) * xInicial) / (50 * xCentroTela);


            leftofscreen = leftofscreen - xCentroTela;
            topofscreen = topofscreen - yCentroTela;

            SetCursorPos(leftofscreen, topofscreen);

            Thread.Sleep(1);

            txty.Text = Convert.ToString(topofscreen);
            txtx.Text = Convert.ToString(leftofscreen);
        }

Kinect によって追跡された顔の特定のポイントの正確な位置に従って、私はそれを制御することができましたが、これにより、人が座っている場合、マウスの動きが非常に小さな領域に制限されます。これは、人が部屋中ずっと頭を動かし続けている場合にのみ機能します。

私の質問は: マウス カーソルの位置を動的に設定する方法はありますか? つまり、正確な位置に設定したくありません。追跡点が指している場所に設定したい。たとえば、頭を左上に移動して停止すると、マウスはその方向に移動し続ける必要があります。

または、追跡ポイントの範囲をより広い範囲に広げる方法はありますか?

UPDATED いくつかの改良を加えてコードを更新しました。今、マウスカーソルを画面の中央に設定し、顔の最初の追跡ポイントを取得しています。今、私はそこからどこへ行くべきかを発見しようとしています.

更新 #2 これで、画面の中心点 (xCentroTelaおよび) を追跡することができ、ポイント (および)yCentroTelaの最初の追跡位置を決定しました。それで、最初の追跡位置を画面の中心に設定し、そこから移動しようとしました。しかし、画面の中心点のような比較を使用しても、顔が指している方向にマウスを移動する方法にまだ問題があります。 xInicialyInicial

4

1 に答える 1

2

次のようなものを実装できます。

ユーザーが頭を少し右nothingに動かした場合、あなたは を行いますが、もう少し動かすと、マウスを右に動かし始めて加速し (ディスプレイスメントに係数を掛けます)、次の場合にのみ停止します。ユーザーは頭を元の位置に向けます。つまり、カーソルの周囲の領域を考慮する必要があります。ユーザーがこの領域を覗き込んだ場合、何も起こりません。ユーザーがこの領域から出た場合、マウスは動き始めます。カーソルを中央に置いたまま、カーソルで領域を移動することを忘れないでください。

于 2012-11-28T23:51:50.977 に答える