所以,我正在尝试创建一个 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 跟踪的面部给定点的确切位置来控制它,但是如果人坐着,这会将鼠标的移动限制在一个非常小的区域内。这仅在人们不断在房间周围移动他的头时才有效。
我的问题是:有没有办法动态设置鼠标光标的位置?换句话说,我不想将它设置为我的确切位置。我想将其设置为跟踪点指向的位置。例如,如果我将头移到左上角并停止,鼠标应该继续朝那个方向移动。
或者有没有办法将跟踪点范围扩大到更大的区域?
更新 我已经更新了代码并进行了一些改进。现在,我将鼠标光标设置到屏幕中心并获取面部的初始跟踪点。现在我正试图发现从那里去哪里。
更新#2
现在我已经设法跟踪屏幕的中心点(xCentroTela
和yCentroTela
)并确定了点(xInicial
和yInicial
)的第一个跟踪位置。有了这个,我将第一个跟踪位置设置为屏幕的中心并尝试从那里开始。但是即使使用像屏幕中心点这样的比较,仍然无法将鼠标指向面部指向的方向。