ocr - source - reconocimiento de caracteres android
¿Cómo hacer tesseract para reconocer solo números, cuando se mezclan con letras? (7)
Quiero usar tesseract
para reconocer solo números. El problema es que tengo una mezcla de números y letras y cuando uso SetVariable("tessedit_char_whitelist", "0123456789")
para cada símbolo tesseract devuelve un dígito incorrecto.
¿Puedo establecer un valor de umbral para que tesseract
omita los símbolos con poco parecido?
NOTA: configuro tesseract
para que reconozca solo los dígitos, por lo que no hay confusión entre O y 0.
Lo hice un poco diferente (con tess-dos). Tal vez sea útil para alguien.
Entonces necesitas inicializar primero la API.
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.init(datapath, language, ocrEngineMode);
Luego establece las siguientes variables
baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
baseApi.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!?@#$%&*()<>_-+=/:;''/"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
baseApi.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, ".,0123456789");
baseApi.setVariable("classify_bln_numeric_mode", "1");
De esta forma, el motor comprobará solo los números.
Lo que hago es reconocer todo, y cuando tengo el texto, saco todos los caracteres excepto los números
//This replaces all except numbers from 0 to 9
recognizedText = recognizedText.replaceAll("[^0-9]+", " ");
Esto funciona bastante bien para mí.
Para tesseract 3, el comando es más simple tesseract imagename outputbase digits
según FAQ . Pero no funciona para mí muy bien.
Me vuelvo a probar diferentes opciones de -psm 6
y encuentro que -psm 6
funciona mejor para mi caso.
man tesseract
para más detalles.
Para tesseract 3, intento crear un archivo de configuración según las preguntas frecuentes.
ANTES de invocar una función Init o poner esto en un archivo de texto llamado tessdata/configs/digits
:
tessedit_char_whitelist 0123456789
luego, funciona usando el comando: tesseract imagename outputbase digits
Puede indicarle a tesseract que use solo dígitos, y si eso no es lo suficientemente preciso, entonces la mejor oportunidad de obtener mejores resultados es pasar por el proceso de capacitación: http://www.resolveradiologic.com/blog/2013/01/15/training-tesseract/
Reconocer solo los números se responde realmente en la página de preguntas frecuentes de tesseract . Consulte esa página para obtener más información, pero si tiene el paquete de la versión 3, los archivos de configuración ya están configurados. Usted solo especifica en la línea de comando:
tesseract image.tif outputbase nobatch digits
En cuanto al valor de umbral, no estoy seguro de a qué te refieres. Si su entrada es una fuente inusual, tal vez podría volver a entrenar con una muestra de su entrada. Una alternativa es cambiar el umbral de poda de tesseract. Ambas opciones también se mencionan en las preguntas frecuentes.
Si uno quiere hacer coincidir 0-9
tesseract myimage.png stdout -c tessedit_char_whitelist=0123456789
O si uno casi quiere emparejar 0-9, pero con uno o más caracteres diferentes
tesseract myimage.png stdout -c tessedit_char_whitelist=01234ABCDE