Учебное пособие по AutoML TfLite для Android Edge: как устранить исключение BufferOverflowException в учебном коде - PullRequest
0 голосов
/ 09 мая 2019

Я тестирую Google Cloud AutoML vision, я завершил учебный процесс, у меня есть модель tflite с экспортированным краевым устройством, более 100 тыс. Изображений, 25 этикеток.

Следуя инструкциям в этих двух руководствах и коду из репозитория ниже: https://cloud.google.com/vision/automl/docs/edge-quickstart https://cloud.google.com/vision/automl/docs/tflite-android-tutorial https://github.com/googlecodelabs/tensorflow-for-poets-2/tree/master/android/tflite

Я предполагаю, что проблема не в пользовательской проблеме tflite, а в какой-то проблеме совместимости, которую учебник не учитывает (либо по ошибке, либо потому, что она устарела?)

Пример приложения с предварительно обученной моделью, включенного в репозиторий Github выше, работает без каких-либо изменений. Когда я выменяю пакеты tflite и делаю изменения кода, запрошенные в учебном пособии, я сталкиваюсь с BufferOverflowException

Я предполагаю, что проблема не в пользовательской проблеме tflite, а в какой-то проблеме совместимости, которую учебник не учитывает (либо по ошибке, либо потому, что она устарела?)

Пример приложения с предварительно обученной моделью, включенного в репозиторий Github выше, работает без каких-либо изменений. Когда я выменяю пакеты tflite и делаю изменения кода, запрошенные в учебном пособии, я сталкиваюсь с BufferOverflowException

Сбой кода в блоке try / catch (добавлен мной, чтобы увидеть больше происходящего)

'''
private void convertBitmapToByteBuffer(Bitmap bitmap) {
if (imgData == null) {
  return;
}
imgData.rewind();
bitmap.getPixels(intValues, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
// Convert the image to floating point.
int pixel = 0;
long startTime = SystemClock.uptimeMillis();
for (int i = 0; i < DIM_IMG_SIZE_X; ++i) {
  for (int j = 0; j < DIM_IMG_SIZE_Y; ++j) {
    final int val = intValues[pixel++];
    try
    {
      imgData.putFloat((((val >> 16) & 0xFF))/IMAGE_STD);
      imgData.putFloat((((val >> 8) & 0xFF))/IMAGE_STD);
      imgData.putFloat((((val) & 0xFF))/IMAGE_STD);
    }
    catch (BufferOverflowException e)
    {
      Log.e("TfLiteCameraDemo", "Exception caught: ", e);
    }
  }
}
long endTime = SystemClock.uptimeMillis();
Log.d(TAG, "Timecost to put values into ByteBuffer: " + Long.toString(endTime - startTime));
}
'''

Импортированная модель tflite, следуя инструкциям из учебных пособий по ссылке выше, вылетает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...