Error de ejecución de Tesseract


82

Tengo un problema con la ejecución del motor tesseract-ocr en Linux. Descargué los datos del idioma RUS y los puse en el directorio tessdata (/ usr / local / share / tessdata). Cuando intento ejecutar tesseract con el comando tesseract blob.jpg out -l rus, muestra un error:

Error opening data file /usr/local/share/tessdata/eng.traineddata

Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.

Failed loading language eng
Tesseract couldn't load any languages!

Could not initialize tesseract.

Según la guía de compilación , solía export TESSDATA_PREFIX='/usr/local/share/' señalar mi directorio tessdata. ¿Quizás debería editar algún archivo de configuración? Tesseract intenta cargar archivos de datos 'eng' en lugar de 'rus'.

Captura de pantalla: http://i.stack.imgur.com/I0Guc.png

Respuestas:


87

Puedes agarrar eng.traineddataGithub:

wget https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata

Consulte https://github.com/tesseract-ocr/tessdata para obtener una lista completa de datos de idiomas entrenados.

Cuando tome los archivos, muévalos a la /usr/local/share/tessdatacarpeta. Advertencia: algunas distribuciones de Linux (como openSUSE y Ubuntu) pueden esperarlo en su /usr/share/tessdatalugar.

# If you got the data from Google, unzip it first!
gunzip eng.traineddata.gz 
# Move the data
sudo mv -v eng.traineddata /usr/local/share/tessdata/

2
corríjame si me equivoco ... pero ¿no era la pregunta sobre incluir un nuevo idioma (rus) y no suministrar el que señala el mensaje de error (defectuoso)?
Arne

1
editar: por alguna razón, tesseract no se ejecutará a menos que eng.traineddate esté presente, incluso si no es necesario. Entonces, la respuesta de AAAfarmclub está bien.
Arne

3
Advertencia: otras instalaciones de Linux (Ubuntu viva) el trabajo en un directorio diferente: / usr / share / tesseract-ocr / tessdata lugar
octaedro

@Gazta: Sí, openSUSE requiere ese directorio en su lugar
Avindra Goolcharan

3
En Ubuntu-Gnome 16.04: es/usr/share/tesseract-ocr/tessdata/
kmario23

55

La forma más sencilla es instalar el paquete necesario:

sudo apt-get install tesseract-ocr-eng  #for english
sudo apt-get install tesseract-ocr-tam  #for tamil
sudo apt-get install tesseract-ocr-deu  #for deutsch (German)

Como puede observar, abre el camino a otros idiomas (es decir, tesseract-ocr-fra).


3
Esta debería ser la respuesta aceptada. Jugar manualmente con los archivos detrás de los administradores de paquetes (asumiendo que usó uno para instalar tesseract en primer lugar) es una mala idea
Ishay Peled

2
Para usuarios de Mac que usan MacPort: sudo port install tesseract-eng
p-mercier

4
Puede utilizar tesseract --list-langspara ver todos los idiomas disponibles. También puede usar sudo apt-get install tesseract-ocr-*para instalarlos todos
Rodrigo Laguna

para arch se llaman los paquetes tesseract-data-eng, etc.
loki

desafortunadamente, esta respuesta no funciona en un contenedor Docker, aunque funciona fuera de él.
Ælex

28

También tuve este error en la máquina con Windows.

Mi solución.

1) Descargue sus archivos de idioma desde https://github.com/tesseract-ocr/tessdata/tree/3.04.00

Por ejemplo, para eng, descargué todos los archivos con el prefijo eng.

2) Colóquelos en el directorio tessdata dentro de alguna carpeta. Agregue esta carpeta a las variables de ruta del sistema como TESSDATA_PREFIX .

El resultado será System env var: TESSDATA_PREFIX = D: / Java / OCR Y la carpeta OCR tiene tessdata con archivos de idiomas.

Esta es una captura de pantalla del directorio:

ingrese la descripción de la imagen aquí


4
Sí, todo el mundo habla de Linux. Por favor, chicos, no olviden que hay otro sistema operativo más popular en el mercado.
Khan

4

Ninguna solución anterior funcionó para mí.

He instalado tanto mediante la apt-getdescarga manual de tessdata como la descarga manual, me he movido /usry así sucesivamente y nadie funcionó incluso si exporté la variable miles de veces.

