Обработка кадров камеры 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, но результат был тот же.
Я хочу спросить, есть ли способ решить эту проблему и сделать процесс более эффективным.
Спасибо