TL;DR
- OCRmyPDF là CLI open-source (MPL-2.0) chuyên thêm lớp OCR ẩn vào scanned PDF để grep, copy-paste và archive được.
- Khác với Tesseract/EasyOCR "thô", OCRmyPDF quản lý toàn bộ pipeline: disassemble PDF → cleanup ảnh → OCR → reassemble lossless, xuất PDF/A.
- Hiện tại v17.4.1 (04/2026), 33.3k sao, 2.3k forks, 116 contributors, 1.5k+ repo phụ thuộc, 52 releases.
- Hỗ trợ 100+ ngôn ngữ (Tesseract), chạy trên Linux/macOS/Windows/FreeBSD + Docker x64/ARM, pure Python 3.11+.
- Plugin cắm được EasyOCR, PaddleOCR, Apple Vision thay cho Tesseract.
Chuyện gì đang xảy ra?
OCRmyPDF vừa release v17.4.1 hai tuần trước, tiếp tục đà cadence ổn định của dự án bắt đầu từ 2013. Repo chạm mốc 33.3k sao trên GitHub và được 1.5k+ dự án khác dùng làm dependency, trong đó có hệ document management self-hosted nổi tiếng paperless-ngx và Nextcloud workflow_ocr.
Tagline của repo gói gọn value prop: "OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched." Không fancy AI, không SaaS pricing — một CLI tool pure Python, MPL-2.0, battle-tested trên hàng triệu PDF.
Tại sao đáng chú ý?
Khi Google "OCR một file PDF scan", đa số kết quả đề xuất Tesseract, EasyOCR, hay cloud OCR như Google Cloud Vision. Nhưng tất cả chúng đều tập trung vào image → text. Nếu bạn có 1 file PDF scan 500 trang thì phải tự viết script để: pdftoppm convert thành ảnh, OCR từng trang, collect HOCR, rồi ghép ngược lại PDF. Mỗi bước đều đáng sai sót.
OCRmyPDF đóng gói toàn bộ pipeline đó với lossless reassembly — ảnh gốc giữ nguyên độ phân giải, lớp text đặt chính xác dưới glyph để copy-paste khớp vị trí, file output là PDF/A chuẩn ISO cho archival dài hạn. Đó là thứ khiến nó trở thành lựa chọn mặc định cho server-side batch OCR, không phải "yet another OCR wrapper".
Technical facts
| Thuộc tính | Giá trị |
|---|---|
| Version hiện tại | v17.4.1 (04/2026) |
| License | MPL-2.0 (cho phép embed vào closed-source commercial) |
| Ngôn ngữ | Python 3.11+ (97.7%), đã drop 3.10 |
| Dependencies runtime | Ghostscript + Tesseract OCR 4.1.1+ |
| OCR engines | Tesseract (default) · plugin EasyOCR / PaddleOCR / Apple Vision |
| Ngôn ngữ OCR | 100+ qua Tesseract language packs |
| Output | PDF/A (archival ISO) mặc định, JBIG2 lossless/lossy tùy chọn |
| Platform | Linux, macOS, Windows, FreeBSD + Docker x64/ARM (Alpine 3.23) |
| Scale | multi-core, xử lý file hàng nghìn trang, battle-tested triệu PDF |
| GitHub | 33.3k sao, 2.3k forks, 116 contributors, 52 releases, 1.5k+ dependents |
Một chi tiết kỹ thuật ít ai để ý: OCRmyPDF tự deskew, despeckle, fix rotation, adjust contrast trước khi OCR. Nghĩa là bạn không cần preprocess ảnh bằng ImageMagick/OpenCV bên ngoài — gọi thẳng CLI là xong.
So sánh với alternatives
| Tool | Điểm mạnh | Điểm yếu |
|---|---|---|
| OCRmyPDF | Lossless PDF pipeline, PDF/A, JBIG2, batch-friendly, local-first, free | Không parse layout/tables, yếu ở Greek/Hebrew, luôn cần Tesseract |
| Tesseract thuần | Engine OCR tốt, 97–98% accuracy text chuẩn | Chỉ làm image→text, tự lo convert PDF và reassembly |
| EasyOCR / PaddleOCR | Modern deep-learning, chính xác hơn trên tay viết | GPU recommended, không xử lý PDF structure |
| ABBYY FineReader | Gold standard enterprise, layout/tables tốt nhất | Paid, Windows-centric, closed source |
| Adobe Acrobat | GUI tiện cho user cuối | Crash nhiều trên doc phức tạp, paid, không scriptable tốt |
| Google Cloud Vision | Mạnh multilingual phức tạp | Paid per page, upload cloud (privacy), không local |
Với plugin, bạn có thể dùng OCRmyPDF làm PDF pipeline nhưng swap engine: OCRmyPDF-EasyOCR (PyTorch), OCRmyPDF-PaddleOCR (GPU), OCRmyPDF-AppleOCR (macOS). Lưu ý: ngay cả khi dùng EasyOCR, Tesseract vẫn bắt buộc để làm deskew + rotation detection — đây là limitation maintainer đang muốn loại bỏ.
Use cases thực tế
- Nhà nghiên cứu: OCR journal articles scan-only, hoặc redo OCR layer rác trên paper cũ (Tesseract 10 năm trước vs bây giờ cách nhau cả một trời).
- Nhà hoạt động / journalist: nhiều cơ quan nhà nước cố tình release scan-only PDF để né spirit của luật minh bạch — batch OCR là vũ khí.
- Archive.org / archivist: re-OCR từ điển 1000+ trang multilingual mà Internet Archive không tune kỹ.
- Hộ gia đình / solopreneur: upload scan hóa đơn vào folder Nextcloud,
workflow_ocrtự chạy OCRmyPDF, file ra đã searchable — không cần click. - Paperless office: paperless-ngx dùng OCRmyPDF làm engine mặc định cho document management, full-text search qua Elastic/Postgres.
- Batch shrink: one-liner kinh điển giảm size thư mục PDF mà không re-OCR:
find . -name '*.pdf' | parallel --tag -j 1 \ ocrmypdf --tesseract-timeout=0 --skip-text \ --jbig2-lossy --optimize 3 --output-type pdf \ '{}' '{}-sm.pdf'
Limitations & pricing
- Không hiểu layout phức tạp — không parse tables, multi-column, form. Nếu cần: ABBYY hoặc DocTR.
- Tesseract có điểm yếu cố hữu: lẫn
1/I,2/Ztrên font không serif, thua trên engineering diagrams, Greek và Hebrew. - Runtime deps bắt buộc: Ghostscript + Tesseract 4.1.1+ phải cài trên hệ thống (không bundled).
- Windows PATH: nếu Tesseract không có trong PATH, tool fallback Windows Registry tìm version cao nhất.
- Pricing: 100% free, MPL-2.0, cho phép integrate vào closed-source nếu publish patches. Sponsor qua Open Collective, maintainer nhận business enquiries cho feature dev & consulting.
Tiếp theo là gì?
Maintainer James Barlow đã nói rõ mục tiêu: bỏ dependency Tesseract hoàn toàn khi dùng plugin EasyOCR — nghĩa là cần giải pháp ML thay thế cho deskew + rotation detection. Community đề xuất jdeskew, và xu hướng rõ ràng là modularize OCR backend: ai muốn modern ML thì cắm EasyOCR/PaddleOCR, ai muốn offline cổ điển thì Tesseract, ai dùng Mac thì Apple Vision.
Với cơ sở người dùng 1.5k+ repo phụ thuộc và integration sâu trong paperless-ngx / Nextcloud, OCRmyPDF là default pick cho PDF OCR local-first. Nếu bạn đang tự viết script pdf2img + tesseract + pdftk, hãy thay bằng 1 dòng ocrmypdf input.pdf output.pdf.
Nguồn: github.com/ocrmypdf/OCRmyPDF, ocrmypdf.readthedocs.io, Hacker News discussion, via @tom_doerr.