J'ai un problème avec le moteur tesseract-ocr sous Linux. J'ai téléchargé les données en langage RUS et les ai placées dans le répertoire tessdata (/ usr/local/share/tessdata). Lorsque j'essaie d'exécuter tesseract avec la commande tesseract blob.jpg out -l rus
, une erreur s'affiche:
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.
Selon guide de compilation , j’ai utilisé export TESSDATA_PREFIX='/usr/local/share/'
pour pointer mon répertoire tessdata . Peut-être devrais-je éditer des fichiers de configuration? Tesseract essaie de charger des fichiers de données "eng" au lieu de "rus".
Capture d'écran: http://i.stack.imgur.com/I0Guc.png
Vous pouvez récupérer eng.traineddata
auprès de Google (compressé):
wget https://tesseract-ocr.googlecode.com/files/eng.traineddata.gz
ou Github (brut):
wget https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata
Consultez https://github.com/tesseract-ocr/tessdata pour obtenir une liste complète des données linguistiques apprises.
Lorsque vous récupérez le ou les fichiers, déplacez-les dans le dossier /usr/local/share/tessdata
. Attention: certaines distributions Linux (telles que openSUSE et Ubuntu) peuvent l’attendre dans /usr/share/tessdata
à la place.
# 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/
Le plus simple consiste à installer le paquet nécessaire:
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)
Comme vous pouvez le constater, cela ouvre la voie à d’autres langues (par exemple tesseract-ocr-fra).
J'ai eu aussi cette erreur sur la machine Windows.
Ma solution.
1) Téléchargez vos fichiers de langue de https://github.com/tesseract-ocr/tessdata/tree/3.04.00
Par exemple, pour eng, j'ai téléchargé tous les fichiers avec le préfixe eng.
2) Placez-les dans le répertoire tessdata à l’intérieur d’un dossier. Ajoutez ce dossier aux variables du chemin système sous la forme TESSDATA_PREFIX.
Le résultat sera System env var: TESSDATA_PREFIX = D:/Java/OCR Et le dossier OCR contient tessdata avec les fichiers de langues.
Ceci est une capture d'écran du répertoire:
Aucune solution précédente n'a fonctionné pour moi.
J'ai installé à la fois par apt-get
et en téléchargeant manuellement tessdata, déplacé autour de /usr
et ainsi de suite, et personne n'a travaillé même si j'ai exporté la variable mille fois.
Enfin, lors d’un dernier essai avant de commencer à pleurer, j’ai essayé de passer le chemin directement à l’instance de Tesseract ().
En Python: tr = Tesseract("/usr/local/share/tesseract-ocr/")
et maintenant cela fonctionne. Pour clarifier, utilisez le module tesserwrap
.
Vous pouvez appeler la fonction API tesseract à partir du code 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();
Et construisez ce code:
g++ -g -I. -I/usr/local/include -o _test test.cpp -ltesseract_api -lfreeimageplus
(J'ai besoin de FreeImage pour le chargement des images)
J'utilise Visual Studio 2017 Community Edition .
J'ai résolu ce problème en créant un répertoire appelé tessdata dans le répertoire Debug de mon projet. Ensuite, je mets le fichier eng.traineddata dans ledit répertoire.
tesseract --tessdata-dir <tessdata-folder> <image-path> stdout --oem 2 -l <lng>
Dans mon cas, les erreurs que j'ai commises ou les tentatives que j'ai faites n'ont pas été un succès.
TESSDATA_PREFIX
avec les chemins ci-dessusLes 2 premières tentatives n'ont pas fonctionné car les fichiers de git clone
n'ont pas fonctionné pour des raisons que je ne connais pas. Je ne sais pas pourquoi la tentative n ° 3 a fonctionné pour moi.
Finalement,
wget
--tessdata-dir
utilisé avec nom de dossierEmporter pour moi, c'est bien connaître l'outil et l'utiliser , plutôt que de compter sur l'installation et les dossiers du gestionnaire de paquets
J'utilise Windows OS, j'ai essayé toutes les solutions ci-dessus et aucune d'entre elles ne fonctionne.
Enfin, j'installe Tesseract-OCR sur le lecteur D (d'où je tire mon script python) à la place du lecteur C et cela fonctionne.
Donc, si vous utilisez Windows, exécutez votre script python dans le même lecteur que votre Tesseract-OCR.