Как работает переменная Тессерака "save_blob_choices"?
Поэтому я пытался использовать tesseract ocr (в частности, tess-two) для проекта Android для сканирования некоторых символов.
Все работает нормально, но иногда распознанная строка возвращается как ноль. Одним из решений, которое я нашел, было установить переменную save_blob_choices
истинно, чтобы тессеракт сохранил альтернативы для распознавания.
Но я не знаю, должен ли он это делать. Где это сохранить альтернативы? Как я могу получить к ним доступ?
Конечно, если у вас есть другое решение, кроме использования этой переменной, пожалуйста, сообщите мне.
Вот мой код:
TessBaseAPI baseApi = new TessBaseAPI();
baseApi.setDebug(true);
baseApi.init(MainActivity.DATA_PATH, MainActivity.lang);
baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_CHAR);
baseApi.setVariable("tessedit_char_whitelist","abcdefghijklmnopqrst");
baseApi.setVariable("save_blob_choices", "T");
baseApi.setImage(mainBitmap);
publishProgress(80);
mainBitmap.recycle();
mainBitmap = null;
// Iterate through the results.
ResultIterator iterator = baseApi.getResultIterator();
String lastUTF8Text;
float lastConfidence;
iterator.begin();
do {
lastUTF8Text = iterator.getUTF8Text(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL);
lastConfidence = iterator.confidence(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL);
Log.i("string, intConfidence",lastUTF8Text+", "+lastConfidence);
} while (iterator.next(TessBaseAPI.PageIteratorLevel.RIL_SYMBOL));
baseApi.end();
Также в качестве дополнительного вопроса, это base.setDebug(true)
должен работать? Потому что это, похоже, ничего не делает.
1 ответ
Пожалуйста, проверьте следующие примеры. https://github.com/tesseract-ocr/tesseract/wiki/APIExample
Пример итератора для выбора классификатора для одного символа
Pix *image = pixRead("/usr/src/tesseract/testing/phototest.tif");
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
api->Init(NULL, "eng");
api->SetImage(image);
api->SetVariable("save_blob_choices", "T");
api->SetRectangle(37, 228, 548, 31);
api->Recognize(NULL);
tesseract::ResultIterator* ri = api->GetIterator();
tesseract::PageIteratorLevel level = tesseract::RIL_SYMBOL;
if(ri != 0) {
do {
const char* symbol = ri->GetUTF8Text(level);
float conf = ri->Confidence(level);
if(symbol != 0) {
printf("symbol %s, conf: %f", symbol, conf);
bool indent = false;
tesseract::ChoiceIterator ci(*ri);
do {
if (indent) printf("\t\t ");
printf("\t- ");
const char* choice = ci.GetUTF8Text();
printf("%s conf: %f\n", choice, ci.Confidence());
indent = true;
} while(ci.Next());
}
printf("---------------------------------------------\n");
delete[] symbol;
} while((ri->Next(level)));
}