Обработка кадров камеры Android с помощью MultiThreading

Я использую OpenCV, Vuforia и Tesseract (tess-two) для моего приложения. Моя система работает так:

Vuforia обнаруживает цель и отправляет полный кадр в OpenCV (JNI)OpenCV получает кадр и выполняет некоторую обработку изображения, чтобы сделать его читаемым для Tesseract (JNI)Tesseract (tess-two) берет байтовые массивы из opencv и выполняет OCR-обработку изображения (байтовый массив)

Моя проблема начинается с 3-й части. Так как моя цель состоит в том, чтобы сделать ocr для кадров в реальном времени, я пытаюсь использовать многопоточность, чтобы сделать пользовательский интерфейс гладким, а не замедлять визуальную визуализацию.

Я решил использовать AsyncTask для этого следующим образом:

public void getFromNative(final byte[] imagedata, final int width,final int height,final byte [] typeData, final int typeWidth,final int typeHeight) {

        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                ocr(imagedata, width, height,typeData,typeWidth,typeHeight);                    
                return null;
            }

        }.execute();                
}

Это делает потоковую передачу в реальном времени более плавной, чем обычно, в однопоточном режиме. Но проблема в том, что он запускает так много AsyncTask из-за живых кадров камеры, даже когда я отворачиваю камеру от цели, он продолжает выполнять OCR на ранее созданном AsycnTask и возвращает результаты для них один за другим. В дополнение к AsyncTask я попробовал IntenService, но результат был тот же.

Я хочу спросить, есть ли способ решить эту проблему и сделать процесс более эффективным.

Спасибо

Ответы на вопрос(1)

Ваш ответ на вопрос