2014-12-20 4 views
0

Я хочу обучить мой tesseract для языка хинди. У меня есть много «хинди» написанных текстовых изображений с определенным шрифтом, и я хотел бы обучить tesseract ocr для этих изображений. Несколько раз я пробовал поезд tesseract, используя эту ссылку https://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3. когда я запускаю команду makebox, она извлекает файл окна, но он распознает как английский символ. Я не понимаю, почему это происходит. Пожалуйста, помогите мне обучить tesseract ocr для языка хинди. Вы можете проверить изображение образца по следующей ссылке. sample fileПоезд tesseract для языка хинди

ответ

0

Я сам собирался обучать несколько наборов символов и сначала собирал информацию. Возможно, эта информация вам тоже полезна.

Вы читали этот документ:

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

Если ни один из персонажей не признаются вам придется обучать всех персонажей, я боюсь. Но важные шаги кажутся:

  • включают указание на языке («рус») в командной makebox линии (это, вероятно, будет «хин» в вашем случае

  • быть в курсе. версия тессеракта. у меня создалось впечатление, что процедура обучения была изменена в последних версиях.

0

Пример программы из распознать Hindi полукокса из изображения и сохранить соответствующие значения ограничительной рамки и соответствующие хинди полукокса хранить в ne файл.

/* 
* 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; 

} 
+0

Если вы хотите получить более высокую точность, чем это, вы можете передать пороговое изображение OTSU в pixeRead(). Я передаю нормальное изображение в pixRead() прямо сейчас. передать пороговое изображение OTSU. Я разработал алгоритм для этого. , дайте мне знать, если кто-то захочет. –

Смежные вопросы