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.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.
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.