Esempio n. 1
0
        internal RectangleScanner(Overlay overlay)
        {
            this.overlay = overlay;

            rectangleRequest = new VNDetectRectanglesRequest(RectanglesDetected);
            rectangleRequest.MaximumObservations = 10;
        }
        /// <summary>
        /// Set Initial Condition
        /// </summary>
        public void ReadAndDisplayFirstFrame(bool performRectanglesDetection, out NSError error)
        {
            var videoReader = VideoReader.Create(this.videoAsset);

            if (videoReader != null)
            {
                var firstFrame = videoReader.NextFrame();
                if (firstFrame != null)
                {
                    List <TrackedPolyRect> firstFrameRects = null;
                    if (performRectanglesDetection)
                    {
                        // Vision Rectangle Detection
                        var imageRequestHandler = new VNImageRequestHandler(firstFrame, videoReader.Orientation, new NSMutableDictionary());

                        var rectangleDetectionRequest = new VNDetectRectanglesRequest(null)
                        {
                            MinimumAspectRatio  = 0.2f,
                            MaximumAspectRatio  = 1f,
                            MinimumSize         = 0.1f,
                            MaximumObservations = 10
                        };

                        imageRequestHandler.Perform(new VNRequest[] { rectangleDetectionRequest }, out NSError performError);
                        if (performError != null)
                        {
                            error = new VisionTrackerProcessorError(VisionTrackerProcessorErrorType.FirstFrameReadFailed);
                            return;
                        }

                        var rectObservations = rectangleDetectionRequest.GetResults <VNRectangleObservation>();
                        if (rectObservations != null && rectObservations.Any())
                        {
                            this.initialRectObservations = rectObservations.ToList();
                            var detectedRects = new List <TrackedPolyRect>();
                            for (var index = 0; index < this.initialRectObservations.Count; index++)
                            {
                                var rectangleObservation = this.initialRectObservations[index];
                                var rectColor            = TrackedObjectsPalette.Color(index);

                                detectedRects.Add(new TrackedPolyRect(rectangleObservation, rectColor));
                            }

                            firstFrameRects = detectedRects;
                        }
                    }

                    error = null;
                    this.Delegate?.DisplayFrame(firstFrame, videoReader.AffineTransform, firstFrameRects);
                }
                else
                {
                    error = new VisionTrackerProcessorError(VisionTrackerProcessorErrorType.FirstFrameReadFailed);
                }
            }
            else
            {
                error = new VisionTrackerProcessorError(VisionTrackerProcessorErrorType.ReaderInitializationFailed);
            }
        }
Esempio n. 3
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            // Configure UI
            CameraButton.Enabled  = UIImagePickerController.IsSourceTypeAvailable(UIImagePickerControllerSourceType.Camera);
            GalleryButton.Enabled = UIImagePickerController.IsSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum);

            // Setup Vision Rectangles
            RectangleRequest = new VNDetectRectanglesRequest(HandleRectangles);
            RectangleRequest.MaximumObservations = 10; // limit on the number of rectangles to look for - can increase "thinking time"
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            // Configure UI
            CameraButton.Enabled  = UIImagePickerController.IsSourceTypeAvailable(UIImagePickerControllerSourceType.Camera);
            GalleryButton.Enabled = UIImagePickerController.IsSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum);

            // Load the ML model
            var bundle    = NSBundle.MainBundle;
            var assetPath = bundle.GetUrlForResource("MNISTClassifier", "mlmodelc");
            var mlModel   = MLModel.FromUrl(assetPath, out NSError mlErr);
            var model     = VNCoreMLModel.FromMLModel(mlModel, out NSError vnErr);

            // Initialize
            RectangleRequest      = new VNDetectRectanglesRequest(HandleRectangles);
            ClassificationRequest = new VNCoreMLRequest(model, HandleClassification);
        }