Beispiel #1
0
    public override void FlickOccured(object sender, System.EventArgs e)
    {
        bool cast = twoFingerFlickGesture.ScreenFlickVector.x > 0f;

        if (cast && !recognized)
        {
            recognized = true;

            PDollarGestureRecognizer.Gesture candidate = new PDollarGestureRecognizer.Gesture(points.ToArray());
            Result gestureResult = PointCloudRecognizer.Classify(candidate, trainingSet.ToArray());

            if (gestureResult.Score > runeSuccessScore)
            {
                RuneSuccess(gestureResult);
            }
            else
            {
                RuneFailure();
            }
        }
        else if (!cast)
        {
            RuneFailure();
        }
    }
Beispiel #2
0
    void Update()
    {
        //if (Input.GetMouseButtonDown(1))
        //    rX = Input.mousePosition.x;

        //if (Input.GetMouseButtonUp(1))
        //{
        //    if (Input.mousePosition.x > rX)
        //    {
        //        recognized = true;

        //        PDollarGestureRecognizer.Gesture candidate = new PDollarGestureRecognizer.Gesture(points.ToArray());
        //        Result gestureResult = PointCloudRecognizer.Classify(candidate, trainingSet.ToArray());

        //        if (gestureResult.Score > runeSuccessScore)
        //            RuneSuccess(gestureResult);
        //        else
        //            RuneFailure();
        //    }
        //    else
        //    {
        //        RuneFailure();
        //    }
        //}

        if (Input.GetKeyDown(KeyCode.C))
        {
            if (!recognized)
            {
                recognized = true;

                PDollarGestureRecognizer.Gesture candidate = new PDollarGestureRecognizer.Gesture(points.ToArray());
                Result gestureResult = PointCloudRecognizer.Classify(candidate, trainingSet.ToArray());

                if (gestureResult.Score > runeSuccessScore)
                {
                    RuneSuccess(gestureResult);
                }
                else
                {
                    RuneFailure();
                }
            }
        }
        else if (Input.GetKeyDown(KeyCode.X))
        {
            RuneFailure();
        }
    }
        public void RenderGesture(Gesture nextGesture)
        {
            if (currentGestureLineRenderer != null) Destroy(currentGestureLineRenderer.gameObject);

            currentGestureLineRenderer = Instantiate(gestureOnScreenPrefab).GetComponent<LineRenderer>();

            Vector3[] rendererPoints = nextGesture.Points
                .Select(gesturePoint => new Vector3(gesturePoint.X, -gesturePoint.Y, 0))
                .ToArray();

            currentGestureLineRenderer.SetVertexCount(rendererPoints.Length);
            currentGestureLineRenderer.SetPositions(rendererPoints);

            StartCoroutine("TransformGesture");
        }
 /// <summary>
 /// Main function of the $P recognizer.
 /// Classifies a candidate gesture against a set of training samples.
 /// Returns the class of the closest neighbor in the training set.
 /// </summary>
 /// <param name="candidate"></param>
 /// <param name="trainingSet"></param>
 /// <returns></returns>
 public static string Classify(Gesture candidate, Gesture[] trainingSet)
 {
     float minDistance = float.MaxValue;
     string gestureClass = "";
     foreach (Gesture template in trainingSet)
     {
         float dist = GreedyCloudMatch(candidate.Points, template.Points);
         if (dist < minDistance)
         {
             minDistance = dist;
             gestureClass = template.Name;
         }
     }
     return gestureClass;
 }
        /// <summary>
        /// Main function of the $P recognizer.
        /// Classifies a candidate gesture against a set of training samples.
        /// Returns the class of the closest neighbor in the training set.
        /// </summary>
        /// <param name="candidate"></param>
        /// <param name="trainingSet"></param>
        /// <returns></returns>
        public static Result Classify(Gesture candidate, Gesture[] trainingSet)
        {
            float minDistance = float.MaxValue;
            string gestureClass = "";
            foreach (Gesture template in trainingSet)
            {
                float dist = GreedyCloudMatch(candidate.Points, template.Points);
                if (dist < minDistance)
                {
                    minDistance = dist;
                    gestureClass = template.Name;
                }
            }

			return gestureClass == "" ? new Result() {GestureClass = "No match", Score = 0.0f} : new Result() {GestureClass = gestureClass, Score = Mathf.Max((minDistance - 2.0f) / -2.0f, 0.0f)};
        }
 /// <summary>
 /// Main function of the $P recognizer.
 /// Classifies a candidate gesture against a set of training samples.
 /// Returns the class of the closest neighbor in the training set.
 /// </summary>
 /// <param name="candidate"></param>
 /// <param name="trainingSet"></param>
 /// <returns></returns>
 public static string Classify(Gesture candidate, Gesture[] trainingSet)
 {
     float minDistance = float.MaxValue;
     string gestureClass = "";
     //float sum = 0f;
     foreach (Gesture template in trainingSet)
     {
         float dist = GreedyCloudMatch(candidate.Points, template.Points);
         //sum += dist;
         if (dist < minDistance)
         {
             minDistance = dist;
             gestureClass = template.Name;
         }
     }
     //probability = 1f - ( minDistance / sum); //TODO: give some better notion of confidence
     return gestureClass;
 }
        public void CompareShapes()
        {
            Gesture candidate = new Gesture(drawingBoard.DrawingPoints.ToArray());
            Result gestureResult = PointCloudRecognizer.Classify(candidate, new[] { curGesture });

            string statusString = "Shapes match on " + (int) (gestureResult.Score * 100) + " %." + Environment.NewLine;

            if (gestureResult.Score < RecognitionThreshold)
            {
                recognitionStatus = RecognitionStatus.Fail;
                statusString += "Threshold is " + (int)(RecognitionThreshold * 100) + " %. Try again";
                drawingBoard.CleanDrawingArea();
            }
            else
            {
                recognitionStatus = RecognitionStatus.Recognized;
                statusString += "You got it.";
                GestureRecognized();
            }
            statusText.text = statusString;
        }
