Mejorar el rendimiento de Tesseract con OpenCV en Android

Estoy trabajando en una aplicación de Android usando OCR en tiempo real. Estoy utilizando OpenCV y Tesseract Library. Pero el rendimiento es muy pobre, incluso en mi Galaxy SIII. ¿Hay algún método para mejorar el rendimiento? Es mi código:

Mat mGray = new Mat(); capture.retrieve(mGray); Bitmap bmp = Bitmap.createBitmap(mGray.cols(), mGray.rows(), Bitmap.Config.ARGB_8888); tessBaseApi.setImage(bmp); String recognizedText = tessBaseApi.getUTF8Text(); Log.i("Reg", recognizedText); 

¿Se reducirá la velocidad de OCR tesseract al pasar el bitmap a la API de Tesseract? ¿Qué preprocesamiento debo realizar antes de pasar a la API de Tesseract?

4 Solutions collect form web for “Mejorar el rendimiento de Tesseract con OpenCV en Android”

Una cosa a intentar es binarizar la imagen usando el umbral adaptativo (adaptiveThreshold en OpenCV).

Puede hacer que Tesseract haga sólo el pase de reconocimiento 1, de modo que salte los pases 2 a 9, cuando llame a recog_all_words () .

Cambie la siguiente línea en baseapi.cpp y reconstruya su proyecto de biblioteca Tesseract:

 if (tesseract_->recog_all_words(page_res_, monitor, NULL, NULL, 0)) { 

Cambiarlo a:

 if (tesseract_->recog_all_words(page_res_, monitor, NULL, NULL, 1)) { 

Algunas cosas que podrían hacerlo más rápido son:

  • Seleccione una región más pequeña de mGray donde está su texto, antes de createBitmap – por lo que los métodos más pesados ​​que siguen procesan una imagen más pequeña.
  • Cambiando Bitmap.Config.ARGB_8888 a Bitmap.Config.RGB_565 – su imagen es en escala de grises, no necesitará un mapa de bits ARGB.

Utilice multithreading, pero tenga en cuenta para crear una instancia por subproceso para TessBaseAPI. No los comparta entre hilos diferentes. Cree N roscas (N> = número de núcleos), y java se asegurará de que usted acelera por lo menos el número de tiempos de núcleos.

Lo que hago es crear N subprocesos que crean TessBaseAPI objetos en su propio contexto (en el método de ejecución) y esperar a las solicitudes de OCR en un bucle hasta que se interrumpa.

  ... ... @Override public void run() { TessBaseAPI tessBaseApi = new TessBaseAPI(); tessBaseApi.init(Ocrrrer.DATA_PATH, "eng"); setTessVariable(tessBaseApi, "load_system_dawg", "0"); setTessVariable(tessBaseApi, "load_freq_dawg", "0"); setTessVariable(tessBaseApi, "load_unambig_dawg", "0"); setTessVariable(tessBaseApi, "load_punc_dawg", "0"); setTessVariable(tessBaseApi, "load_number_dawg", "0"); setTessVariable(tessBaseApi, "load_fixed_length_dawgs", "0"); setTessVariable(tessBaseApi, "load_bigram_dawg", "0"); setTessVariable(tessBaseApi, "wordrec_enable_assoc", "0"); setTessVariable(tessBaseApi, "tessedit_enable_bigram_correction", "0"); setTessVariable(tessBaseApi, "assume_fixed_pitch_char_segment", "1"); setTessVariable(tessBaseApi, TessBaseAPI.VAR_CHAR_WHITELIST, "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ<"); Log.d(TAG, "Training file loaded"); while (!interrupted()) { reentrantLock.lock(); try { Log.d(TAG, this.getName() + " wait for OCR"); jobToDo.await(); Log.d(TAG, this.getName() + " input arrived. Do OCR"); this.ocrResult = doOcr(tessBaseApi); ocrDone.signalAll(); } catch (InterruptedException e) { return; } finally { try { reentrantLock.unlock(); } catch (Exception ex) { } } } } ... ... 

Puede ver que el objeto tessBaseApi es local al método run, por lo tanto absolutamente no compartido.

  • Detección de objetos para android con tesseract o OpenCV
  • Tesseract de OCR para Android: uso de datos de objetos Pixa para mostrar cuadros delimitadores
  • Entrenamiento Tesseract datos para Android difícil de lograr?
  • Números digitales en Tesseract OCR
  • Adición de Tesseract y Opencv a Android.mk (Android Studio)
  • ¿Cómo entrenar a tesseract para reconocer números de 20 a 30 dígitos solamente?
  • Aplicación OCR para Android: diccionario Tesseract
  • Problemas para reconocer dígitos en Tesseract - android
  • OCR (tesseract), rotación inteligente para la imagen
  • Android NDK - construcción de TessTwo (Fork de Tesseract Tools para Android) - ndk-build falla
  • Error android ndk-build
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.