2016-04-08 9 views
0

iam Tesseract OCR für Deutsch PNG-Bilder in C++ lesen und ich habe Probleme mit einigen Sonderzeichen wieTesseract OCR Deutsche Sonderzeichen

ß ä ö ü und so weiter.

Muss ich Tesseract trainieren, um das Richtige zu lesen oder was muss getan werden?

This is the part of the original image read by tesseract

tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI(); 

UPDATE

SetConsoleOutputCP(1252);//changed to german. 
SetConsoleCP(1252);//changed to german 
wcout << "ÄÖÜ?ß" << endl; 

// Open input image with leptonica library 
Pix *image = pixRead("D:\\Images\\Document.png"); 
api->Init("D:\\TesseractBeispiele\\Tessaractbeispiel\\Tessaractbeispiel\\tessdata", "deu"); 
api->SetImage(image); 
api->SetVariable("save_blob_choices", "T"); 
api->SetRectangle(1000, 3000, 9000, 9000); 
api->Recognize(NULL); 

// Get OCR result 
wcout << api->GetUTF8Text()); 

After changing the Code below the Update die hart codiert Umlaute korrekt dargestellt werden, aber der Text aus dem Bild issnt richtig, was muss ich ändern?

Tesserakts Version ist 3.0.2 leptonica Version ist 1,68

Antwort

0
i don't how to detect German the word from the image in windows environment. but i know how to detect German word to Linux environment. following code may get you some idea. 

/* 
* word_OCR.cpp 
* 
* Created on: Jun 23, 2016 
*  Author: root 
*/ 

#include <tesseract/baseapi.h> 
#include <leptonica/allheaders.h> 
#include <iostream> 

using namespace std; 

int main(int argc ,char **argv) 
{ 
    Pix *image = pixRead(argv[1]); 

    if (image == 0) { 
     cout << "Cannot load input file!\n"; 
    } 

    tesseract::TessBaseAPI tess; 
// insted of the passing "eng" pass "deu". 
    if (tess.Init("/usr/share/tesseract/tessdata", "deu")) { 
      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_WORD; 

    if(ri!=0) 
    { 
     do { 
      const char *word = ri->GetUTF8Text(level); 

      cout << word << endl; 

      delete []word; 

     } while (ri->Next(level)); 


     delete []ri; 
    } 

} 
one thing you have to take care that pass good resolution image then and then it works fine. 
+1

Wenn Sie eine höhere Genauigkeit wünschen, können Sie das OTSU-Schwellenwertbild in pixeRead() übergeben. Ich übergebe gerade das normale Bild in pixRead(). Übergeben Sie das OTSU-Schwellenwertbild. Ich habe einen Algorithmus dafür entwickelt. . lass es mich wissen, wenn jemand will. –