Commit 7e2f04a5 for tesseract
commit 7e2f04a53f6a0cae4f0af146425f4c688db18a14
Author: Copilot <198982749+Copilot@users.noreply.github.com>
Date: Sun Jul 19 17:47:36 2026 +0200
doc: Add comprehensive PARAMETERS section to the tesseract man page (#4526)
Document the most commonly used Tesseract parameters with:
- Detailed descriptions explaining what each parameter does
- Engine compatibility labels ([Both], [LSTM], [Legacy])
- Organization into functional sections: Output Format, Character
Set, Image Processing, Dictionary, LSTM Engine, Legacy Engine, Debug
All default values have been verified against the actual
--print-parameters output.
- Add hOCR spec link to tessedit_create_hocr
- Expand hocr_font_info to describe x_font/x_fsize metadata and LSTM caveat
- Add LSTM accuracy note and cross-reference to hocr_char_boxes description
- Fix tessedit_create_page_xml: broaden scope (digital humanities, libraries,
annotation tools like Transkribus/eScriptorium) and link to PAGE-XML spec
- Clarify tessedit_create_boxfile works with both engines
- Clarify tessedit_char_unblacklist applies to both engines
- Expand user_patterns_file with accurate backslash character-class syntax
(\d=digit, \c=letter, \a=lower, \A=upper, \n=alphanum, \p=punc) and example
- Note lstm_use_matrix disabling is faster but lower accuracy
- Cross-reference hocr_char_boxes from lstm_choice_mode
- Add word pair examples to tessedit_enable_bigram_correction description
- Add textord_heavy_nr parameter for aggressive noise removal on dirty scans
Co-authored-by: Stefan Weil <sw@weilnetz.de>
diff --git a/doc/tesseract.1.asc b/doc/tesseract.1.asc
index a0a0fc4f..a4bd5b37 100644
--- a/doc/tesseract.1.asc
+++ b/doc/tesseract.1.asc
@@ -406,6 +406,318 @@ one per line. The format of the latter is documented in 'dict/trie.h'
on 'read_pattern_list()'.
+[[PARAMETERS]]
+PARAMETERS
+----------
+
+Tesseract parameters control the behaviour of the OCR engine and can be set
+using the *-c* option (e.g. `-c tessedit_char_whitelist=0123456789`) or by
+placing them in a <<CONFIGFILE,'CONFIGFILE'>>.
+The example above restricts recognized characters to digits only.
+Run *--print-parameters* to list all available parameters with their current
+values and short descriptions.
+
+The engine column indicates which OCR engine modes support a parameter: +
+*Both* -- works with both the LSTM and Legacy engines; +
+*LSTM* -- only applies to the neural-network LSTM engine (OEM 1 or 2); +
+*Legacy* -- only applies to the legacy Tesseract engine (OEM 0 or 2).
+
+OUTPUT FORMAT PARAMETERS
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+*tessedit_create_txt* (bool, default: 0) [Both]::
+ Write plain-text output to a `.txt` file. This is the default output format
+ when no config file or *-c* option overrides it.
+
+*tessedit_create_hocr* (bool, default: 0) [Both]::
+ Write hOCR output to a `.hocr` file. hOCR is an HTML-based format that
+ encodes the OCR results together with their bounding boxes and confidences.
+ Use the *hocr* config file to enable this format.
+ See the hOCR specification at https://kba.github.io/hocr-spec/1.2/ for
+ details of the output format.
+
+*hocr_font_info* (bool, default: 0) [Both]::
+ Add per-word font metadata to hOCR output. When enabled, each word span
+ includes `x_font` (font name) and `x_fsize` (point size) attributes in its
+ `title` field. Font information is derived from the recognition results and
+ is most reliable with the Legacy OCR engine; the LSTM engine may produce
+ less precise font names.
+
+*hocr_char_boxes* (bool, default: 0) [Both]::
+ Add per-character bounding-box coordinates to hOCR output as `ocrx_cinfo`
+ spans. Note that character-level bounding boxes may be less precise when
+ using the LSTM engine, because LSTM operates at the line level and
+ character positions are approximated from the line result.
+ See also *lstm_choice_mode* for LSTM-specific character alternative output.
+
+*tessedit_create_alto* (bool, default: 0) [Both]::
+ Write ALTO XML output to a `.xml` file. ALTO (Analyzed Layout and Text
+ Object) is a standard XML schema for describing the layout and content of
+ pages. Use the *alto* config file to enable this format.
+
+*tessedit_create_page_xml* (bool, default: 0) [Both]::
+ Write PAGE XML output to a `.page.xml` file. PAGE (Page Analysis and
+ Ground Truth Elements) is a standard XML format widely used in digital
+ humanities projects, library and archive workflows, and document annotation
+ tools such as Transkribus and eScriptorium.
+ See https://github.com/PRImA-Research-Lab/PAGE-XML for the specification.
+ Use the *page* config file to enable this format.
+
+*page_xml_polygon* (bool, default: 1) [Both]::
+ When writing PAGE XML output, create polygon outlines around text regions
+ instead of simple bounding boxes.
+
+*page_xml_level* (int, default: 0) [Both]::
+ Granularity of PAGE XML output: 0 = line level, 1 = word level.
+
+*tessedit_create_tsv* (bool, default: 0) [Both]::
+ Write tab-separated-values output to a `.tsv` file. Each recognized word is
+ output as one row with its bounding box, confidence and text. Use the *tsv*
+ config file to enable this format.
+
+*tessedit_create_pdf* (bool, default: 0) [Both]::
+ Write a searchable PDF to a `.pdf` file. The PDF contains the original image
+ with an invisible text layer for copy-paste and searching. Use the *pdf*
+ config file to enable this format.
+
+*textonly_pdf* (bool, default: 0) [Both]::
+ Write a text-only PDF (no image, only invisible text) to a `.pdf` file.
+
+*tessedit_create_boxfile* (bool, default: 0) [Both]::
+ Write a Tesseract box file (`.box`) that lists each recognized character with
+ its bounding box, one per line. Can be produced by either engine. These
+ files are primarily used as ground truth for legacy engine training.
+
+*tessedit_create_wordstrbox* (bool, default: 0) [Both]::
+ Write a WordStr-format box file (`.box`). Similar to *tessedit_create_boxfile*
+ but records whole words instead of individual characters.
+
+*tessedit_create_lstmbox* (bool, default: 0) [LSTM]::
+ Write an LSTM box file (`.box`) suitable for LSTM training.
+
+*preserve_interword_spaces* (bool, default: 0) [Both]::
+ Preserve multiple consecutive inter-word spaces in the output instead of
+ collapsing them to a single space.
+
+CHARACTER SET PARAMETERS
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+*tessedit_char_whitelist* (string, default: "") [Both]::
+ Restrict the set of characters that Tesseract will recognize to only those
+ listed in this string (allowlist). For example, setting this to `0123456789`
+ will make Tesseract return only digits. An empty value (the default) means
+ all characters in the trained data are allowed.
+
+*tessedit_char_blacklist* (string, default: "") [Both]::
+ Prevent Tesseract from recognizing the characters listed in this string.
+ Characters in this list will never appear in the output. This exclusion list
+ is applied after the allowlist (*tessedit_char_whitelist*).
+
+*tessedit_char_unblacklist* (string, default: "") [Both]::
+ Re-allow specific characters that were excluded by *tessedit_char_blacklist*.
+ Characters in this list override the exclusion list and apply to both the
+ LSTM and Legacy engines.
+
+IMAGE PROCESSING PARAMETERS
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+*thresholding_method* (int, default: 0) [Both]::
+ Select the algorithm used to convert a greyscale image to binary before OCR:
+ 0 = Otsu global thresholding (default);
+ 1 = LeptonicaOtsu (tiled Otsu, better for uneven lighting);
+ 2 = Sauvola local adaptive thresholding (best for heavily degraded documents).
+
+*thresholding_window_size* (double, default: 0.33) [Both]::
+ Window size (multiplied by image DPI) used to compute local statistics for
+ the Sauvola thresholding method (*thresholding_method* = 2).
+
+*thresholding_kfactor* (double, default: 0.34) [Both]::
+ Sensitivity factor for Sauvola thresholding (*thresholding_method* = 2).
+ Controls how much the local variance reduces the threshold. Typical range:
+ 0.2 -- 0.5. Higher values produce more aggressive thresholding.
+
+*thresholding_tile_size* (double, default: 0.33) [Both]::
+ Desired tile size (multiplied by image DPI) for the LeptonicaOtsu tiled
+ thresholding method (*thresholding_method* = 1).
+
+*thresholding_smooth_kernel_size* (double, default: 0) [Both]::
+ Kernel size for smoothing the threshold array produced by LeptonicaOtsu
+ (*thresholding_method* = 1). Use 0 for no smoothing.
+
+*thresholding_score_fraction* (double, default: 0.1) [Both]::
+ Fraction of the maximum Otsu score used by LeptonicaOtsu
+ (*thresholding_method* = 1). Use 0.0 for standard Otsu behaviour;
+ 0.1 is recommended for better robustness.
+
+*tessedit_do_invert* (bool, default: 1) [Both]::
+ Deprecated -- will be removed in a future release. When enabled, Tesseract
+ tries OCR on an inverted (white-on-black) copy of lines whose mean confidence
+ falls below *invert_threshold* and keeps the result with higher confidence.
+ To disable automatic inversion, set *invert_threshold* = 0 rather than
+ setting this parameter to 0.
+
+*invert_threshold* (double, default: 0.7) [Both]::
+ Mean confidence threshold below which Tesseract will also attempt OCR on
+ the inverted image. Lower values make inversion less likely. Set to 0 to
+ disable automatic inversion entirely (preferred over setting
+ *tessedit_do_invert* = 0, which is deprecated).
+
+*user_defined_dpi* (int, default: 0) [Both]::
+ Override the resolution of the input image in DPI. Use this when the image
+ metadata contains an incorrect or missing DPI value. A value of 0 means
+ the resolution is read from the image metadata or guessed automatically.
+ This parameter is equivalent to the *--dpi* command-line option; when *--dpi*
+ is given on the command line it simply sets this parameter.
+
+*textord_heavy_nr* (bool, default: 0) [Both]::
+ Aggressively remove noise blobs during page layout analysis. When disabled
+ (the default), Tesseract applies a moderate noise threshold that preserves
+ most legitimate characters. Enabling this raises the threshold significantly,
+ which can improve results on scans with heavy speckle or background noise, but
+ may also remove small legitimate characters such as punctuation marks,
+ diacritics, or small symbols. Useful when OCR-ing degraded or low-quality
+ document scans where accuracy on punctuation is less important than overall
+ text extraction.
+
+DICTIONARY PARAMETERS
+~~~~~~~~~~~~~~~~~~~~~
+
+*load_system_dawg* (bool, default: 1) [Both]::
+ Load the main system word list (DAWG) from the traineddata file. Disabling
+ this can speed up recognition and may improve results when OCR-ing content
+ that does not resemble natural language (e.g. codes, identifiers).
+
+*load_freq_dawg* (bool, default: 1) [Both]::
+ Load the list of frequent words from the traineddata file.
+
+*load_unambig_dawg* (bool, default: 1) [Legacy]::
+ Load the list of unambiguous words from the traineddata file.
+
+*load_punc_dawg* (bool, default: 1) [Legacy]::
+ Load the dawg containing punctuation patterns from the traineddata file.
+
+*load_number_dawg* (bool, default: 1) [Legacy]::
+ Load the dawg containing number patterns from the traineddata file.
+
+*load_bigram_dawg* (bool, default: 1) [Legacy]::
+ Load the dawg containing special word bigrams from the traineddata file.
+
+*user_words_file* (string, default: "") [Both]::
+ Path to a plain-text file containing additional words (one per line) that
+ Tesseract should treat as valid dictionary words.
+
+*user_words_suffix* (string, default: "") [Both]::
+ Filename suffix (relative to the tessdata directory) for a per-language file
+ of additional valid words. For example, setting this to `user-words` causes
+ Tesseract to look for `eng.user-words` when using the English model.
+
+*user_patterns_file* (string, default: "") [Both]::
+ Path to a plain-text file containing additional pattern strings (one per
+ line) that Tesseract should accept as valid words. In the pattern language,
+ backslash-escaped sequences specify character classes:
+ `\d` = any digit;
+ `\c` = any letter;
+ `\a` = any lowercase letter;
+ `\A` = any uppercase letter;
+ `\n` = any alphanumeric character;
+ `\p` = any punctuation character.
+ All other characters match themselves. For example, `1-\d\d\d-GOOG-411`
+ matches a phone-number-like string.
+ These are structural templates, not regular expressions. For the full
+ pattern syntax, see `dict/trie.h` in the Tesseract source.
+
+*user_patterns_suffix* (string, default: "") [Both]::
+ Filename suffix (relative to the tessdata directory) for a per-language file
+ of additional patterns.
+
+LSTM ENGINE PARAMETERS
+~~~~~~~~~~~~~~~~~~~~~~
+
+These parameters are only meaningful when using the LSTM OCR engine
+(*--oem 1* or *--oem 2*).
+
+*lstm_use_matrix* (bool, default: 1) [LSTM]::
+ Use the ratings matrix and beam search during LSTM decoding. Disabling this
+ reverts to a simpler, faster greedy decoding strategy that may be adequate
+ for very clean, high-quality images but generally gives lower accuracy.
+
+*lstm_choice_mode* (int, default: 0) [LSTM]::
+ Enables alternative character hypotheses in hOCR output (requires
+ *tessedit_create_hocr* = 1):
+ 0 = disabled (default);
+ 1 = include per-timestep alternative choices;
+ 2 = extract alternative choices from the CTC output mapped per character.
+ See also *hocr_char_boxes* for character bounding-box output.
+
+*lstm_choice_iterations* (int, default: 5) [LSTM]::
+ Number of cascading beam-search iterations used when *lstm_choice_mode* is
+ non-zero.
+
+*lstm_rating_coefficient* (double, default: 5) [LSTM]::
+ Scaling factor applied to LSTM character ratings. Smaller values produce
+ higher (better) confidence scores and preserve more information before the
+ zero cut-off. The default value is 5.
+
+LEGACY ENGINE PARAMETERS
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+The following parameters apply only when using the legacy Tesseract engine
+(*--oem 0* or *--oem 2*, requires a traineddata file that includes the legacy
+model such as those from https://github.com/tesseract-ocr/tessdata).
+
+*tessedit_enable_bigram_correction* (bool, default: 1) [Legacy]::
+ Apply bigram-based correction to improve recognition of adjacent word pairs
+ that commonly appear together (e.g. "is a", "in the", "New York"). The
+ correction uses a bigram dictionary from the traineddata file to re-score
+ word hypotheses in context.
+
+*tessedit_enable_dict_correction* (bool, default: 0) [Legacy]::
+ Use the dictionary to post-correct uncertain word hypotheses.
+
+*tessedit_fix_fuzzy_spaces* (bool, default: 1) [Legacy]::
+ Try to fix spaces that were ambiguously classified as inter-word or
+ inter-character gaps.
+
+*language_model_penalty_non_dict_word* (double, default: 0.15) [Legacy]::
+ Penalty added to the score of word hypotheses that do not appear in the
+ dictionary. Increase to bias recognition more strongly towards dictionary
+ words.
+
+*language_model_penalty_non_freq_dict_word* (double, default: 0.1) [Legacy]::
+ Additional penalty for words that are in the dictionary but not in the list
+ of frequent words.
+
+*language_model_penalty_case* (double, default: 0.1) [Legacy]::
+ Penalty applied when the capitalisation of a recognised word is inconsistent
+ with the surrounding context.
+
+*language_model_penalty_script* (double, default: 0.5) [Legacy]::
+ Penalty applied when a recognised character belongs to a different script
+ from the surrounding text.
+
+*language_model_penalty_punc* (double, default: 0.2) [Legacy]::
+ Penalty applied for punctuation usage that is inconsistent with the language
+ model.
+
+*wordrec_enable_assoc* (bool, default: 1) [Legacy]::
+ Enable the associator, which considers combinations of character fragments
+ when forming word hypotheses. Disabling may speed up recognition at the
+ cost of accuracy on fragmented characters.
+
+DEBUG PARAMETERS
+~~~~~~~~~~~~~~~~
+
+*debug_file* (string, default: "") [Both]::
+ Redirect Tesseract debug/diagnostic output to this file instead of stderr.
+ Set to `/dev/null` (or use the *quiet* config file) to suppress all debug
+ output.
+
+*tessedit_write_params_to_file* (string, default: "") [Both]::
+ If set to a filename, Tesseract will write the values of all its parameters
+ to that file when it starts up. Useful for capturing the effective
+ configuration for debugging or reproducibility.
+
+
ENVIRONMENT VARIABLES
---------------------
*`TESSDATA_PREFIX`*::