OCR Tesseract untuk PDF
dan PDF yang dapat dicari.
Panduan lengkap dan teruji untuk menjalankan OCR pada PDF dengan Tesseract: merasterkan halaman, membuat PDF yang dapat dicari, menggunakan OCRmyPDF dan pdfsandwich, menjalankan alur lengkap di Python, serta memperbaiki kesalahan yang paling umum.
Ringkas (satu perintah)
Untuk PDF multi-halaman sungguhan, OCRmyPDF adalah jalur tercepat.
pip install ocrmypdf # atau: apt install ocrmypdf
ocrmypdf masukan.pdf keluaran.pdfTidak punya OCRmyPDF? Rasterkan dan gunakan CLI Tesseract langsung — lihat di bawah.
Mengapa PDF harus dirasterkan
Tesseract mengenali gambar, bukan wadah PDF.
PDF adalah wadah: PDF dapat berisi teks vektor, font tersemat, atau gambar halaman hasil pindaian. Tesseract membaca gambar raster (TIFF, PNG, JPEG, WebP…), sehingga halaman harus dikonversi menjadi gambar terlebih dahulu. Pilih rasterizer sesuai alat yang Anda miliki:
| Alat | Instalasi | Catatan |
|---|---|---|
pdftoppm (poppler) | apt install poppler-utils | Cepat, dapat diskrip, pilihan klasik |
pdftocairo (poppler) | poppler-utils | Mirip pdftoppm, keluaran Cairo |
| ImageMagick | apt install imagemagick | convert -density 300 in.pdf out.tif |
| PyMuPDF | pip install pymupdf | Python murni, tanpa biner eksternal |
| pdf2image | pip install pdf2image | Pembungkus Python untuk poppler |
# PDF -> PNG per halaman pada 300 DPI
pdftoppm -png -r 300 masukan.pdf halamanDPI adalah hal terpenting: 300 DPI adalah keseimbangan standar; 600 DPI untuk huruf kecil atau pengarsipan; hindari di bawah 200 DPI.
Membuat PDF yang dapat dicari dengan CLI Tesseract
Konfigurasi keluaran pdf mengubah gambar menjadi halaman PDF yang dapat dicari.
# Gambar -> PDF yang dapat dicari
tesseract halaman-1.png keluaran pdf
# Hanya lapisan teks (tanpa gambar)
tesseract pindaian.png keluaran textonly_pdf
# Beberapa halaman dalam satu PDF: berikan daftar gambar
tesseract daftar-gambar.txt keluaran pdfUntuk PDF multi-halaman, tulis setiap jalur gambar pada baris tersendiri di daftar-gambar.txt. Referensi format lengkap: dokumentasi.
Metode B — OCRmyPDF (disarankan untuk PDF sungguhan)
OCRmyPDF menangani rasterisasi, OCR, deskew, rotasi, dan lapisan teks tak terlihat dalam satu perintah.
ocrmypdf masukan.pdf keluaran.pdf # dasar
ocrmypdf -l eng+ind masukan.pdf keluaran.pdf # bahasa
ocrmypdf --deskew --rotate-pages masukan.pdf keluaran.pdf
ocrmypdf --optimize 2 masukan.pdf keluaran.pdf # perkecil file
ocrmypdf --skip-text masukan.pdf keluaran.pdf # pertahankan halaman berteksOCRmyPDF menggunakan Tesseract dan memerlukan Ghostscript serta alat poppler. Flag berguna: --force-ocr, --redo-ocr, --pages 1-10.
Metode C — pdfsandwich
Pembungkus yang lebih ringan yang menambahkan lapisan teks dan melakukan praproses seperti deskew.
pdfsandwich pindaian.pdf # menghasilkan pindaian_ocr.pdf
pdfsandwich -lang eng+ind pindaian.pdfMetode D — Alur lengkap dengan Python
Gunakan pdf2image untuk merasterkan, pytesseract untuk membuat PDF yang dapat dicari, lalu gabungkan dengan pypdf.
import io, pytesseract
from pdf2image import convert_from_path
from pypdf import PdfWriter, PdfReader
pages = convert_from_path("masukan.pdf", dpi=300) # memerlukan poppler
writer = PdfWriter()
for page in pages:
pdf_bytes = pytesseract.image_to_pdf_or_hocr(page, extension="pdf", lang="ind")
writer.add_page(PdfReader(io.BytesIO(pdf_bytes)).pages[0])
with open("keluaran.pdf", "wb") as f:
writer.write(f)Di Windows, berikan folder poppler bin melalui poppler_path=. Detail selengkapnya di panduan pytesseract.
Metode mana yang harus saya gunakan?
| Metode | Ideal untuk | Instalasi | Multi-halaman |
|---|---|---|---|
| OCRmyPDF | PDF sungguhan, otomasi | Ghostscript + poppler | Ya, satu perintah |
| pdfsandwich | Lapisan teks cepat dengan praproses | poppler + ImageMagick | Ya |
| CLI Tesseract | Gambar atau daftar gambar | Hanya Tesseract | Dengan daftar gambar |
| Python (pdf2image) | Alur kerja dan logika khusus | poppler + pytesseract | Loop dan gabungkan |
Kesetiaan tata letak dan hamparan teks
Mengapa PDF yang dapat dicari terkadang tampak bergeser dan cara mempertahankan geometri.
- Lapisan teks tak terlihat diposisikan dari kotak kata OCR; DPI yang salah dapat menggeser hamparan.
- Gunakan keluaran
hOCRatauALTOsaat Anda memerlukan koordinat tepat untuk penyorotan atau pengarsipan. pdftoppm -r 300dengan ukuran halaman asli menjaga hamparan tetap selaras.- Untuk tata letak kompleks, pilih OCRmyPDF yang mempertahankan gambar asli dan menambahkan lapisan di atasnya.
Kualitas dan performa
- DPI: 300 standar, 600 untuk huruf kecil atau pengarsipan.
- Rentang halaman: proses hanya yang diperlukan (
--pagesdi OCRmyPDF). - Paralelisme: OCR halaman secara paralel lalu gabungkan.
- Ukuran:
--optimize/ kompresi JPEG atau turunkan DPI setelah OCR. - Praproses: deskew dan kurangi derau sebelum OCR.
Pemecahan masalah
| Gejala | Penyebab | Solusi |
|---|---|---|
Unable to get page count. Is poppler installed? | pdf2image tidak menemukan poppler | Instal poppler-utils atau setel poppler_path di Windows. |
| Tidak ada teks yang dapat dicari di PDF keluaran | OCR tidak berjalan atau bahasa salah | Verifikasi keberhasilan dan setel -l/--language ke bahasa dokumen. |
| Hamparan teks bergeser | DPI atau ukuran halaman salah | Rasterkan pada 300 DPI dengan ukuran asli. |
| File keluaran sangat besar | Gambar 600 DPI tanpa kompresi | Gunakan --optimize / JPEG atau turunkan DPI. |
| PDF berproteksi kata sandi gagal | Masukan terenkripsi | Dekripsi terlebih dahulu atau berikan flag kata sandi yang didukung. |
FAQ PDF
Bagaimana cara membuat PDF dapat dicari?
Gunakan ocrmypdf masukan.pdf keluaran.pdf, atau rasterkan halaman lalu jalankan tesseract halaman.tif keluaran pdf.
Mengapa Tesseract tidak bisa membaca PDF secara langsung?
Tesseract mengenali gambar raster, sehingga halaman PDF harus dikonversi menjadi gambar terlebih dahulu.
DPI berapa yang harus digunakan?
300 DPI untuk sebagian besar dokumen; 600 DPI untuk huruf kecil atau pengarsipan.
Bisakah saya menjalankan OCR pada PDF di Python?
Ya — gunakan pdf2image dengan poppler dan pytesseract.image_to_pdf_or_hocr, lalu gabungkan halaman dengan pypdf.
Bagaimana cara menjaga tata letak tetap presisi?
Pertahankan ukuran halaman asli dan DPI, dan pilih OCRmyPDF yang mempertahankan gambar lalu menambahkan lapisan teks di atasnya.