private static NSUrl CompileModel(string modelName)
        {
            var uncompiled = NSBundle.MainBundle.GetUrlForResource(modelName, customVisionModelExtension, customVisionModelFolderName);
            var modelPath  = MLModel.CompileModel(uncompiled, out NSError err);

            if (err != null)
            {
                throw new NSErrorException(err);
            }

            return(modelPath);
        }
        private NSUrl CompileModel(string modelName)
        {
            var uncompiled = NSBundle.MainBundle.GetUrlForResource(modelName, "mlmodel");
            var modelPath  = MLModel.CompileModel(uncompiled, out NSError err);

            if (err != null)
            {
                throw new NSErrorException(err);
            }

            return(modelPath);
        }
        private NSUrl CompileModel(string modelName)
        {
            var uncompiled = NSBundle.MainBundle.GetUrlForResource(modelName, MODEL_EXT);
            var modelPath  = MLModel.CompileModel(uncompiled, out var err);

            if (err != null)
            {
                throw new ClassifierException(err.ToString());
            }

            return(modelPath);
        }
Exemple #4
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            var modelUrl         = NSBundle.MainBundle.GetUrlForResource("HotDogOrNot", "mlmodel");
            var compiledModelUrl = MLModel.CompileModel(modelUrl, out var error);

            if (error == null)
            {
                model = MLModel.Create(compiledModelUrl, out error);
                Console.WriteLine($"MODEL LOADED: {model}");
                if (error == null)
                {
                    var nvModel = VNCoreMLModel.FromMLModel(model, out error);
                    if (error == null)
                    {
                        classificationRequest = new VNCoreMLRequest(nvModel, HandleVNRequest);
                    }
                }
            }
            if (error != null)
            {
                Console.WriteLine($"ERROR LOADING MODEL: {error}");
            }

            arkitSupported = ARConfiguration.IsSupported;

            if (arkitSupported)
            {
                arView = new ARSCNView()
                {
                    Frame            = View.Bounds,
                    AutoresizingMask = UIViewAutoresizing.FlexibleDimensions,
                };
                arView.AddGestureRecognizer(new UITapGestureRecognizer(HandleARTapped));
                View.AddSubview(arView);
            }
            else
            {
                imgView = new UIImageView(View.Bounds)
                {
                    BackgroundColor        = UIColor.Black,
                    ContentMode            = UIViewContentMode.ScaleAspectFill,
                    UserInteractionEnabled = true,
                    Frame            = View.Bounds,
                    AutoresizingMask = UIViewAutoresizing.FlexibleDimensions,
                };
                imgView.AddGestureRecognizer(new UITapGestureRecognizer(HandleImageTapped));
                View.AddSubview(imgView);
            }
        }
        public void Classify(byte[] bytes)
        {
            var modelUrl = NSBundle.MainBundle.GetUrlForResource("people-or-not", "mlmodel");
            var compiledUrl = MLModel.CompileModel(modelUrl, out var error);
            var compiledModel = MLModel.Create(compiledUrl, out error);

            var vnCoreModel = VNCoreMLModel.FromMLModel(compiledModel, out error);

            var classificationRequest = new VNCoreMLRequest(vnCoreModel, HandleVNRequest);

            var data = NSData.FromArray(bytes);
            var handler = new VNImageRequestHandler(data, ImageIO.CGImagePropertyOrientation.Up, new VNImageOptions());
            handler.Perform(new[] { classificationRequest }, out error);
        }
            private VNCoreMLModel LoadModel(string modelUrl)
            {
                var webClient = new WebClient();

                string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                string localFilename = "current.mlmodel";
                string localPath     = Path.Combine(documentsPath, localFilename);

                webClient.DownloadFile(modelUrl, localPath);

                var fileUrl = NSUrl.FromFilename(localPath);

                //                var downloadManager = CrossDownloadManager.Current;
                //                var file = downloadManager.CreateDownloadFile(modelUrl);
                //                downloadManager.Start(file);

                //                while(file.Status != Plugin.DownloadManager.Abstractions.DownloadFileStatus.COMPLETED)
                //                {
                //                    System.Threading.Thread.Sleep(1000);
                //file.
                //}

                //var url = new NSUrl(file.Url);
                //var modelPath = NSBundle.MainBundle.GetUrlForResource(modelName, "mlmodelc") ?? CompileModel(modelName);

                //if (modelPath == null)
                //throw new ImageClassifierException($"Model {modelName} does not exist");
                var compliedModel = MLModel.CompileModel(fileUrl, out NSError complieErr);

                if (complieErr != null)
                {
                    throw new NSErrorException(complieErr);
                }

                var mlModel = MLModel.Create(compliedModel, out NSError createErr);

                if (createErr != null)
                {
                    throw new NSErrorException(createErr);
                }

                var model = VNCoreMLModel.FromMLModel(mlModel, out NSError err);

                if (err != null)
                {
                    throw new NSErrorException(err);
                }

                return(model);
            }
