Как получить положение / координаты обнаруженного объекта с помощью интерпретатора TensorFlow Lite? - PullRequest
0 голосов
/ 13 июля 2020

Я создаю приложение для обнаружения объектов с api камеры (camerax) и самообучающейся моделью tflite.

Для интеграции tflite я попробовал два подхода. Сначала с помощью ML Kit, а затем с помощью вывода TensorFlow Lite. Мне больше нравится второй подход, но там У меня проблема с получением координат полей обнаружения обнаруженных объектов.

В качестве основы я использовал код из: https://github.com/soum-io/TensorFlowLiteInceptionTutorial/blob/master/app/src/main/java/com/soumio/inceptiontutorial/Classify.java.

import org.tensorflow.lite.Interpreter;
.
.
.
private final Interpreter.Options tfliteOptions = new Interpreter.Options();
private Interpreter tflite;

private byte[] [] labelProbArray = null;
private int[] intValues;
private int DIM_IMG_SIZE_X = 224;
private int DIM_IMG_SIZE_Y = 224;
private int DIM_PIXEL_SIZE = 3;
.
.
.
choosenModel = "detect_224_quant.tflite";
choosenLabel = "labelmap.txt";

intValues = new int[DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y];
tflite = new Interpreter(loadModelFile(), tfliteOptions);
labelList = loadLabelList();

imgData = ByteBuffer.allocateDirect(DIM_IMG_SIZE_X * DIM_IMG_SIZE_Y * DIM_PIXEL_SIZE);
imgData.order(ByteOrder.nativeOrder());

labelProbArray = new byte[1][labelList.size()];

Bitmap bitmap_orig = toBitmap(image);
Bitmap bitmap = getResizedBitmap(bitmap_orig, DIM_IMG_SIZE_X, DIM_IMG_SIZE_Y);
convertBitmapToByteBuffer(bitmap); //create imgData

tflite.run(imgData, labelProbArray);

printLabels();

Вывод для printLabels

private void printLabels() {
    for (int i = 0; i < labelList.size(); i++){
       
            sortedLabels.add(
                    new AbstractMap.SimpleEntry<>(labelList.get(i), (labelProbArray[0][i] & 0xff) / 255.0f));
        
        if (sortedLabels.size() > RESULTS_TO_SHOW) {
            sortedLabels.poll();
        }
    }
    final int size = sortedLabels.size();
    for (int i = 0; i < size; i++){
        Map.Entry<String, Float> label = sortedLabels.poll();
        topLabels[i] = label.getKey();
        topConfidence[i] = String.format("%.0f%%", label.getValue()*100);

    }

Итак, я думаю, мне просто нужно будет прочитать положение / координаты обнаруженного объекта из выходного тензора (labelProbArray) как-то. Но как? Надеюсь, кто-нибудь поможет!

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