Не удалось развернуть пользовательскую модель классификации изображений (TFLITE) - PullRequest
0 голосов
/ 06 марта 2020

Я только что обучил модель классификации изображений с одной меткой, используя Google AutoML, но не смог использовать ее в телефоне Android. Я изменил код и заменил свою пользовательскую модель на пример модели TensorFlow с https://github.com/tensorflow/examples/tree/master/lite/examples/image_classification/android в соответствии с https://cloud.google.com/vision/automl/docs/tflite-android-tutorial. Однако приложение продолжает обрабатывать sh и показывать, что оно устарело.

Вот ошибки в logcat:

8472-8483/? E/flitecameradem: Unable to peek into adb socket due to error. Closing socket.: Connection reset by peer
8472-8472/android.example.com.tflitecamerademo E/libc: Access denied finding property "vendor.camera.aux.packagelist"
8472-8472/android.example.com.tflitecamerademo E/libc: Access denied finding property "vendor.camera.aux.packagelist"
8472-8472/android.example.com.tflitecamerademo E/libc: Access denied finding property "vendor.camera.aux.packagelist"
8472-8496/android.example.com.tflitecamerademo E/libc: Access denied finding property "vendor.camera.aux.packagelist"
8472-8472/android.example.com.tflitecamerademo E/libc: Access denied finding property "persist.vendor.camera.privapp.list"
8472-8714/android.example.com.tflitecamerademo E/libc: Access denied finding property "vendor.camera.hal1.packagelist"
8472-8496/android.example.com.tflitecamerademo E/libc: Access denied finding property "vendor.camera.aux.packagelist"
8472-8496/android.example.com.tflitecamerademo E/libc: Access denied finding property "vendor.camera.aux.packagelist"
8472-8472/android.example.com.tflitecamerademo E/libc: Access denied finding property "vendor.camera.aux.packagelist"
8472-8762/android.example.com.tflitecamerademo E/libc: Access denied finding property "persist.camera.legacy_perf"
8472-8713/android.example.com.tflitecamerademo E/AndroidRuntime: FATAL EXCEPTION: CameraBackground
Process: android.example.com.tflitecamerademo, PID: 8472
java.nio.BufferOverflowException
    at java.nio.Buffer.nextPutIndex(Buffer.java:542)
    at java.nio.DirectByteBuffer.putFloat(DirectByteBuffer.java:802)
    at com.example.android.tflitecamerademo.ImageClassifier.convertBitmapToByteBuffer(ImageClassifier.java:195)
    at com.example.android.tflitecamerademo.ImageClassifier.classifyFrame(ImageClassifier.java:113)
    at com.example.android.tflitecamerademo.Camera2BasicFragment.classifyFrame(Camera2BasicFragment.java:663)
    at com.example.android.tflitecamerademo.Camera2BasicFragment.access$900(Camera2BasicFragment.java:69)
    at com.example.android.tflitecamerademo.Camera2BasicFragment$5.run(Camera2BasicFragment.java:558)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:224)
    at android.os.HandlerThread.run(HandlerThread.java:65)

1 Ответ

0 голосов
/ 09 апреля 2020

Чтобы исправить ошибку BufferOverflowException, вы также должны изменить способ помещения значений в буфер imgData. Поскольку мы изменили imgData, чтобы вместо байтов вместо байтов содержалось байтов, нам также необходимо заменить putFloat на put в методе convertBitmapToByteBuffer(Bitmap bitmap):

imgData.put((byte) ((((val >> 16) & 0xFF)-IMAGE_MEAN)/IMAGE_STD));
imgData.put((byte) ((((val >> 8) & 0xFF)-IMAGE_MEAN)/IMAGE_STD));
imgData.put((byte) ((((val) & 0xFF)-IMAGE_MEAN)/IMAGE_STD));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...