Я бы обнаружил и, при необходимости, исправил ориентацию отсканированного изображения документа. Я уже могу выровнять документы, но все же может случиться так, что документ перевернут и его нужно повернуть на 180 °.
Используя функцию анализа макета tesseract , можно определить ориентацию документа с помощью этого кода:
tesseract::TessBaseAPI api;
api.Init(argv[0], "eng");
api.SetImage(img);
api.SetPageSegMode(tesseract::PSM_AUTO_OSD);
tesseract::PageIterator* it = api.AnalyseLayout();
tesseract::Orientation orient;
tesseract::WritingDirection dir;
tesseract::TextlineOrder order;
float f;
it->Orientation(&orient, &dir, &order, &f);
if(orient == tesseract::Orientation::ORIENTATION_PAGE_UP)
std::cout << "Page Up\t";
else if(orient == tesseract::Orientation::ORIENTATION_PAGE_LEFT)
std::cout << "Page Left\t";
else if(orient == tesseract::Orientation::ORIENTATION_PAGE_DOWN)
std::cout << "Page Down\t";
else if(orient == tesseract::Orientation::ORIENTATION_PAGE_RIGHT)
std::cout << "Page Right\t";
Однако, похоже, код работает неправильно, так как он всегда возвращает ORIENTATION_PAGE_UP
, когда документ в книжной ориентации, и ORIENTATION_PAGE_LEFT
, когда он в альбомной ориентации. (ORIENTATION_PAGE_DOWN
и ORIENTATION_PAGE_RIGHT
могут использоваться, но никогда не возвращаются).
A.) Что-то не так с кодом выше?
B.) Как еще можно определить ориентацию документов?