2016-04-08 17 views
0

++ c Alman png resimleri okuma teserakt ocr kullanarak iam ve ben tesseract OCR Alman Özel Karakterler

gibi bazı özel karakterler ile ilgili sorunlar var ß ä ö ü vb.

Bu doğru okumak için tesseract eğitmem gerekiyor mu, yoksa ne yapılması gerekiyor?

This is the part of the original image read by tesseract

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

GÜNCELLEME

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 sert kodlu umlauts doğru gösterilir, ancak resim issnt metin doğru, ne ben değiştirmek gerekir?

teserakt sürüm 3.0.2 leptonica sürüm 1.68

cevap

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

bundan daha fazla doğruluk istiyorsanız, OTSU eşik görüntüsünü pixeRead() içine alabilirsiniz. Şu anda normal görüntüyü pixRead() uygulamasında geçiriyorum. OTSU eşik görüntüsünü geçmek. Bunun için algoritma geliştirdim. . İstediğinde bana haber ver. –