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); }
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); }
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); } }