java.lang.ArrayIndexOutOfBoundsException 使用张量流进行图库图像分类

And*_*rew 5 android tensorflow

我正在开发一个应用程序来使用 tensorflow 对图像进行分类。有两个选项 1) 相机图像 2) 图库图像 当我捕获图像并将其传递给分类器时,它工作正常。但是当我从图库上传图像并将其传递给分类器时,出现错误。错误是

Caused by: java.lang.ArrayIndexOutOfBoundsException
        at android.graphics.Bitmap.checkPixelsAccess(Bitmap.java:1573)
        at android.graphics.Bitmap.getPixels(Bitmap.java:1514)
        at org.tensorflow.demo.TensorFlowImageClassifier.recognizeImage(TensorFlowImageClassifier.java:134)
        at org.tensorflow.demo.galleryimageclassifier.classify(galleryimageclassifier.java:70)
Run Code Online (Sandbox Code Playgroud)

在相机图片分类中,我通过图片如下

public void classify(View v) {
        {
            Bundle extras = getIntent().getExtras();
            byte[] byteArray = extras.getByteArray("picture");
            Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
            final int INPUT_SIZE = 299;
            final int IMAGE_MEAN = 128;
            final float IMAGE_STD = 128;
            final String INPUT_NAME = "Mul";
            final String OUTPUT_NAME = "final_result";
            final String MODEL_FILE = "file:///android_asset/stripped_retrained_graph2.pb";
            final String LABEL_FILE = "file:///android_asset/retrained_labels.txt";
            final Classifier classifier;
            classifier = TensorFlowImageClassifier.create(
                            getAssets(),
                            MODEL_FILE,
                            LABEL_FILE,
                            INPUT_SIZE,
                            IMAGE_MEAN,
                            IMAGE_STD,
                            INPUT_NAME,
                            OUTPUT_NAME);
            final long startTime = SystemClock.uptimeMillis();
            final List<Classifier.Recognition> results = classifier.recognizeImage(bmp);
            final long lastProcessingTimeMs = SystemClock.uptimeMillis() - startTime;
            ResultsView resultsView = null;
            if (resultsView == null) {
                resultsView = (ResultsView) findViewById(R.id.results);
            }
            resultsView.setResults(results);
        }
    }//End Classify 
Run Code Online (Sandbox Code Playgroud)

这工作正常。

在图库图像分类中,我按如下方式传递图像

Bundle extras = getIntent().getExtras();
            path = extras.getString("image_path");
            File imgFile = new  File(path);
            Bitmap bmp  = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            final int INPUT_SIZE = 299;
            final int IMAGE_MEAN = 128;
            final float IMAGE_STD = 128;
            final String INPUT_NAME = "Mul";
            final String OUTPUT_NAME = "final_result";
            final String MODEL_FILE = "file:///android_asset/stripped_retrained_graph2.pb";
            final String LABEL_FILE = "file:///android_asset/retrained_labels.txt";
            final Classifier classifier;
            classifier = TensorFlowImageClassifier.create(
                    getAssets(),
                    MODEL_FILE,
                    LABEL_FILE,
                    INPUT_SIZE,
                    IMAGE_MEAN,
                    IMAGE_STD,
                    INPUT_NAME,
                    OUTPUT_NAME);
            final long startTime = SystemClock.uptimeMillis();
            final List<Classifier.Recognition> results = classifier.recognizeImage(bmp);
            final long lastProcessingTimeMs = SystemClock.uptimeMillis() - startTime;
            ResultsView resultsView = null;
            if (resultsView == null) {
                resultsView = (ResultsView) findViewById(R.id.results);
            }
            resultsView.setResults(results);
        }
    }//End Classify
Run Code Online (Sandbox Code Playgroud)

有人可以指导我如何解决这个问题吗?
创建图像时是否有任何问题,因为我正在从字节数组创建“位图 bmp”图像(如果是相机捕获图像)和从图像路径(如果是画廊图像)?我从过去三天被困住并尝试了不同的解决方案,但注意到对我有用。请帮我。