Finalmente, en un último intento antes de comenzar a llorar, intenté pasar la ruta directamente a la instancia de Tesseract ().

En Python: tr = Tesseract("/usr/local/share/tesseract-ocr/")y ahora funciona. Para aclarar, estoy usando tesserwrapmodule.


1
¡Te siento! Estoy exactamente ahí ahora mismo. La diferencia es que, para empeorar las cosas, estoy tratando de que funcione desde la línea de comandos.
explorador

4
tesseract  --tessdata-dir <tessdata-folder> <image-path> stdout --oem 2 -l <lng>

En mi caso, los errores que cometí o los intentos que no fueron un éxito.

  • Cloné el repositorio de github y copié archivos desde allí a
    • / usr / local / share / tessdata /
    • / usr / share / tesseract-ocr / tessdata /
    • / usr / share / tessdata /
  • Usado TESSDATA_PREFIXcon los caminos anteriores
  • sudo apt-get install tesseract-ocr-eng

Los primeros 2 intentos no funcionaron porque los archivos de git cloneno funcionaron por razones que no conozco. No estoy seguro de por qué el intento n. ° 3 funcionó para mí.

Finalmente,

  1. Descargué el archivo eng.traindata usando wget
  2. Lo copié en algún directorio
  3. Usado --tessdata-dircon el nombre del directorio

Para mí, aprender bien la herramienta y hacer uso de ella , en lugar de depender de la instalación y los directorios del administrador de paquetes


2

Puede llamar a la función de la API de tesseract desde el código C:

#include <tesseract/baseapi.h>
#include <tesseract/ocrclass.h>; // ETEXT_DESC

using namespace tesseract;

class TessAPI : public TessBaseAPI {
    public:
    void PrintRects(int len);
};

...
TessAPI *api = new TessAPI();
int res = api->Init(NULL, "rus");
api->SetAccuracyVSpeed(AVS_MOST_ACCURATE);
api->SetImage(data, w0, h0, bpp, stride);
api->SetRectangle(x0,y0,w0,h0);

char *text;
ETEXT_DESC monitor;
api->RecognizeForChopTest(&monitor);
text = api->GetUTF8Text();
printf("text: %s\n", text);
printf("m.count: %s\n", monitor.count);
printf("m.progress: %s\n", monitor.progress);

api->RecognizeForChopTest(&monitor);
text = api->GetUTF8Text();
printf("text: %s\n", text);
...
api->End();

Y construye este código:

g++ -g -I. -I/usr/local/include -o _test test.cpp -ltesseract_api -lfreeimageplus

(necesito FreeImage para cargar imágenes)


@DarkSkull, sí, este es un código C ++ probado en Debian GNU / Linux. Como puede ver, Russel Crowe tiene el problema con la función TessAPI :: Init (NULL, "rus"). Es significativo inspeccionar el código fuente de Tesseract (método de clase TessAPI).
Alexander Lubyagin

1

Estoy usando Visual Studio 2017 Community Edition. Resolví
este problema creando un directorio llamado tessdata en el directorio Debug de mi proyecto. Luego puse el archivo eng.traineddata en dicho directorio.


1

Estoy usando el sistema operativo Windows, probé todas las soluciones anteriores y ninguna de ellas funciona.

Finalmente, instalo Tesseract-OCR en la unidad D (desde donde ejecuto mi script de Python) en lugar de la unidad C y funciona.

Entonces, si está usando Windows, ejecute su script de Python en la misma unidad que su Tesseract-OCR.



0

Para usuarios de Windows:

En Variables de entorno, agregue una nueva variable en la variable del sistema con el nombre "TESSDATA_PREFIX" y el valor es "C: \ Archivos de programa (x86) \ Tesseract-OCR \ tessdata"


De acuerdo, y para que funcione sin problemas, se requiere un poco más de instalación, machineintelligent.blogspot.com/2019/03/…
Amit Vashistha

0
tessdata_dir_config = r'--tessdata-dir "/usr/local/Cellar/tesseract/4.1.1/share/tessdata"'
pytesseract.image_to_string(imgCrop,lang='eng',config=tessdata_dir_config)

4
Ésta no es una respuesta. Explique lo que está sucediendo aquí para que otros puedan obtener información útil al leer su respuesta.
AlexH
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.