だから、マウスが頭の動きによって制御される 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
の最初の追跡位置を決定しました。それで、最初の追跡位置を画面の中心に設定し、そこから移動しようとしました。しかし、画面の中心点のような比較を使用しても、顔が指している方向にマウスを移動する方法にまだ問題があります。 xInicial
yInicial