632 #if defined(__USE_GNU)
634 # if defined(__clang__)
636 feenableexcept(FE_DIVBYZERO);
638 feenableexcept(FE_DIVBYZERO | FE_OVERFLOW | FE_INVALID);
641 const char *lang =
nullptr;
642 const char *image =
nullptr;
643 const char *outputbase =
nullptr;
644 const char *datapath =
nullptr;
645 bool list_langs =
false;
646 bool print_parameters =
false;
647 bool print_fonts_table =
false;
651 #ifdef DISABLED_LEGACY_ENGINE
656 std::vector<std::string> vars_vec;
657 std::vector<std::string> vars_values;
659 if (std::getenv(
"LEPT_MSG_SEVERITY")) {
661 setMsgSeverity(L_SEVERITY_EXTERNAL);
664 setMsgSeverity(L_SEVERITY_ERROR);
667 #if defined(HAVE_TIFFIO_H) && defined(_WIN32)
669 TIFFSetErrorHandler(Win32ErrorHandler);
670 TIFFSetWarningHandler(Win32WarningHandler);
673 if (!ParseArgs(argc, argv, &lang, &image, &outputbase, &datapath, &dpi, &list_langs,
674 &print_parameters, &print_fonts_table, &vars_vec, &vars_values, &arg_i, &pagesegmode, &enginemode)) {
678 bool in_recognition_mode = !list_langs && !print_parameters && !print_fonts_table;
680 if (lang ==
nullptr && in_recognition_mode) {
685 if (image ==
nullptr && in_recognition_mode) {
698 const int init_failed = api.
Init(datapath, lang, enginemode, &(argv[arg_i]), argc - arg_i,
699 &vars_vec, &vars_values,
false);
701 if (!SetVariablesFromCLArgs(api, argc, argv)) {
714 fprintf(stderr,
"Could not initialize tesseract.\n");
718 if (print_parameters) {
720 fprintf(stdout,
"Tesseract parameters:\n");
726 #ifndef DISABLED_LEGACY_ENGINE
727 if (print_fonts_table) {
729 fprintf(stdout,
"Tesseract fonts table:\n");
736 FixPageSegMode(api, pagesegmode);
739 auto dpi_string = std::to_string(dpi);
740 api.
SetVariable(
"user_defined_dpi", dpi_string.c_str());
743 int ret_val = EXIT_SUCCESS;
746 Pix *pixs = pixRead(image);
748 fprintf(stderr,
"Leptonica can't process input file: %s\n", image);
759 const std::unique_ptr<const tesseract::PageIterator> it(api.
AnalyseLayout());
763 it->Orientation(&orientation, &direction, &order, &deskew_angle);
765 "Orientation: %d\nWritingDirection: %d\nTextlineOrder: %d\n"
766 "Deskew angle: %.4f\n",
767 orientation, direction, order, deskew_angle);
769 ret_val = EXIT_FAILURE;
780 bool in_training_mode = (api.
GetBoolVariable(
"tessedit_ambigs_training", &b) && b) ||
785 #ifdef DISABLED_LEGACY_ENGINE
787 auto osd_warning = std::string(
"");
789 const char *disabled_osd_msg =
790 "\nERROR: The page segmentation mode 0 (OSD Only) is currently "
792 fprintf(stderr,
"%s", disabled_osd_msg);
797 "\nWarning: The page segmentation mode 1 (Auto+OSD) is currently "
799 "Using PSM 3 (Auto) instead.\n\n";
803 "\nWarning: The page segmentation mode 12 (Sparse text + OSD) is "
804 "currently disabled. "
805 "Using PSM 11 (Sparse text) instead.\n\n";
809 std::vector<std::unique_ptr<TessResultRenderer>> renderers;
811 if (in_training_mode) {
812 renderers.push_back(
nullptr);
813 }
else if (outputbase !=
nullptr) {
814 PreloadRenderers(api, renderers, pagesegmode, outputbase);
817 if (!renderers.empty()) {
818 #ifdef DISABLED_LEGACY_ENGINE
819 if (!osd_warning.empty()) {
820 fprintf(stderr,
"%s", osd_warning.c_str());
823 bool succeed = api.
ProcessPages(image,
nullptr, 0, renderers[0].get());
825 fprintf(stderr,
"Error during processing.\n");
826 ret_val = EXIT_FAILURE;
@ PSM_OSD_ONLY
Orientation and script detection only.
@ PSM_SPARSE_TEXT
Find as much text as possible in no particular order.
@ PSM_AUTO_ONLY
Automatic page segmentation, but no OSD, or OCR.
@ PSM_AUTO
Fully automatic page segmentation, but no OSD.
@ PSM_SPARSE_TEXT_OSD
Sparse text with orientation and script det.
void tprintf(const char *format,...)
void SetPageSegMode(PageSegMode mode)
bool SetVariable(const char *name, const char *value)
bool ProcessPages(const char *filename, const char *retry_config, int timeout_millisec, TessResultRenderer *renderer)
PageSegMode GetPageSegMode() const
int Init(const char *datapath, const char *language, OcrEngineMode mode, char **configs, int configs_size, const std::vector< std::string > *vars_vec, const std::vector< std::string > *vars_values, bool set_only_non_debug_params)
void PrintVariables(FILE *fp) const
void SetImage(const unsigned char *imagedata, int width, int height, int bytes_per_pixel, int bytes_per_line)
PageIterator * AnalyseLayout()
void PrintFontsTable(FILE *fp) const
bool GetBoolVariable(const char *name, bool *value) const
void SetOutputName(const char *name)
static TESS_API void Update()
static DawgCache * GlobalDawgCache()