Tesseract OCR Server

Open-Source OCR with Tesseract 5.4

The open-source baseline: Tesseract 5.4 with its LSTM neural-network engine and tessdata_best models, run server-side at 300 DPI with per-word confidence you can review inline. Free, ubiquitous — and a useful yardstick for the commercial engines.

Drop PDF or images here, or click to upload

Supports PDF, TIFF, JPG, BMP, PNG — Tesseract 5 LSTM engine with tessdata_best models at 300 DPI Part of the OCR comparison suite — see how Foxit’s commercial OCR engines handle the same document in the OCR Compare demo.

How it works

The engine. Uploads go through a thin PHP proxy on this server to a FastAPI service that shells out to Tesseract 5.4 — the open-source OCR engine originally from HP, open-sourced by Google, and maintained by the community since. Version 4 replaced the classic character classifier with an LSTM neural network that reads whole lines of text; this demo runs it with the high-accuracy tessdata_best float models, rasterizing input pages at 300 DPI.

Per-word confidence. Tesseract reports a 0–100 confidence score for every recognized word. After a run, use the Confidence toolbar toggle or the Review tab to see each word color-coded — a quick way to spot where the engine guessed.

Why it’s here. This demo is not powered by Foxit — it exists as the open-source contrast to the two commercial Foxit engines hosted on this site. Same document, same hardware, three engines: run them side-by-side in the OCR Compare demo.

Sample invocation

Tesseract needs no SDK — a CLI call or a few lines of Python is the whole integration.

# Searchable PDF (page image + invisible text layer) and plain text in one pass
tesseract page.png out --dpi 300 -l eng pdf txt

# TSV output includes per-word confidence (the "conf" column this demo displays)
tesseract page.png out --dpi 300 -l eng tsv

# Multi-language: combine trained models with "+"
tesseract page.png out -l eng+fra+deu pdf
import pytesseract
from PIL import Image

img = Image.open('page.png')

# Plain text
text = pytesseract.image_to_string(img, lang='eng', config='--dpi 300')

# Searchable PDF (page image + invisible text layer)
pdf_bytes = pytesseract.image_to_pdf_or_hocr(img, lang='eng', extension='pdf')
open('searchable.pdf', 'wb').write(pdf_bytes)

# Per-word confidence — the data behind this demo's Review panel
data = pytesseract.image_to_data(img, lang='eng',
                                 output_type=pytesseract.Output.DICT)
for word, conf in zip(data['text'], data['conf']):
    if word.strip():
        print(f'{conf:>3}  {word}')

The server behind this page does exactly the CLI form: rasterize each PDF page at 300 DPI, run tesseract … pdf txt tsv with tessdata_best, and return the merged searchable PDF, text, and word-level confidence data.