2

tesseract を使用して数字を認識しようとしています。それはかなりうまく機能しますが、時々間違った結果が得られます (9 ではなく 8 など)。いくつかの非 ocr メソッドで精度を向上させる方法は知っていますが、信頼レベルのある他の結果が必要です。各 ResultIterator に対して ChoiceIterator を使用して、最良の選択肢を得ることがわかりました。

    tesseract::TessBaseAPI tess;    
    tess.SetPageSegMode(tesseract::PSM_SINGLE_CHAR);    
    tess.SetVariable("save_best_choices", "T");

    [setting input image here] 

    tess.Recognize(NULL);
    tesseract::ResultIterator* ri = tess.GetIterator();
    tesseract::ChoiceIterator* ci; 
    if(ri != 0)
    {
        char* symbol = ri->GetUTF8Text(tesseract::RIL_SYMBOL);

        if(symbol != 0)
        {
            float conf = ri->Confidence(tesseract::RIL_SYMBOL); 
            cout << symbol << "\tconf: " << conf << "\n"; 

            const tesseract::ResultIterator itr = *ri; 
            ci = new tesseract::ChoiceIterator(itr);
            do {
                const char* choice = ci->GetUTF8Text(); 
                if (choice) {
                    std::cout << "\t" << choice << " conf: " << ci->Confidence() << "\n"; 
                }
            } while(ci->Next());                

            //  delete[] symbol;
        }           
    }

しかし問題は、ci->GetUTF8Text() が常に null ポインターを返すことです。

MSVC2010 Expressでコンパイルされたtesseract 3.02をDLLとして使用しています。

4

1 に答える 1

0

今日の限られた調査から、答えは変数SaveBlobChoices対を設定することかもしれないと思いますSaveBestChoices。私はまだこれを自分でテストする必要があります。

于 2012-11-24T03:57:16.133 に答える