using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using bbiwarg.Images; using bbiwarg.Output; using bbiwarg.Recognition.Tracking; using bbiwarg.Utility; using bbiwarg.Input.InputHandling; namespace bbiwarg.Recognition.TouchRecognition { class TouchTracker : Tracker { private List touchEvents; public TouchTracker(ImageSize imageSize) : base(imageSize) { touchEvents = new List(); } public void trackTouches(FrameData frameData) { trackObjects(frameData.DetectedTouches); frameData.TrackedTouches = getOptimizedTouches(); frameData.TouchEvents = flushTouchEvents(); } public override float calculateSimilarity(TrackedTouch trackedTouch, Touch detectedTouch) { return (trackedTouch.FingerID == detectedTouch.Finger.TrackID) ? 1 : 0; } protected override TrackedTouch createTrackedObject(Touch detectedObject) { TrackedTouch tt = new TrackedTouch(idPool.getNextUnusedID(), detectedObject, Parameters.TouchTrackerNumFramesDetectedUntilTracked, Parameters.TouchTrackerNumFramesLostUntilDeleted); tt.TouchEvent += touchEvent; return tt; } private List getOptimizedTouches() { List optimizedTouchs = new List(); foreach (TrackedTouch tp in TrackedObjects) { if (tp.IsTouchActive) optimizedTouchs.Add(tp.OptimizedTouch); } return optimizedTouchs; } private void touchEvent(object sender, TouchEvent e) { touchEvents.Add(e); } public List flushTouchEvents() { List flushedTouchEvents = touchEvents; touchEvents = new List(); return flushedTouchEvents; } } }