8
votes

Tesseract - Emplacement du fichier de langue change

Je fais un projet d'air, qui aura besoin de certaines capacités OCR, j'ai donc décidé d'utiliser Tesseract (maintenant j'essaie de le faire fonctionner sur Windows).

Mon problème est que cela ne peut pas changer l'emplacement du fichier de langue - il essaie toujours de regarder dans mon répertoire d'installation Tesseract (fichiers de programme (x86) \ tesseract-ocr \ tessdata \ mylang.trainedData)

Y a-t-il une façon de configurer Tesseract pour rechercher ce fichier où je spécifie? Par exemple dans le même dossier que Tesseract.exe. Je ne veux pas (ou peut-être l'événement ne peut pas) installer une application avec l'installation d'air. Je l'ai essayé avec la version 3.0 et la dernière version SVN.

merci


0 commentaires

3 Réponses :


12
votes

Oui, vous pouvez, en définissant la variable d'environnement TessData_Prefix, par exemple:

Export TessData_Prefix = / USR / local / Partager /

Notez que le chemin de répertoire doit se terminer dans un /.


1 commentaires

Merci, je suppose que je devrai modifier le code source alors. Ce n'est pas une solution très élégante pour modifier une variable d'environnement à chaque exécution du programme (juste pour s'assurer que l'utilisateur n'a pas défini cette variable depuis la dernière exécution - par exemple en installant Tesseract).



2
votes

J'ai résolu le problème en réécrivant le code source de Tesseract (IM à l'aide de SVN 597). Comme le dit Nguyenq, Tesseract tente de rechercher les données sur le chemin défini par la variable d'environnement TessData_Prefix. Si cela ne se trouve pas, alors cela fait du domaine que je ne comprends pas :). Donc, si quelqu'un a besoin d'une version portable de Tesseract (qui n'est pas dépendante d'une installation Tesseract), edit Mainblk.cpp autour de la ligne 60, voici ma version:

// remove the stuff that Tesseract does to find the installation path
/* if (!getenv("TESSDATA_PREFIX")) {
#ifdef TESSDATA_PREFIX
#define _STR(a) #a
#define _XSTR(a) _STR(a)
    datadir = _XSTR(TESSDATA_PREFIX);
#undef _XSTR
#undef _STR
#else
    if (argv0 != NULL) {
      if (getpath(argv0, dll_module_name, datadir) < 0)
#ifdef __UNIX__
        CANTOPENFILE.error("main", ABORT, "%s to get path", argv0);
#else
        NO_PATH.error("main", DBG, NULL);
#endif
    } else {
      datadir = "./";
    }
#endif
  } else {
    datadir = getenv("TESSDATA_PREFIX");
  }*/
  datadir = "./"; // look for config things in the same folder as the executable.


0 commentaires

3
votes

Je suggère que vous ne traitez pas la voie Tessdata par TessData_Prefix Strong>. Vous pouvez définir le chemin Tessdata dans Init Tesseract. Si vous utilisez Tesseract.exe dans la ligne de commande Utilisez la syntaxe suivante:

api->Init(tessdataPath, language) //api->Init("C:", "eng")


0 commentaires