Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <chrono>
- #include <thread>
- #include <algorithm>
- #include <tesseract-4_2/baseapi.h>
- #include <leptonica-1_1/allheaders.h>
- /* -------------------------------------------------------------------------- */
- static void usage()
- {
- std::cerr << "Usage : ./testTesseract <traineddata directory> <language> <mode> [pictures]" << std::endl;
- std::cerr << "Modes : Tesseract, LSTM, both" << std::endl;
- }
- int main(int argc, char *argv[])
- {
- if (argc < 4)
- {
- usage();
- return 1;
- }
- std::string trainedDataDir = argv[1];
- std::string language = argv[2];
- std::string mode = argv[3];
- tesseract::OcrEngineMode engineMode;
- if (mode == "Tesseract")
- engineMode = tesseract::OEM_TESSERACT_ONLY;
- else if (mode == "LSTM")
- engineMode = tesseract::OEM_LSTM_ONLY;
- else if (mode == "both")
- engineMode = tesseract::OEM_TESSERACT_LSTM_COMBINED;
- else
- {
- usage();
- std::cerr << "\"" << mode << "\" is not a valid mode" << std::endl;
- return 2;
- }
- tesseract::TessBaseAPI m_ocrApi;
- int res = m_ocrApi.Init(trainedDataDir.c_str(), language.c_str(), engineMode);
- if (res != 0)
- return 3;
- std::cerr << "OCR loaded" << std::endl;
- for (int i = 4; i < argc; i++)
- {
- // Load picture
- PIX* p = pixRead(argv[i]);
- std::cerr << "Picture " << argv[i] << " loaded : "
- << "w = " << std::setw(3) << p->w << ", "
- << "h = " << std::setw(3) << p->h << ", "
- << "d = " << std::setw(2) << p->d << ". ";
- // Perform OCR
- auto beforeOCR = std::chrono::system_clock::now();
- m_ocrApi.SetImage(p);
- m_ocrApi.SetSourceResolution(70);
- const char* result = m_ocrApi.GetUTF8Text();
- auto afterOCR = std::chrono::system_clock::now();
- if (result != nullptr)
- {
- std::string outText = result;
- // Display result
- std::chrono::duration<double> elapsed_seconds = afterOCR - beforeOCR;
- if (outText.back() == '\n')
- outText.pop_back();
- std::replace(outText.begin(), outText.end(), '\n', ' ');
- std::cerr << "Took " << elapsed_seconds.count() << "s, ";
- std::cerr << "decoded : \"" << outText << "\"." << std::endl;
- }
- else
- std::cerr << "<error>" << std::endl;
- pixDestroy(&p);
- }
- m_ocrApi.End();
- }
- /* -------------------------------------------------------------------------- */
Advertisement
Add Comment
Please, Sign In to add comment