/// <summary> /// Called by `ViewController.OnFrameCaptured` once per frame with the buffer processed by the image-processing pipeline in /// `VideoCaptureDelegate.DidOutputSampleBuffer` /// </summary> /// <param name="buffer">The captured video frame.</param> public void OnFrameCaptured(CVPixelBuffer buffer) { // Run the tracker var request = new VNTrackObjectRequest(trackedRectangle, ObjectTracked); request.TrackingLevel = VNRequestTrackingLevel.Accurate; NSError error; var requests = new[] { request }; overlay.InvokeOnMainThread(() => overlay.Clear()); trackingHandler.Perform(requests, buffer, out error); if (error != null) { InvokeOnMainThread(() => overlay.Message = error.ToString()); } }
private void RectangleDetected(CGPoint[] normalizedQuadrilateral) { overlay.InvokeOnMainThread(() => { // Note conversion from inverted coordinate system! var rotatedQuadrilateral = normalizedQuadrilateral.Select(pt => new CGPoint(pt.X, 1.0 - pt.Y)).ToArray(); overlay.AddQuad(rotatedQuadrilateral); }); }