Correct way to passed the stream image to tensorflow-lite model using Xamarin

70 Views Asked by At

im currently developing Image Classification using xamarin form, the model works well and the prediction result is good, but my problem is, it is only works in PickPhotoAsync passing to MediaFile then the MediaFile > get stream > get the byte > feed to model. i just used this for testing only

What i really need to do is to get the image from SignaturePad > get stream > get the Byte > feed to model

i got wrong prediction when i change it to signaturePad. i hope someone will help me, thank you in advance

here's my code.

   protected async void PickPhotoAsync(object sender, EventArgs e)
    {
        var file = await CrossMedia.Current.PickPhotoAsync();

        HandlePhoto(file);
    }
    private void HandlePhoto(MediaFile file)
    {
        var stream = file.GetStreamWithImageRotatedForExternalStorage();

        var memoryStream = new MemoryStream();

        stream.CopyTo(memoryStream);

        var bytes = memoryStream.ToArray();


        var len = stream.Length;
        var pos = stream.Position;
        var read = stream.CanRead;

        var lens = bytes.Length;

        List<ImageClassificationModel> classifyImage = DependencyService.Get<IClassify>().Classify(bytes); 


        var sortedList = classifyImage.OrderByDescending(x => x.Probability);

        var top = sortedList.First();//Highest Prediction Result 


        var max = sortedList.Max(x => x.Probability);

     


    }


Here is my code when i change it to SignaturePad (Source of image) which i got bad result



  private async void SaveImagePad(object sender, EventArgs e) 
    {
        Stream image = await PadView.GetImageStreamAsync(SignatureImageFormat.Png);
       //get the stream from SignaturePad

        if (image == null)
            return;

        BinaryReader br = new BinaryReader(image);
       
        Byte[] All = br.ReadBytes((int)image.Length);
        byte[] acImage = (byte[])All;

        //Convert To Byte before passing to classifier

        List<ImageClassificationModel> classifyImage = DependencyService.Get<IClassify>().Classify(acImage);
        //File.Delete(path);
        var sortedList = classifyImage.OrderByDescending(x => x.Probability);

        var top = sortedList.First();

        var max = sortedList.Max(x => x.Probability); // i got bad and random result



    }



0

There are 0 best solutions below