Beispiel #8
0
    public void InputGesture(NetworkMessage msg)
    {
        string name   = msg.reader.ReadString();
        int    length = msg.reader.ReadInt32();

        Point[] points = new Point[length];
        for (int a = 0; a < length; a++)
        {
            Vector2 v = msg.reader.ReadVector2();
            points [a] = new Point(v.x, v.y, msg.reader.ReadInt32());
        }
        PDollarGestureRecognizer.Gesture candidate = new PDollarGestureRecognizer.Gesture(points);
        Result gestureResult = PointCloudRecognizer.Classify(candidate, trainingSet);

        if (inputGesture.ContainsKey(name))
        {
            inputGesture [name] = gestureResult;
        }
        else
        {
            inputGesture.Add(name, gestureResult);
        }
    }
Beispiel #9
0
    private void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            ClearGfxs();

            List <Point> myPoints = new List <Point> ();

            int strokeId = 0;
            foreach (Gesture.Stroke stroke in mySave.GestureSets[curGestureGroupIndex].repetitions[curGestureIndex].strokes)
            {
                foreach (Gesture.Point point in stroke.points)
                {
                    myPoints.Add(new Point(point.x, point.y, strokeId));
                }
                strokeId++;
            }

            PDollarGestureRecognizer.Gesture myGesture = new PDollarGestureRecognizer.Gesture(myPoints.ToArray());

            foreach (Point point in myGesture.Points)
            {
                GameObject p = Instantiate(pointPrefab, transform);
                p.transform.position = new Vector3(point.X, point.Y, 0);
            }
        }

        if (Input.GetMouseButtonDown(0))
        {
            ScreenCapture.CaptureScreenshot("Shape " + capIndex.ToString() + ".png");
            capIndex++;
        }
        if (Input.mouseScrollDelta.y != 0)
        {
            ChangeGesture((int)Input.mouseScrollDelta.y);
        }
    }
        private void PickAnotherRandomGesture()
        {
            Gesture prevGesture = curGesture;

            do curGesture = gestures[Random.Range(0, gestures.Count)];
            while (curGesture == prevGesture);
        }
