Tensorflow Lite и его развертывание в Android Studio - PullRequest
0 голосов
/ 20 октября 2019

Я преобразовал свою модель keras в файл * .tflite, после попытки выяснить, как использовать tenorflow lite на андроид-студии, я испытываю трудности с предварительной обработкой данных с телефона на Android (или с моей камеры)) затем производим классификацию (так как это модели cnn с 4 выходными узлами softmax, размер входных изображений составляет (1 256 256)). Так как tenorflow и другие сайты не упоминали больше информации о входе и выходе (их типах, ... и т. Д.) Файла tflite.run (вход, выход) для генерации прогноза из изображений, которые могут поступать из галереи телефона или его камеры,и я также новичок в разработке приложений Java, надеюсь, вы, ребята, могли бы помочь мне разобраться и завершить приложение, спасибо. (извините за мою плохую грамматику)

Я включил модель tflite, откройте изображение из галереи, но не знаю, как предварительно обработать его, так как Java является новым для меня.

1 Ответ

0 голосов
/ 22 октября 2019

Вы можете лучше понять, как выполнить предварительную обработку файлов изображений (по крайней мере, для моделей в стиле ImageNet) из примера TFLite для Android здесь .

Они преобразуютРастровое изображение с использованием этой функции:

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 < 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));
  }

Точная предварительная обработка пикселей выполняется следующим образом:

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);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...