Guest User

Tesseract test

a guest
Sep 10th, 2021
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <chrono>
  4. #include <thread>
  5. #include <algorithm>
  6. #include <tesseract-4_2/baseapi.h>
  7. #include <leptonica-1_1/allheaders.h>
  8.  
  9. /* -------------------------------------------------------------------------- */
  10.  
  11. static void usage()
  12. {
  13.    std::cerr << "Usage : ./testTesseract <traineddata directory> <language> <mode> [pictures]" << std::endl;
  14.    std::cerr << "Modes : Tesseract, LSTM, both" << std::endl;      
  15. }
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.    if (argc < 4)
  20.    {
  21.       usage();
  22.       return 1;
  23.    }
  24.  
  25.    std::string trainedDataDir = argv[1];
  26.    std::string language = argv[2];
  27.    std::string mode = argv[3];
  28.  
  29.    tesseract::OcrEngineMode engineMode;
  30.  
  31.    if (mode == "Tesseract")
  32.       engineMode = tesseract::OEM_TESSERACT_ONLY;
  33.    else if (mode == "LSTM")
  34.       engineMode = tesseract::OEM_LSTM_ONLY;
  35.    else if (mode == "both")
  36.       engineMode = tesseract::OEM_TESSERACT_LSTM_COMBINED;
  37.    else
  38.    {
  39.       usage();
  40.       std::cerr << "\"" << mode << "\" is not a valid mode" << std::endl;
  41.       return 2;
  42.    }
  43.  
  44.    tesseract::TessBaseAPI m_ocrApi;
  45.    int res = m_ocrApi.Init(trainedDataDir.c_str(), language.c_str(), engineMode);
  46.    if (res != 0)
  47.       return 3;
  48.  
  49.    std::cerr << "OCR loaded" << std::endl;
  50.  
  51.    for (int i = 4; i < argc; i++)
  52.    {
  53.       // Load picture
  54.       PIX* p = pixRead(argv[i]);
  55.       std::cerr << "Picture " << argv[i] << " loaded : "
  56.                 << "w = " << std::setw(3) << p->w << ", "
  57.                 << "h = " << std::setw(3) << p->h << ", "
  58.                 << "d = " << std::setw(2) << p->d << ". ";
  59.  
  60.       // Perform OCR
  61.       auto beforeOCR = std::chrono::system_clock::now();
  62.       m_ocrApi.SetImage(p);
  63.       m_ocrApi.SetSourceResolution(70);
  64.       const char* result = m_ocrApi.GetUTF8Text();
  65.       auto afterOCR = std::chrono::system_clock::now();
  66.  
  67.       if (result != nullptr)
  68.       {
  69.          std::string outText = result;
  70.          // Display result
  71.          std::chrono::duration<double> elapsed_seconds = afterOCR - beforeOCR;
  72.          if (outText.back() == '\n')
  73.             outText.pop_back();
  74.          std::replace(outText.begin(), outText.end(), '\n', ' ');
  75.          std::cerr << "Took " << elapsed_seconds.count() << "s, ";
  76.          std::cerr << "decoded : \"" << outText << "\"." << std::endl;
  77.       }
  78.       else
  79.          std::cerr << "<error>" << std::endl;
  80.  
  81.       pixDestroy(&p);
  82.    }
  83.  
  84.    m_ocrApi.End();
  85. }
  86.  
  87. /* -------------------------------------------------------------------------- */
Advertisement
Add Comment
Please, Sign In to add comment