{
 "kind": "app",
 "id": "app:tesseract",
 "url": "https://headlesson.com/apps/tesseract",
 "name": "Tesseract OCR",
 "one_liner": "Open-source OCR engine with a command-line program that turns images of text into plain text, TSV, hOCR or searchable PDF.",
 "description": "Tesseract is an open-source OCR engine provided as the libtesseract library and a tesseract command-line program. It reads images such as PNG, JPEG and TIFF and writes plain text, hOCR, PDF, TSV, ALTO or PAGE output. Recognition needs trained language data files, and the project itself has no graphical interface.",
 "made_by_headlesson_operator": false,
 "interfaces": [
  {
   "kind": "cli",
   "name": "tesseract",
   "install": "brew install tesseract",
   "verify": "tesseract --version",
   "auth": "None for local images.",
   "docs": "https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html"
  }
 ],
 "tests": [
  {
   "record_id": "test:djrmwhe",
   "url": "https://headlesson.com/tests/djrmwhe",
   "date": "2026-10-11",
   "version": "5.5.1",
   "status": "passed"
  }
 ],
 "latest_test_conclusion": "On 2026-10-11, the headlesson operator ran all 8 steps of this lesson with Tesseract OCR 5.5.1 (macOS26.5.2 arm64; Homebrew tesseract 5.5.1 and tesseract-lang 4.1.0 already installed (not reinstalled; upstream latest is 5.5.3); poppler 26.04.0 for pdftoppm; self-made text page only), and all passed. The final Next step is advice and was not run. No independent check has been reviewed. This is the operator's own run, not a vendor claim.",
 "independent_check": {
  "state": "not_checked"
 },
 "lesson": {
  "goal": "Render a self-made text page to a PNG, OCR it with tesseract and check the recognized text.",
  "steps": [
   "command -v tesseract || brew install tesseract",
   "tesseract --version",
   "tesseract --list-langs",
   "printf 'Invoice 2026-001\\nTotal: 42 apples\\n' > note.txt",
   "cupsfilter -m application/pdf note.txt > note.pdf",
   "pdftoppm -r 300 -png -singlefile note.pdf scan",
   "tesseract scan.png out -l eng",
   "grep -c 'Total: 42 apples' out.txt"
  ],
  "next_advice": "Next: Agree with the user on the real images, their languages and the output format; check that the language codes appear in tesseract --list-langs, OCR one page with -l <lang> (add tsv to get word confidences), and compare a sample of the text with the image before processing the rest.",
  "cautions": {
   "note": "These notes come from the lesson. Some describe failures seen in tests; others are general cautions. Each one is not a separately tested result.",
   "items": [
    "The Homebrew tesseract formula contains only the eng and osd language data; other languages need brew install tesseract-lang.",
    "An unavailable language (for example -l xxx) printed \"Failed loading language\" and exited 1 in the test; check tesseract --list-langs first.",
    "The second argument is an output base name; tesseract scan.png out writes out.txt. Pass - as the output base to print to standard output.",
    "Low-resolution input is misread without an error; a 50 dpi render gave \"Inyatce 2026\" and exit 0 in the test, while a 300 dpi render was read correctly. Check the text, not only the exit code.",
    "Appending the config names tsv, hocr or pdf selects word-level TSV with positions and confidence, hOCR, or a searchable PDF with a text layer.",
    "Steps 4 and 5 use macOS cupsfilter and poppler's pdftoppm only to make a test image; any PNG of printed text works as input.",
    "Confirm: Check which images are read, which language data is used and where the output file is written (an existing out.txt is replaced), and spot-check the OCR text against the image before passing it to a downstream step."
   ]
  },
  "note": "This is the current lesson. The test record above was run on the lesson as it was at its own revision; they can differ."
 },
 "mcp_get": "headlesson_get id=\"app:tesseract\" sections [\"lesson\",\"gotchas\"]",
 "axes": {
  "license": {
   "value": "Apache-2.0",
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "https://github.com/tesseract-ocr/tesseract",
   "by": "official"
  },
  "open_source": {
   "value": true,
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "https://github.com/tesseract-ocr/tesseract",
   "by": "official"
  },
  "pricing": {
   "value": "free",
   "checked": "2026-10-11",
   "certainty": "inferred",
   "source": "https://github.com/tesseract-ocr/tesseract",
   "by": "editorial"
  },
  "has_human_gui": {
   "value": "none",
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "https://github.com/tesseract-ocr/tesseract",
   "by": "official"
  },
  "non_interactive": {
   "value": true,
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "headlesson editorial judgement",
   "by": "editorial"
  },
  "machine_output": {
   "value": true,
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "https://github.com/tesseract-ocr/tesseract",
   "by": "official"
  },
  "local_mcp": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "remote_mcp": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "cli": {
   "value": true,
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "https://github.com/tesseract-ocr/tesseract",
   "by": "official"
  },
  "rest_api": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "auth": {
   "value": "none",
   "checked": "2026-10-11",
   "certainty": "inferred",
   "source": "headlesson editorial judgement",
   "by": "editorial"
  },
  "self_hostable": {
   "value": true,
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "headlesson editorial judgement",
   "by": "editorial"
  },
  "embeds_llm": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "refusal_contract": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "audit_log": {
   "value": "unknown",
   "checked": null,
   "certainty": null,
   "source": null,
   "by": null
  },
  "last_release": {
   "value": "2026-07-24",
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "https://api.github.com/repos/tesseract-ocr/tesseract/releases/latest",
   "by": "official"
  },
  "ja_support": {
   "value": true,
   "checked": "2026-10-11",
   "certainty": "primary",
   "source": "https://github.com/tesseract-ocr/tessdata/blob/main/jpn.traineddata",
   "by": "official"
  }
 },
 "sources": [
  {
   "fields": [
    "/name",
    "/axes/license",
    "/axes/open_source",
    "/axes/has_human_gui",
    "/axes/machine_output",
    "/axes/cli"
   ],
   "source": "https://github.com/tesseract-ocr/tesseract",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "official"
  },
  {
   "fields": [
    "/one_liner",
    "/description"
   ],
   "source": "https://github.com/tesseract-ocr/tesseract",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "editorial"
  },
  {
   "fields": [
    "/lesson/goal",
    "/lesson/next_advice",
    "/lesson/cautions/items/5",
    "/lesson/cautions/items/6",
    "/interfaces/0/auth",
    "/axes/auth",
    "/relations/1"
   ],
   "source": "headlesson editorial judgement",
   "checked": "2026-10-11",
   "certainty": "inferred",
   "by": "editorial"
  },
  {
   "fields": [
    "/lesson/steps/0",
    "/lesson/cautions/items/0",
    "/interfaces/0/kind",
    "/interfaces/0/name",
    "/interfaces/0/install",
    "/interfaces/0/verify",
    "/interfaces/0/docs"
   ],
   "source": "https://formulae.brew.sh/formula/tesseract",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "third-party"
  },
  {
   "fields": [
    "/lesson/steps/1",
    "/lesson/steps/2",
    "/lesson/steps/3",
    "/lesson/steps/4",
    "/lesson/steps/5",
    "/lesson/steps/6",
    "/lesson/steps/7",
    "/lesson/cautions/items/1",
    "/lesson/cautions/items/2",
    "/lesson/cautions/items/3",
    "/axes/non_interactive",
    "/axes/self_hostable"
   ],
   "source": "headlesson editorial judgement",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "editorial"
  },
  {
   "fields": [
    "/lesson/cautions/items/4"
   ],
   "source": "https://tesseract-ocr.github.io/tessdoc/Command-Line-Usage.html",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "official"
  },
  {
   "fields": [
    "/axes/pricing",
    "/relations/0"
   ],
   "source": "https://github.com/tesseract-ocr/tesseract",
   "checked": "2026-10-11",
   "certainty": "inferred",
   "by": "editorial"
  },
  {
   "fields": [
    "/axes/last_release"
   ],
   "source": "https://api.github.com/repos/tesseract-ocr/tesseract/releases/latest",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "official"
  },
  {
   "fields": [
    "/axes/ja_support"
   ],
   "source": "https://github.com/tesseract-ocr/tessdata/blob/main/jpn.traineddata",
   "checked": "2026-10-11",
   "certainty": "primary",
   "by": "official"
  }
 ],
 "primary_record": "Test results here are the operator's own past lesson trials (legacy). They are not claimed to meet level L1 of run-task-contract/0.1.0.",
 "relations": [
  {
   "type": "used-for",
   "to": "usecase:parse-documents-for-llm",
   "url": "https://headlesson.com/usecases/parse-documents-for-llm"
  },
  {
   "type": "depends-on",
   "to": "app:poppler",
   "url": "https://headlesson.com/apps/poppler"
  }
 ],
 "relations_not_published": 0,
 "cite": "headlesson app:tesseract: see test record test:djrmwhe (https://headlesson.com/tests/djrmwhe).",
 "page_updated": "2026-10-13"
}
