Moldura de Câmera Android com MultiThreading
Eu estou usando o OpenCV, Vuforia e Tesseract (tess-dois) para o meu aplicativo. Meu sistema funciona assim:
Vuforia detecta o alvo e envia o quadro completo para o OpenCV (JNI)O OpenCV obtém o quadro e faz algum processamento de imagem para torná-lo legível para o Tesseract (JNI)Tesseract (tess-dois) pega as matrizes de bytes da opencv e faz os processamentos de OCR na imagem (byte-array)Meu problema começa com a terceira parte. Como o meu objetivo é fazer o ocr em quadros de câmeras em tempo real, estou tentando usar multi-threading para tornar a interface do usuário mais suave e não fazer com que o visual da câmera ao vivo seja lento.
Eu decidi usar o AsyncTask para isso assim:
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();
}
Isso torna o fluxo da câmera ao vivo mais suave do que o normal. Mas o problema é que desde o início de tantas AsyncTask por causa dos frames da câmera ao vivo, mesmo quando eu afasto a câmera do alvo, ela continua fazendo o OCR no AsycnTask criado anteriormente e retorna resultados para eles um após o outro. Além de AsyncTask, eu tentei IntenService, mas o resultado foi o mesmo.
Eu quero perguntar se existe uma maneira de resolver esse problema e tornar o processo mais eficiente.
obrigado