Prompt
I'm building a mobile capture app and need OCR for bad photos
Latest observation
Oct 11, 2026
OpenAI APIWeb search: off
For bad photos, OCR works best when you don’t rely on OCR alone. The winning pattern is usually:
- Detect/rectify the document or text region
- Enhance the image
- Run a robust OCR engine
- Post-process and confidence-filter results
Best OCR options for low-quality mobile captures
Cloud OCR
Good if you want strong accuracy with minimal ML work.
- Google Cloud Vision OCR
- Very solid on messy images
- Good handwriting support relative to many others
- Easy to integrate
- AWS Textract
- Best for documents/forms/tables
- Less ideal for general scene text
- Azure OCR / Document Intelligence
- Strong document extraction
- Good for business workflows
On-device OCR
Best if you need offline, privacy, or lower latency.
- Google ML Kit Text Recognition
- Good mobile SDK
- Easy on Android/iOS
- Reasonable for casual OCR, less strong on very bad images
- Apple Vision framework
- Excellent on iOS
- Very efficient on-device
- Tesseract
- Open source, flexible
- Usually weaker on bad photos unless heavily preprocessed
Best accuracy for hard images
If you can use a custom pipeline/model:
- PaddleOCR
- EasyOCR
- Transformer-based OCR models for server-side inference
These can outperform traditional OCR on noisy text, especially if combined with preprocessing.
What to do for “bad photos”
If images are blurry, skewed, low light, or angled, add preprocessing:
- Auto-crop / document detection
- Perspective correction
- Deskew
- Deblur / sharpen
- Denoise
- Contrast / brightness normalization
- Adaptive thresholding
- Super-resolution for tiny text
- Text-region cropping before OCR
A simple pipeline often improves results a lot:
- OpenCV detect edges/corners
- Warp to flat document
- Convert to grayscale
- Denoise
- Adaptive threshold
- OCR
Recommended stack by use case
If you want easiest + best overall
- Google Cloud Vision OCR
- Add document detection and preprocessing on-device first
If you want offline mobile
- Apple Vision on iOS
- ML Kit on Android
- Add OpenCV preprocessing
If you want best control and can run backend inference
- PaddleOCR or a modern OCR model
- Use a preprocessing pipeline
- Add confidence-based rescans
Practical mobile app tips
- Ask users to capture with:
- good lighting
- focus lock
- document filling most of the frame
- avoid motion blur
- Use live edge detection and quality scoring before capture
- If confidence is low, automatically prompt for a retake
- Consider multi-shot capture and pick the sharpest frame
My recommendation
If your core problem is bad photos, I’d suggest:
- On-device preprocessing with OpenCV
- Cloud OCR for final extraction if privacy/latency allows
- Or Apple Vision / ML Kit if you need fully mobile
If you want, I can recommend a specific OCR stack for iOS, Android, or cross-platform, or give you a preprocessing pipeline in OpenCV.