public void OnFrame(object sender, FrameEventArgs args) { // Obtener el frame actual. Frame currentFrame = controller.Frame(); Vector center; center.x = 0; center.y = 0; center.z = 0; Vector size; size.x = 1000; size.y = 1000; size.z = 1000; currentTime = currentFrame.Timestamp; timeChange = currentTime - previousTime; if (timeChange > 1000) { if (currentFrame.Hands.Count() > 0) { // Consigue el primer dedo en la lista de dedos Finger finger = controller.Frame().Hands[0].Fingers[1]; InteractionBox screen = new InteractionBox(center, size); screen = controller.Frame().InteractionBox; //textBox2.AppendText("tipo de dedo : "+ finger.Type); // if (screen.IsValid) if (!screen.IsValid) { // Obtenga la velocidad de la punta del dedo var tipVelocity = (int)finger.TipVelocity.Magnitude; // Use tipVelocity para reducir el pulso // the cursor steady if (tipVelocity > 25) if (tipVelocity < 25) { leapStart = (float)numericUpDown9.Value; leapEnd = (float)numericUpDown10.Value; appStart = (float)numericUpDown11.Value; appEnd = (float)numericUpDown12.Value; leapPoint = finger.StabilizedTipPosition; leapStarty = (float)numericUpDown17.Value; leapEndy = (float)numericUpDown18.Value; appStarty = (float)numericUpDown15.Value; appEndy = (float)numericUpDown16.Value; leapPoint = finger.StabilizedTipPosition; pendienteX = (appEnd - appStart) / (leapEnd - leapStart); xScreenIntersect = screen.NormalizePoint(leapPoint, true).x; yScreenIntersect = screen.NormalizePoint(leapPoint, true).y; zScreenIntersect = screen.NormalizePoint(leapPoint, true).z; //xScreenIntersect *= 0.7f; //yScreenIntersect *= 1.5f; xScreenIntersect *= (float)numericUpDown1.Value; yScreenIntersect *= (float)numericUpDown2.Value; zScreenIntersect *= (float)numericUpDown7.Value; xScreenIntersect -= (float)numericUpDown3.Value; yScreenIntersect -= (float)numericUpDown4.Value; zScreenIntersect -= (float)numericUpDown8.Value; if (xScreenIntersect.ToString() != "NaN") { /*if (leapPoint.x > 0) * { * xTrans = leapStart - leapPoint.x; * } * else * { * xTrans = leapStart - leapPoint.x; * } * * if (leapPoint.y > 0) * { * yTrans = leapStarty - leapPoint.y; * } * else * { * yTrans = leapStarty - leapPoint.y; * }*/ //x = (int)(xScreenIntersect * screen.Width); //y = (int)(screen.Height - (yScreenIntersect * screen.Height)); if (clickState == 0) { int extendedFingers = 0; for (int f = 0; f < controller.Frame().Hands[0].Fingers.Count; f++) { Finger digit = controller.Frame().Hands[0].Fingers[f]; if (digit.IsExtended) { extendedFingers++; } } if (extendedFingers == 1) { textBox2.AppendText("Click 1"); nClick++; } else { textBox2.AppendText("_"); nClick = 0; } if (nClick == 3) { Clicking.SendClick(x, y); nClick = 0; clickState = 1; } } if (clickState == 1) { int extendedFingers = 0; for (int f = 0; f < controller.Frame().Hands[0].Fingers.Count; f++) { Finger digit = controller.Frame().Hands[0].Fingers[f]; if (digit.IsExtended) { extendedFingers++; } } if (extendedFingers == 5) { textBox2.AppendText("upClick 1"); nClick++; } else { textBox2.AppendText("_"); nClick = 0; } if (nClick == 3) { Clicking.SendUpClick(x, y); nClick = 0; clickState = 0; } } if (checkBox1.Checked) { x = (int)Math.Abs((leapPoint.x - leapStart) * ((appEnd - appStart) / (leapEnd - leapStart)) + appStart); } else { x = Math.Abs((int)((float)numericUpDown5.Value * (float)numericUpDown1.Value - xScreenIntersect * (float)numericUpDown5.Value * (float)numericUpDown1.Value + (float)numericUpDown13.Value)); //x = (int)(xScreenIntersect * (float)numericUpDown5.Value); //textBox1.AppendText("Cambio de posicion de x1 " + (int)appStart + (float)numericUpDown11.Value);// valor de appstart y numericupdown11 } if (checkBox2.Checked) { y = (int)Math.Abs((leapPoint.z - leapStarty) * ((appEndy - appStarty) / (leapEndy - leapStarty)) + appStarty); } else { //y = (int)((float)numericUpDown6.Value - (yScreenIntersect * (float)numericUpDown6.Value) + (float)numericUpDown14.Value); //y = (int)(yScreenIntersect * (float)numericUpDown6.Value + (float)numericUpDown14.Value); y = 500; } //x = x * flipX; //x = (int)((leapPoint.x - leapStart)*(leapEnd-leapStart)*(appEnd-appStart)+appStart); //textBox1. AppendText("Screen intersect X: " + xScreenIntersect.ToString()); //textBox1.AppendText("Screen intersect Y: " + yScreenIntersect.ToString()); //textBox1.AppendText("Width pixels: " + screen.Width.ToString()); //textBox1.AppendText("Height pixels: " + screen.Height .ToString()); //textBox1.AppendText("\n"); // textBox1.AppendText("x: " + x.ToString()); //textBox1.AppendText("y: " + y.ToString()); //textBox1.AppendText("\n"); // textBox1.AppendText("Tip velocity: " + tipVelocity.ToString()); // Move the cursor MouseCursor.MoveCursor(x, y); //textBox1.AppendText("\n" + new String('=', 40) + "\n"); } } } } previousTime = currentTime; } // Obtiene el marco más reciente e informa información básica Frame frame = args.frame; Console.WriteLine( "Frame id: {0}, timestamp: {1}, hands: {2}", frame.Id, frame.Timestamp, frame.Hands.Count ); foreach (Hand hand in frame.Hands) { if (hand.Fingers.Count == 1) { this.label18.Text = hand.Fingers[0].TipPosition.ToString(); } this.label18.Text = hand.Fingers[0].TipPosition.ToString(); Console.WriteLine(" Hand id: {0}, palm position: {1}, fingers: {2}", hand.Id, hand.PalmPosition, hand.Fingers.Count); this.label15.Text = hand.Id.ToString(); this.label5.Text = hand.PalmPosition.ToString(); handX = hand.PalmPosition.x; handY = hand.PalmPosition.y; handZ = hand.PalmPosition.z; this.label7.Text = hand.Fingers.Count.ToString(); // Obtiene el vector y la dirección normal de la mano Vector normal = hand.PalmNormal; Vector direction = hand.Direction; // Calcule los ángulos de pitch, roll y yaw de la mano. Console.WriteLine( " Hand pitch: {0} degrees, roll: {1} degrees, yaw: {2} degrees", direction.Pitch * 180.0f / (float)Math.PI, normal.Roll * 180.0f / (float)Math.PI, direction.Yaw * 180.0f / (float)Math.PI ); this.label13.Text = (direction.Pitch * 180.0f / (float)Math.PI).ToString(); this.label11.Text = (normal.Roll * 180.0f / (float)Math.PI).ToString(); this.label9.Text = (direction.Yaw * 180.0f / (float)Math.PI).ToString(); this.label21.Text = x.ToString(); this.label19.Text = y.ToString(); this.label28.Text = xLeap1.ToString(); this.label29.Text = yLeap1.ToString(); this.label30.Text = xLeap2.ToString(); this.label33.Text = yLeap2.ToString(); this.label32.Text = xLeap3.ToString(); this.label31.Text = yLeap3.ToString(); this.label46.Text = xTrans.ToString(); this.label48.Text = pendienteX.ToString(); //Obtiene el hueso del brazo Arm arm = hand.Arm; Console.WriteLine( " Arm direction: {0}, wrist position: {1}, elbow position: {2}", arm.Direction, arm.WristPosition, arm.ElbowPosition ); // Obtiene los dedos foreach (Finger finger in hand.Fingers) { Console.WriteLine( " Finger id: {0}, {1}, length: {2}mm, width: {3}mm", finger.Id, finger.Type.ToString(), finger.Length, finger.Width ); // Obtiene huesos de los dedos Bone bone; for (int b = 0; b < 4; b++) { bone = finger.Bone((Bone.BoneType)b); Console.WriteLine( " Bone: {0}, start: {1}, end: {2}, direction: {3}", bone.Type, bone.PrevJoint, bone.NextJoint, bone.Direction ); } } } if (frame.Hands.Count != 0) { Console.WriteLine(""); } }
public Image <Bgr, byte> Capture_ImageGrabbed(VideoCapture captureGesture, float SStartX, float SEndX, float AStartX, float AEndX, float SStartY, float SEndY, float AStartY, float AEndY) { //try //{ Mat m = new Mat(); captureGesture.Retrieve(m); if (plugin == null) { return(m.ToImage <Bgr, byte>()); } else { imageOut = plugin.RunPlugin(captureGesture).ToImage <Bgr, byte>(); sensorX = plugin.Center.X; sensorY = plugin.Center.Y; if (plugin.DetectGesture) { sensorStart = SStartX; sensorEnd = SEndX; appStart = AStartX; appEnd = AEndX; sensorStarty = (float)SStartY; sensorEndy = (float)SEndY; appStarty = (float)AStartY; appEndy = (float)AEndY; if (activeX) { xFinal = (int)Math.Abs((plugin.Center.X - sensorStart) * ((appEnd - appStart) / (sensorEnd - sensorStart)) + appStart); } else { xFinal = plugin.Center.X; } if (activeY) { yFinal = (int)Math.Abs((plugin.Center.Y - sensorStarty) * ((appEndy - appStarty) / (sensorEndy - sensorStarty)) + appStarty); } else { yFinal = plugin.Center.Y; } if (mouseRecOn) { MouseCursor.MoveCursor(xFinal, yFinal); } Console.WriteLine("X Y :" + xFinal + "," + yFinal); if (!clickDown && plugin.AutoClick) { Clicking.SendClick(xFinal, yFinal); Console.WriteLine(" Gesture recognition Click down (autoclick)"); clickDown = true; respX = plugin.Center.X; respY = plugin.Center.Y; } if (!plugin.AutoClick) { if (plugin.DetectClick && clickDown) { Clicking.SendClick(xFinal, yFinal); Console.WriteLine(" Gesture recognition Click down"); clickDown = false; } if (!plugin.DetectClick && !clickDown) { Clicking.SendUpClick(xFinal, yFinal); Console.WriteLine(" Gesture recognition Click up"); clickDown = true; } } } else { if (clickDown && plugin.AutoClick) { Clicking.SendUpClick(xFinal, yFinal); Console.WriteLine(" Gesture recognition Click up(autoclick)"); if (plugin.AutoCamCapture) { //Disparo de evento al finalizar una seleccion rectangular // si el plugin AutoCamCapture lo permite rectangularSelection.X = plugin.Center.X; rectangularSelection.Y = plugin.Center.Y; rectangularSelection.Width = Math.Abs(respX - plugin.Center.X); rectangularSelection.Height = Math.Abs(respY - plugin.Center.Y); selectedRectangle(rectangularSelection); } clickDown = false; } } } return(imageOut); }