我正在尝试使用tesseract来识别数字。它工作得很好但有时我得到错误的结果(8而不是9等)。我知道如何使用一些非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()总是返回一个空指针。
我使用tesseract 3.02作为DLL,在MSVC2010 express下编译。
答案 0 :(得分:0)
从今天早些时候的有限研究中,我认为答案可能是设置变量SaveBlobChoices
与SaveBestChoices
。我仍然需要自己测试一下。