由于从位图转换为字节缓冲区,应用崩溃了。 tflite模型或位图到字节缓冲区转换中是否有任何问题?

我想使用移动相机实时检测手语。我也在kaggle中开发了tflite模型,但是在android studio中面对这个问题,有人可以帮我吗?

android studio中的错误

Process: com.example.signtf,PID: 19729
java.nio.BufferOverflowException
    at java.nio.Buffer.nextPutIndex(Buffer.java:514)
    at java.nio.DirectByteBuffer.putFloat(DirectByteBuffer.java:789)
    at com.example.signtf.ClassifierFloatMobileNet.addPixelValue(ClassifierFloatMobileNet.java:60)
    at com.example.signtf.Classifier.convertBitmapToByteBuffer(Classifier.java:222)
    at com.example.signtf.Classifier.recognizeImage(Classifier.java:235)
    at com.example.signtf.Classifieractivity$1.run(Classifieractivity.java:99)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.os.HandlerThread.run(HandlerThread.java:65)

Classifieractivity.java

protected void addPixelValue(int pixelValue) {
    imgData.putFloat((((pixelValue >> 16) & 0xFF) - IMAGE_MEAN) / IMAGE_STD);
    imgData.putFloat((((pixelValue >> 8) & 0xFF) - IMAGE_MEAN) / IMAGE_STD);
    imgData.putFloat(((pixelValue & 0xFF) - IMAGE_MEAN) / IMAGE_STD);
   }

classifier.java

/** Writes Image data into a {@code ByteBuffer}. */
private void convertBitmapToByteBuffer(Bitmap bitmap) {
    if (imgData == null) {
        return;
    }
    imgData.rewind();
    bitmap.getPixels(intvalues,bitmap.getWidth(),bitmap.getHeight());
    // Convert the image to floating point.
    int pixel = 0;
    long startTime = SystemClock.uptimeMillis();
    for (int i = 0; i < getImageSizeX(); ++i) {
        for (int j = 0; j < getImageSizeY(); ++j) {
            final int val = intvalues[pixel++];
            addPixelValue(val);
        }
    }
    long endTime = SystemClock.uptimeMillis();
    LOGGER.v("Timecost to put values into ByteBuffer: " + (endTime - startTime));
}
zcz888 回答:由于从位图转换为字节缓冲区,应用崩溃了。 tflite模型或位图到字节缓冲区转换中是否有任何问题?

您能否附上创建imgData的代码?由于这是一个BufferOverflowException问题,所以我猜测imgData对于您尝试传递的图像来说还不够大。

或者,您可以尝试TFLite Support Library,它可以自动处理从位图到字节缓冲区的转换。参见example of an image classifier

本文链接:https://www.f2er.com/3157188.html

大家都在问