You grab a scan, throw it at an online OCR tool, and get back a wall of typos — “3” read as “8”, “O” as “0”, tables scrambled beyond recognition. The tool isn’t broken. The image wasn’t ready.
OCR engines (Tesseract / PaddleOCR / cloud services) are character recognition models that eat pixels. Feed them blurry, low-resolution, watermarked, skewed images and you’ll get blurry, low-quality output in return.
Real benchmark numbers (from OpenBenchmarking and ExpertBeacon 2025 comparisons):
| Engine | Overall accuracy | Pricing |
|---|---|---|
| Google Cloud Vision | 96.7% | Pay per call |
| Amazon Textract | 95.8% | Pay per call |
| Microsoft Azure | 93.5% | Pay per call |
| Tesseract (open source) | ~90% | Free, runs locally |
Note that ~90% is the “ideal input” number. If you throw in a phone photo of a screen or a low-res image ripped from a PDF, accuracy dropping to 60–70% is the norm.
This guide explains how to push that 60% up to 95% — five preprocessing steps, each with concrete “what to do and how far to go” thresholds, plus a frontend-only workflow (Image Compressor + Image Cropper + Batch OCR).
Step 1: Resolution — DPI Must Be 300 or Higher
OCR models are trained on 300 DPI scans. Give them an 800×600 screenshot and they can’t read small text; give them a 4000×3000 original and they’ll grind slowly while wasting compute.
Empirical thresholds:
- Printed body text: long edge at least 2000 px (~A4 at 300 DPI)
- Tables, receipts, tickets: long edge at least 2400 px (more detail)
- Handwriting: long edge 3000+ px (high character variance, needs more context)
- Phone photos: long edge at least 2500 px, and keep the page flat
Below those thresholds, no engine will save you. Dedicated document-scan apps (Adobe Scan, Microsoft Lens) auto-detect edges, correct perspective, and upscale to the right resolution — strongly recommend installing one.
But if your source is already a low-res scan, don’t upscale with interpolation — it’ll just get blurrier. Re-scanning is the only fix.
Step 2: Contrast — Black Enough, White Enough
OCR models rely on pixel grayscale delta to separate text from background. Maximum-contrast text is the easiest to read.
What to do:
- Black text on white background is best. Colored text, gray-on-gray, or reversed text (white on black) all significantly hurt accuracy.
- If the original has pale-blue background with gray text, drop saturation to 0 and crank contrast to +50 in any image editor — OCR accuracy can climb 10–20 percentage points.
- Old scanned documents get a yellow cast — push the color temperature cooler (de-yellow), or convert straight to grayscale. OCR models handle grayscale better.
Quick sanity check: zoom to 100%. Can you read every character in under a second? If not, OCR probably can’t either.
Step 3: Denoising — Moiré, Compression Artifacts, Watermarks
Three noise types wreck OCR the most:
| Noise type | Source | Fix |
|---|---|---|
| Moiré patterns | Screen re-photography | Use a dedicated app (Adobe Scan), or reshoot at a different angle |
| JPEG compression artifacts | JPGs saved over and over | Convert to PNG first, then OCR |
| Watermarks, stamps, annotations | Built into the original | Crop out non-text regions with Image Cropper |
In practice, invoices with semi-transparent watermarks cause OCR to read the watermark text along with the body, mixing everything into unusable output.
Most reliable approach: before OCR, run the image through Image Compressor to re-encode the format (PNG → JPG or vice versa). Strips old compression artifacts and controls final file size at the same time.
Step 4: Deskew — Beyond 3 Degrees, Accuracy Falls Off
Tesseract is highly sensitive to skew angle. 0–3 degrees barely matters; beyond 5 degrees accuracy falls off a cliff; past 10 degrees it’s basically unusable.
Manual correction:
- Rotate in any editor, fine-tuning in 0.5-degree increments, until text lines are perfectly horizontal
- Or use OpenCV’s
HoughLinesPto auto-detect skew angle
Automated option: apps like Adobe Scan, Microsoft Lens, and Baidu Netdisk Scan all have auto edge detection + deskew built in — you snap a photo and get a clean, squared-up image ready to feed into OCR.
If the source is exported from a PDF, the rotation built into your PDF reader is usually enough.
Step 5: Pick the Right Engine and Parameters
Once the four preprocessing steps above are solid, the last step is engine + parameter selection.
Engine selection:
| Scenario | Recommended engine |
|---|---|
| English print | Tesseract eng (open source, free, local) |
| Chinese print | Tesseract chi_sim + eng (combined) |
| Tables, tickets | Dedicated structured recognition (PaddleOCR, Amazon Textract) |
| Handwriting | Cloud services (Google ML Kit, Baidu handwriting recognition) |
Key Tesseract parameters:
--psm 6: assume a uniform block of text (most document scenarios)--psm 11: sparse text (menus, receipts, signs)--psm 12: combined with OSD (Orientation and Script Detection) for auto orientation detectionpreserve_interword_spaces=1: preserve spaces between words (don’t enable for Chinese)
Before running batch jobs, spend 5 minutes testing on a single image to dial in parameters. With batch jobs, wrong parameters waste tens of minutes.
Hands-On: A Frontend-Only Three-Tool Workflow
Don’t want to install software, don’t want to upload files to the cloud (privacy)? Piick’s three tools run entirely in your browser locally — images never leave your computer.
Workflow
- Image Cropper: trim away irrelevant areas (watermarks, signatures, stamps, extra margins), leaving the core text region.
- Image Compressor: re-encode the image (Quality 80, max width 1920px) to strip old compression artifacts and control size.
- Batch Image to Text: upload a
.zipor drag in multiple images. Each gets recognized individually, then packaged for download — one.txtper image, plus a merged text file and CSV index.
Why this combination works
- Cropping removes distractions — watermarks, stamps, and extra margins never enter recognition
- Compression strips artifacts — old JPEG noise gets overwritten by fresh encoding
- Batch OCR stays local — Tesseract.js runs in the browser, no data uploaded. Great for invoices, IDs, internal documents
Good fit for
- Digitizing paper contracts / invoices: batch-process dozens of scans
- Book / paper excerpts: turn segments of screenshots into editable text
- Whiteboard photos, slide captures: batch-convert into meeting notes
Not a good fit for
- Handwriting (low accuracy, needs cloud services)
- Complex tables (rows and columns scramble, needs a dedicated structured-recognition tool)
- Formulas, code screenshots (recognition under 50%, OCR not recommended)
Image-to-text is 80% preprocessing, 20% engine tuning. Get the five steps above solid (resolution, contrast, denoising, deskew, parameter selection), and even open-source Tesseract hits 95%+ accuracy.
Need to batch-process scans? Open the Piick Batch Image to Text tool, upload a .zip or drag in a few dozen images — by the time you grab a coffee, your merged text files will be ready.