Ejemplo n.º 1
0
        public void Update(IEnumerable<BlobsTracker.TrackedBlob> updatedBlobs)
        {
            /* Rajouter les nouveaux blobs */
            foreach(var item in updatedBlobs)
            {
                if(item != null && !currentBlobs.ContainsKey(item))
                    currentBlobs[item] = new BlobGestureFollower(item, 10, 10, TimeSpan.FromSeconds(2), TimeSpan.FromMilliseconds(200));
            }

            /* Retirer ceux qui sont morts, mettre à jour les autres */
            var dedBlobs = new List<BlobsTracker.TrackedBlob>();
            foreach (var tracked in currentBlobs)
            {
                tracked.Value.Update();

                if (tracked.Value.State == Interaction.CursorState.Default)
                {
                    /* Il est mort, jim ! */
                    dedBlobs.Add(tracked.Key);
                }
                else
                {
                    /* On essaye les détections */
                    TryDetect(tracked.Value);
                }
            }

            /* Ménage */
            foreach (var ded in dedBlobs)
                currentBlobs.Remove(ded);
        }
Ejemplo n.º 2
0
        private double ComputeGestureScore(DateTime now, BlobGestureFollower follower, RecognizedGesture desiredGesture)
        {
            var sequence = follower.Sequence;

            if ((now - sequence.LastModificationTime) >= gestureDetectionLatency)
            {
                var machine = desiredGesture.Machine;
                if (sequence.Count >= machine.Descriptor.Count)
                {
                    machine.Reset();

                    for (int i = 0; i < sequence.Count && !machine.Valid; i++)
                    {
                        var gesture = sequence[sequence.Count - i - 1];
                        if (gesture != null)
                        {
                            machine.Update(gesture.Gesture);
                        }
                    }

                    return machine.Valid ? machine.Score : 0;
                }
                else
                    return 0;
            }
            else
                return 0;
        }
Ejemplo n.º 3
0
        private void TryDetect(BlobGestureFollower follower)
        {
            if (follower == null)
                throw new ArgumentNullException("follower");

            var scoresForEachMoves =
                from desiredGesture in recognizedGestures
                select new { gesture = desiredGesture, score = ComputeGestureScore(DateTime.Now, follower, desiredGesture) };

            var bestMatch =
                (
                from match in scoresForEachMoves
                where match.score > 0
                orderby match.score descending
                select match.gesture
                ).FirstOrDefault();

            if (bestMatch != null)
            {
                follower.Sequence.Reset();

                bestMatch.RaiseActivated(follower.Blob);
            }
        }