как определить ориентацию отсканированного документа? - PullRequest
4 голосов
/ 18 ноября 2011

Я бы обнаружил и, при необходимости, исправил ориентацию отсканированного изображения документа. Я уже могу выровнять документы, но все же может случиться так, что документ перевернут и его нужно повернуть на 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.) Как еще можно определить ориентацию документов?

1 Ответ

5 голосов
/ 18 ноября 2011

Как насчет того, чтобы просто запустить обнаружение, оценить частоту обнаружения и затем сделать то же самое, что и перевернуть?Лучшая ставка дает правильное направление.

...