Exemple #7
0
        private MLModel LoadModelInternal(NSUrl rawModelUrl)
        {
            var compiledModelUrl = MLModel.CompileModel(rawModelUrl, out NSError compileError);

            if (compileError != null)
            {
                System.Diagnostics.Debug.WriteLine(compileError);
                throw new InvalidOperationException(compileError.Description);
            }

            var loadedModel = MLModel.Create(compiledModelUrl, out NSError createError);

            if (createError != null)
            {
                System.Diagnostics.Debug.WriteLine(createError);
                throw new InvalidOperationException(createError.Description);
            }

            return(loadedModel);
        }
        private async void PickCamera()
        {
            if (CrossMedia.Current == null)
            {
                await CrossMedia.Current.Initialize();
            }


            if (!CrossMedia.Current.IsCameraAvailable ||
                !CrossMedia.Current.IsTakePhotoSupported || !CrossMedia.Current.IsPickPhotoSupported)
            {
                UserDialogs.Instance.Alert("Device options not supported.", null, "OK");
                return;
            }

            Console.WriteLine("Pcking Photo..");

            var file = await CrossMedia.Current.PickPhotoAsync();

            {
            };

            if (file == null)
            {
                UserDialogs.Instance.Alert("You didn't pick a photo.", null, "OK");
                return;
            }

            Stream s = file.GetStream();

            byte[] result = null;
            var    buffer = new byte[16 * 1024];

            using (MemoryStream ms = new MemoryStream())
            {
                int read;
                while ((read = s.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }
                result = ms.ToArray();
            }

            //show and tell shit, then Run ML
            SEEFOOD.Hidden             = true;
            stat.Hidden                = false;
            selectCamRollButton.Hidden = true;
            takePhotoButton.Hidden     = true;
            image.Hidden               = false;
            spinnyboy.Hidden           = false;
            this.hotdogLbl.Hidden      = true;
            this.ramenLbl.Hidden       = true;
            this.ramenOrHotdog.Hidden  = true;
            spinnyboy.StartAnimating();
            returnToMenu.Hidden  = false;
            this.stat.Text       = "Analyzing...";
            this.stat.TextColor  = UIKit.UIColor.Black;
            showDebugInfo.Hidden = false;
            var data = NSData.FromArray(result);

            image.Image = UIImage.LoadFromData(data);
            await Task.Delay(1000);

            //ML

            Console.WriteLine("Selected: " + ViewController.Type.ToString());

            //First we check what type of thing we have here
            if (ViewController.Type.Equals("Hotdog"))
            {
                var     assetPath             = NSBundle.MainBundle.GetUrlForResource("model", "mlmodel");
                var     transform             = MLModel.CompileModel(assetPath, out NSError compErr);
                MLModel model                 = MLModel.Create(transform, out NSError fucl);
                var     vnModel               = VNCoreMLModel.FromMLModel(model, out NSError rror);
                var     ciImage               = new CIImage(image.Image);
                var     classificationRequest = new VNCoreMLRequest(vnModel);

                //just do it
                var handler = new VNImageRequestHandler(ciImage, ImageIO.CGImagePropertyOrientation.Up, new VNImageOptions());
                handler.Perform(new[] { classificationRequest }, out NSError perfError);
                var results = classificationRequest.GetResults <VNClassificationObservation>();
                var thing   = results[0];
                Console.WriteLine("Hotdog OUT " + thing.Identifier);
                switch (thing.Identifier)
                {
                case "hotdog":
                    if (thing.Confidence > 0.85f)
                    {
                        this.stat.Text          = "✅ Hotdog";
                        this.stat.TextColor     = UIKit.UIColor.Green;
                        this.stat.TextAlignment = UITextAlignment.Center;
                        spinnyboy.Hidden        = true;
                        spinnyboy.StopAnimating();
                    }
                    else
                    {
                        this.stat.Text          = "❌ Not Hotdog";
                        this.stat.TextColor     = UIKit.UIColor.Red;
                        this.stat.TextAlignment = UITextAlignment.Center;
                        spinnyboy.Hidden        = true;
                        spinnyboy.StopAnimating();
                    }

                    break;

                case "nothotdog":
                    this.stat.Text          = "❌ Not Hotdog";
                    this.stat.TextColor     = UIKit.UIColor.Red;
                    this.stat.TextAlignment = UITextAlignment.Center;
                    spinnyboy.Hidden        = true;
                    spinnyboy.StopAnimating();
                    break;
                }
                this.confidence = thing.Confidence;
                Vibration.Vibrate(500);
            }
            else
            {
                NSUrl modelPath = NSBundle.MainBundle.GetUrlForResource("Ramen", "mlmodel");
                if (modelPath == null)
                {
                    Console.WriteLine("peeepee");
                }
                var     transform             = MLModel.CompileModel(modelPath, out NSError compErr);
                MLModel model                 = MLModel.Create(transform, out NSError fucl);
                var     vnModel               = VNCoreMLModel.FromMLModel(model, out NSError rror);
                var     ciImage               = new CIImage(image.Image);
                var     classificationRequest = new VNCoreMLRequest(vnModel);

                //just do it
                var handler = new VNImageRequestHandler(ciImage, ImageIO.CGImagePropertyOrientation.Up, new VNImageOptions());
                handler.Perform(new[] { classificationRequest }, out NSError perfError);
                var results = classificationRequest.GetResults <VNClassificationObservation>();
                var thing   = results[0];
                Console.WriteLine("Ramen OUT " + thing.Identifier);
                switch (thing.Identifier)
                {
                case "ramen":
                    if (thing.Confidence > 0.85f)
                    {
                        this.stat.Text          = "✅ Ramen";
                        this.stat.TextColor     = UIKit.UIColor.Green;
                        this.stat.TextAlignment = UITextAlignment.Center;
                        spinnyboy.Hidden        = true;
                        spinnyboy.StopAnimating();
                    }
                    else
                    {
                        this.stat.Text          = "❌ Not Ramen";
                        this.stat.TextColor     = UIKit.UIColor.Red;
                        this.stat.TextAlignment = UITextAlignment.Center;
                        spinnyboy.Hidden        = true;
                        spinnyboy.StopAnimating();
                    }

                    break;

                case "notramen":
                    this.stat.Text          = "❌ Not Ramen";
                    this.stat.TextColor     = UIKit.UIColor.Red;
                    this.stat.TextAlignment = UITextAlignment.Center;
                    spinnyboy.Hidden        = true;
                    spinnyboy.StopAnimating();
                    break;
                }
                this.confidence = thing.Confidence;
                Vibration.Vibrate(500);
            }
        }