I'd to detect and, if necessary, correct the orientation of a scanned document image. I am already able to deskew documents, however it still might occur, that a document is upside down and it needs to be rotated by 180°.
Using tesseract's layout analysis feature it should be possible to determine a document's orientation using this code:
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"; However the code doesn't seems to work correctly as it always returns ORIENTATION_PAGE_UP when a document is in portrait format and ORIENTATION_PAGE_LEFT when it is in landscape format. (ORIENTATION_PAGE_DOWN and ORIENTATION_PAGE_RIGHT can be used, but are never returned).
A.) Is there anything wrong with the code above?
B.) How else can I determine a documents orientation?