我正在使用一些第三方库在基于 Kinect 的应用程序中进行手势检测。一切正常,但我只有一个小问题,如果你们中的某个人能帮助我,那就太好了。
要使用这个库,我必须这样写kinect_SkeletonFrameReady
:
void kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
Skeleton[] skeletons = new Skeleton[0];
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (skeletonFrame != null)
{
skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletons);
}
}
if (skeletons.Length > 0 && inter != null)
{
Skeleton first = null;
int b = 0;
while (b < skeletons.Length && first == null)
{
if (skeletons[b].TrackingState == SkeletonTrackingState.Tracked)
first = skeletons[b];
b++;
}
if (first != null)
{
GDLWatch.Stop();
double TimeHelp = GDLWatch.Elapsed.TotalSeconds;
GDLWatch.Reset();
GDLWatch.Start();
Point3D[] bodyParts = GenerateBodyPartArray(first, 0);
System.String[] con = inter.ReturnConclusions(bodyParts, 0, TimeHelp);
System.String conclusionsString = "";
for (int a = 0; a < con.Length; a++)
{
conclusionsString += con[a] + "\r\n";
System.Diagnostics.Debug.WriteLine(conclusionsString);
if (conclusionsString.Contains("!"))
{
this.alreadyDone++;
this.RaisePropertyChanged(() => this.AlreadyDone);
}
}
}
}
}
唯一的问题是变量allreadyDone
不是增加一次,而是多次增加。我认为来自传感器的数据在一段时间内与手势描述相匹配。当手势第一次出现时,如何只增加一次这个变量?添加一些喜欢break
或return
不起作用的东西。