Tesseract OCR德国特殊字符

时间:2016-04-08 10:07:04

标签: c++ utf-8 console-application tesseract

iam使用tesseract ocr在c ++中阅读德语png图像,我遇到了一些特殊字符的问题,如

ßäöü等等。

我是否需要训练tesseract阅读这个正确的或需要做什么?

This is the part of the original image read by tesseract

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

更新

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 硬编码的变音符号会正确显示,但图像中的文字是正确的,我需要更改什么?

tesseract版本是3.0.2 leptonica版本是1.68

2 个答案:

答案 0 :(得分:1)

Tesseract可识别Unicode字符。您的控制台可能尚未配置为显示它们。

What encoding/code page is cmd.exe using?

Unicode characters in Windows command line - how?

答案 1 :(得分: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.