Przetwarzanie ramek kamery Android z wielowątkowością

Używam OpenCV, Vuforia i Tesseract (tess-two) do mojej aplikacji. Mój system działa tak:

Vuforia wykrywa cel i wysyła pełną klatkę do OpenCV (JNI)OpenCV pobiera ramkę i przetwarza obraz, aby był czytelny dla Tesseract (JNI)Tesseract (tess-two) pobiera tablice bajtów z opencv i przetwarza OCR na obrazie (tablica bajtów)

Mój problem zaczyna się od trzeciej części. Ponieważ moim celem jest wykonanie ocr w ramkach kamer w czasie rzeczywistym, staram się używać wielowątkowości, aby interfejs użytkownika był gładki i nie powodował spowolnienia obrazu z kamery na żywo.

Postanowiłem użyć AsyncTask do tego typu:

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

Sprawia, że ​​strumień kamery na żywo jest płynniejszy niż normalnie, w trybie pojedynczego wątku. Ale problem polega na tym, że uruchomienie tak wielu AsyncTask z powodu ramek kamery na żywo, nawet gdy odwracam kamerę od celu, nadal wykonuje OCR na wcześniej utworzonym AsycnTask i zwraca wyniki dla nich jeden po drugim. Oprócz AsyncTask próbowałem IntenService, ale wynik był taki sam.

Chcę zapytać, czy istnieje sposób na rozwiązanie tego problemu i usprawnienie procesu.

Dzięki

questionAnswers(1)

yourAnswerToTheQuestion