ChoiceIterator'ı tesseract'ta kullanamaz

Her şeyden önce, seçim yineleyicisini doğru anladığımı doğrulamak istiyorum.

Örneğin, bir resmin "kapsamı" ile ilgili bir kelimem varsa

seçim yineleyici bana "s" ve belki Next (), "5" gibi bir şey vermelidir.

3. "o" harfi için belki "0", Sonraki() "O" ve Sonraki() "o" öğelerinden sonra.

Anlıyorum doğru mu?

İşte bütün ilgili kodlarım

api.SetImage((uchar*)img->imageData,img->width,img->height,img->depth/8,img->widthStep);

api.SetRectangle(0,0,img->width, img->height);
int left,top,right,bottom;
left=0;top=0;right=0;bottom=0;
api.Recognize(NULL);
tesseract::ResultIterator *ri=api.GetIterator();
tesseract::ChoiceIterator *choiceItr;
const tesseract::ResultIterator itr = *ri;
choiceItr = new tesseract::ChoiceIterator(itr);
const char * out=choiceItr->GetUTF8Text();
char * out2=(*ri).GetUTF8Text(tesseract::RIL_SYMBOL);
printf("out:%s,out2:%s",out,out2);

konsoldaki çıkış:

Çıkış: (boş) out2: P

p beklenen sonuç yineleyici sonucu, ancak seçim yineleyici çıktı null.

fikirler için teşekkürler.

yaklaşık çözüldü:

// This ensures Tesseract's "blob_choices" structures are filled
    SetVariable("save_best_choices", "T");

http://code.google.com/p/tesseract-ocr/sorunlar/detay? id = 555

1

1 cevap

Henüz bir çözüm bulamadıysanız, aşağıdaki kod tüm karakterler ( ResultIterator kullanarak) ve en iyi alternatifleri ( ChoiceIterator kullanarak) nasıl yineleyeceğinizi gösterir.

tess.SetVariable("save_best_choices", "T"); 
tess.SetImage(...); 
tess.Recognize(0); 

tesseract::ResultIterator* ri = tess.GetIterator();
tesseract::ChoiceIterator* ci; 

if(ri != 0)
{
    do
    {
        const char* symbol = ri->GetUTF8Text(tesseract::RIL_SYMBOL);

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

            const tesseract::ResultIterator itr = *ri; 
            ci = new tesseract::ChoiceIterator(itr);

            do
            {
                const char* choice = ci->GetUTF8Text(); 
                std::cout << "\t\t" << choice << " conf: " << ci->Confidence() << "\n"; 
            }
            while(ci->Next()); 

            delete ci; 
        }

        delete[] symbol;
    }
    while((ri->Next(tesseract::RIL_SYMBOL)));
}
5
katma