Beispiel #11
0
    void Update()
    {
        if (myBt.GetButtonDown)
        {
            holdTime               += Time.deltaTime;
            down                    = true;
            tapped                  = true;
            held                    = false;
            holdTime                = 0;
            doubleTap               = false;
            DragDeltaInches         = Vector2.zero;
            DragDeltaPixels         = Vector2.zero;
            AbsoluteDragDeltaInches = 0;
            AbsoluteDragDeltaPixels = 0;
            MeanDragSpeedPixels     = 0;
            MeanDragSpeedInches     = 0;
            DragSpeedPixels         = 0;
            DragSpeedInches         = 0;
            if (timeSinceLastDownToNextDown < 0.2f)
            {
                doubleTapHold = true;
            }
            timeSinceLastDownToNextDown = 0;
            ++strokeId;
            vertexCount = 0;
            result      = EmptyResult;
        }
        else if (myBt.GetButton)
        {
            holdTime += Time.deltaTime;

            if (holdTime > 0.3f)
            {
                held = true;
            }

            DragDeltaPixels         += curDelta;
            AbsoluteDragDeltaPixels += curDelta.magnitude;
            MeanDragSpeedPixels      = AbsoluteDragDeltaPixels / holdTime;
            DragSpeedPixels          = curDelta.magnitude / Time.deltaTime;

            DragDeltaInches         = DragDeltaPixels / Screen.dpi;
            AbsoluteDragDeltaInches = AbsoluteDragDeltaPixels / Screen.dpi;
            MeanDragSpeedInches     = MeanDragSpeedPixels / Screen.dpi;
            DragSpeedInches         = DragSpeedPixels / Screen.dpi;
        }
        else if (myBt.GetButtonUp)
        {
            if (points.Count < 2)
            {
                //tap
                if (timeSinceLastDownToNextUp < 0.3f)
                {
                    doubleTap = true;
                }
            }
            else if (points.Count == 2)
            {
                //swipe
            }
            else
            {
                PDollarGestureRecognizer.Gesture candidate = new PDollarGestureRecognizer.Gesture(points.ToArray());
                Result gestureResult = PointCloudRecognizer.Classify(candidate, trainingSet);

                if (gestureResult.GestureClass == "Tap")
                {
                    //tap
                    if (timeSinceLastDownToNextUp < 0.3f)
                    {
                        doubleTap = true;
                    }
                }
                else if (gestureResult.GestureClass == "Swipe")
                {
                    //swipe
                }
                else
                {
                    //send points
                }
            }


            doubleTapHold             = false;
            timeSinceLastDownToNextUp = holdTime;
            timeSinceLastDownToNextUp = holdTime;
            holdTime = 0;
            held     = false;
            points.Clear();
            //lineRenderer.SetVertexCount (0);
        }
        else
        {
            doubleTap = false;
        }
        curDelta = Vector2.zero;
    }
        /// <summary>
        /// Main function of the $P recognizer.
        /// Classifies a candidate gesture against a set of training samples.
        /// Returns the class of the closest neighbor in the training set.
        /// </summary>
        /// <param name="candidate"></param>
        /// <param name="trainingSet"></param>
        /// <returns></returns>
        public static string Classify(Gesture candidate, Gesture[] trainingSet)
        {
            float minDistance = float.MaxValue;
            string gestureClass = "";
            //Debug.Log (candidate.Points [1]);

            foreach (Gesture template in trainingSet)
            {
                //Debug.Log ("Gesture = "+template.Name+"  _  Candidate Length: "+candidate.Points.Length);

                float dist = GreedyCloudMatch(candidate.Points, template.Points);
                if (dist < minDistance)
                {
                    minDistance = dist;
                    gestureClass = template.Name;
                    Debug.Log (gestureClass+"  "+minDistance);
                }
            }
            return gestureClass;
        }