tflite (tenorflow lite) java TensorBuffer получить срез (в opencv Mat) - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь придумать эффективный способ чтения / копирования фрагментов TensorBuffer как opencv Mat s. TensorBuffer - это выход модели tflite, это стек из N изображений (тепловых карт для различных объектов), и мне нужно обрабатывать фрагменты по отдельности:

Tensorbuffer maps  // shape = [1, height, width, N];
for (int c=0; c<maps.shape()[3]; ++c) {
  // get c-th slice as Mat
  Mat map = ??? // mats[0,:,:,c]
  // do stuff with map
}

Я могу скопировать пиксель карты на пиксель в двойном l oop, но, конечно, в java это ужасно медленно:

РЕДАКТИРОВАТЬ: исправлены неверные индексы

Tensorbuffer maps  // shape = [1, height, width, N];
int[] mapsShape = maps.shape();

for (int c=0; c<mapsShape[3]; ++c) {

  // get c-th slice as Mat
  Mat mat = new Mat(mapsShape[1], mapsShape[2], CvType.CV_32F1) // map[1,:,:,c]
  float[] fa = maps.getFloatArray();
  for (int j=0; j<mapsShape[1]; ++j) {
    for (int i=0; i<mapsShape[2]; ++i) {
      map.put(j, i, fa[c + (i+j*mapsShape[2])*mapsShape[3]]);
    }
  }

  // do stuff with map

}

I ' Я полностью вне идей, любая помощь приветствуется.

...