提问者:小点点

为印地语训练宇宙魔方


我想为印地语训练我的tesseract。我有许多具有特定字体的“印地语”书面文本图像,我想为这些图像训练tesseract ocr。有几次我尝试使用此链接https://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3训练tesseract。当我运行makebox命令时,它会提取box文件,但它会识别出像英语字符一样的字符。我不明白为什么会发生这种情况。请帮助我为印地语训练tesseract ocr。您可以在以下链接上查看示例图像。示例文件


共3个答案

匿名用户

我一直想自己训练一些字符集,并且一直在先收集信息。也许这些信息对你也有用。

您是否阅读了此文档:

http://blog.cedric.ws/how-to-train-tesseract-301

如果没有一个角色被认出来,恐怕你必须训练所有的角色。但是重要的步骤似乎是:

>

  • 在makebox命令行中包含语言('eng')的指示(在您的情况下可能是'hin'。

    注意tesseract的版本。我的印象是训练程序在最近的版本中一直在变化。

  • 匿名用户

    示例程序从图像中识别印地语char并将相应的边界框值和相应的印地语char存储到一个文件中。

    /*
     * Char_OCR.cpp
     *
     *  Created on: Jun 23, 2016
     *      Author: pratik
     */
    
    #include <opencv2/opencv.hpp>
    #include <tesseract/baseapi.h>
    #include <leptonica/allheaders.h>
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    using namespace cv;
    
    void dumpIntoFile(const char *ocrResult , ofstream &myfile1 ,int x1, int y1,
            int x2, int y2, int &);
    
    int main(int argc ,char **argv)
    {
    
        Pix *image = pixRead(argv[1]);
    
        if (image == 0) {
            cout << "Cannot load input file!\n";
        }
    
        tesseract::TessBaseAPI tess;
    
    
        if (tess.Init("/usr/share/tesseract/tessdata", "hin")) {
                fprintf(stderr, "Could not initialize tesseract.\n");
                exit(1);
            }
    
        tess.SetImage(image);
        tess.Recognize(0);
    
        tesseract::ResultIterator *ri = tess.GetIterator();
        tesseract::PageIteratorLevel level = tesseract::RIL_SYMBOL;
    
        cout << ri << endl;
    
        ofstream myfile1("Word.txt");
    
        myfile1 << "ID" << '\t' << "CORD_X" << '\t' << "CORD_Y" << '\t' <<
                "CORD_W" << '\t' << "CORD_H" << '\t' << "STRING" << endl;
    
        int i=1;
    
        if(ri!=0)
        {
            do {
                const char *word = ri->GetUTF8Text(level);
    //          cout << word << endl;
    
                //float conf = ri->Confidence(level);
                int x1, y1, x2, y2;
                ri->BoundingBox(level, &x1, &y1, &x2, &y2);
    
                dumpIntoFile(word, myfile1, x1, y1, x2, y2, i);
    
                delete []word;
    
            } while (ri->Next(level));
    
            delete []ri;
        }
    
    }
    
    void dumpIntoFile(const char *ocrResult , ofstream &myfile1 ,int x1, int y1,
            int x2, int y2,int &i)
    {
    
                int length = strlen(ocrResult);
    
                    myfile1 << i++ << '\t' << x1 << '\t' << y1 << '\t' <<
                            x2 << '\t' << y2 << '\t' ;
    
                    //cout << "in the string (" << length << ") ::";
                    for(int  j = 0; j < length && ocrResult[j] != '\n'; j++)
                    {
                        myfile1 << ocrResult[j];
                    }
    
                    myfile1 << endl;
    
    }
    

    匿名用户

    目前TesseractAPI为大多数流行语言提供预训练的语言模型:

    https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html