Tesseract + OCRmyPDF + Pre-processing

Tesseract + OCRmyPDF + Pre-processing

## Pipeline OCR file pdf Arab–Indonesia di Ubuntu dengan Conda

Untuk melakukan OCR pada file pdf, kita dapat menggunakan Tesseract sebagai mesin OCR, OCRmyPDF untuk mengelola dokumen PDF, dan pre-processing untuk meningkatkan kualitas gambar sebelum pengenalan teks.

Pipeline ini dirancang untuk berjalan di Ubuntu menggunakan CPU, tanpa mewajibkan CUDA atau GPU khusus. Pemrosesan paralel dapat digunakan untuk mempercepat pekerjaan sesuai kemampuan perangkat.

Bahasa utama yang digunakan:
  • Inggris (English)
  • Arab (Arabic)
  • Indonesia (Indonesian)

Bahasa tambahan yang kadang diperlukan:

- Turki (*Turkish*)
- Parsi/Persia (*Persian*)
- Hindi (*Hindi*)

Bahasa OCR dipilih berdasarkan isi dokumen. Tidak perlu mengaktifkan semua bahasa untuk setiap dokumen karena model tambahan dapat menambah beban pemrosesan dan terkadang memengaruhi pengenalan teks.

---

## 1. Arsitektur Pipeline

Setiap komponen mempunyai fungsi yang berbeda.

| Komponen       | Fungsi                                                                          |
| -------------- | ------------------------------------------------------------------------------- |
| Tesseract OCR  | Mengenali karakter dan kata pada gambar                                         |
| OCRmyPDF       | Mengelola OCR untuk PDF multip halaman dan menghasilkan PDF dengan lapisan teks |
| Pre-processing | Memperbaiki kualitas gambar sebelum OCR jika diperlukan                         |
| Poppler        | Mengekstrak teks dari PDF dan merender halaman menjadi gambar                   |
| Python         | Mengotomatisasi proses, mengekstrak teks, memproses hasil, dan menyusun data    |
| Conda          | Mengelola lingkungan Python dan dependensi proyek                               |

Alur umum:

**PDF sumber → pemeriksaan halaman → pre-processing jika diperlukan → OCRmyPDF/Tesseract → ekstraksi teks → koreksi tata letak → parsing → JSONL atau basis data.**

Simpan PDF asli dan hasil setiap tahap secara terpisah agar pemrosesan dapat diulang tanpa kehilangan sumber.

## 2. Persiapan Lingkungan Ubuntu

### A. Instalasi komponen sistem

Gunakan APT untuk memasang Tesseract, data bahasa, Poppler, dan perangkat pendukung:

```
sudo apt update

sudo apt install -y \
  tesseract-ocr \
  tesseract-ocr-eng \
  tesseract-ocr-ara \
  tesseract-ocr-ind \
  tesseract-ocr-tur \
  tesseract-ocr-per \
  tesseract-ocr-hin \
  poppler-utils \
  ghostscript \
  qpdf \
  unpaper
```

Keterangan kode bahasa Tesseract:

| Bahasa       | Kode  |
| ------------ | ----- |
| Inggris      | `eng` |
| Arab         | `ara` |
| Indonesia    | `ind` |
| Turki        | `tur` |
| Parsi/Persia | `fas` |
| Hindi        | `hin` |

Catatan:

- Nama paket bahasa di Ubuntu biasanya mengikuti pola `tesseract-ocr-<kode>`.
- Untuk Parsi, kode bahasa Tesseract adalah `fas`, bukan `per`.
- Ketersediaan paket dapat bergantung pada versi dan repositori Ubuntu. Jika satu paket tidak ditemukan, periksa nama dan ketersediaannya melalui APT.
- Jangan memasang seluruh paket bahasa jika tidak diperlukan. Mulailah dengan `eng`, `ara`, dan `ind`; tambahkan bahasa lain ketika dokumen membutuhkannya.
- OCRmyPDF dan Tesseract memiliki kebutuhan dependensi yang dapat berubah mengikuti versi. Periksa pesan instalasi dan dokumentasi versi yang digunakan.

### B. Verifikasi komponen sistem

Periksa versi Tesseract dan bahasa yang tersedia:

```
tesseract --version
tesseract --list-langs
```

Pastikan bahasa utama berikut tercantum:

```
eng
ara
ind
```

Jika menggunakan bahasa tambahan, periksa pula `tur`, `fas`, dan `hin`.

Periksa Poppler:

```
pdftotext -v
pdftoppm -v
```

Jika perintah berhasil, utilitas Poppler dapat dipanggil dari terminal.

---

## 3. Lingkungan Python dengan Conda

Gunakan Conda untuk mengelola paket Python proyek. Contoh berikut membuat lingkungan khusus bernama `kamus-ocr`.

```
conda create -n kamus-ocr python=3.11 -y
conda activate kamus-ocr
```

Versi Python tersebut merupakan titik awal yang praktis, bukan jaminan kompatibilitas untuk semua versi OCRmyPDF. Jika versi yang dipilih mensyaratkan versi Python lain, sesuaikan lingkungan dengan persyaratan paketnya.

Pasang pustaka Python:

```
python -m pip install --upgrade pip
python -m pip install ocrmypdf pdfminer.six pillow tqdm
```

Fungsi pustaka:

| Pustaka        | Fungsi                              |
| -------------- | ----------------------------------- |
| `ocrmypdf`     | Mengelola OCR pada dokumen PDF      |
| `pdfminer.six` | Mengekstrak teks PDF melalui Python |
| `Pillow`       | Operasi dasar pengolahan gambar     |
| `tqdm`         | Menampilkan progres pemrosesan      |

OCRmyPDF menggunakan Tesseract sebagai mesin OCR, tetapi tetap memerlukan komponen sistem eksternal yang sesuai. Instalasi paket Python saja tidak menjamin seluruh pipeline siap.

### Verifikasi pustaka Python

```
python -m pip check

python -m pip show \
  ocrmypdf pdfminer.six pillow tqdm

python -c "import ocrmypdf, pdfminer, PIL, tqdm; print('Pustaka Python OK')"

ocrmypdf --version
tesseract --version
```

Jika pemeriksaan berhasil, paket utama telah terpasang. Tetap lakukan uji OCR pada satu PDF sebelum menjalankan seluruh koleksi.

**Catatan lingkungan:** Conda mengelola lingkungan Python, sedangkan APT mengelola komponen sistem seperti Tesseract dan Poppler. Keduanya dapat digunakan bersama; pastikan executable dan dependensi yang diperlukan dapat ditemukan oleh lingkungan aktif.

---

## 4. Menjalankan OCR

### A. PDF berbahasa Arab, Inggris, dan Indonesia

Untuk kamus yang mencampurkan ketiga bahasa tersebut:

```
ocrmypdf \
  --language eng+ara+ind \
  --rotate-pages \
  --deskew \
  --jobs 6 \
  --output-type pdfa \
  kamus.pdf \
  kamus_ocr.pdf
```

Ganti `kamus.pdf` dengan lokasi PDF sumber yang sebenarnya.

Penjelasan opsi:

| Opsi                     | Fungsi                                                              |
| ------------------------ | ------------------------------------------------------------------- |
| `--language eng+ara+ind` | Menggunakan data OCR untuk Inggris, Arab, dan Indonesia             |
| `--rotate-pages`         | Mendeteksi dan memperbaiki orientasi halaman yang salah             |
| `--deskew`               | Meluruskan kemiringan halaman                                       |
| `--jobs 6`               | Memungkinkan hingga enam pekerjaan paralel, sesuai kemampuan sistem |
| `--output-type pdfa`     | Menghasilkan PDF dalam format PDF/A                                 |

Sesuaikan `--jobs 6` dengan jumlah inti CPU, RAM, dan kebutuhan aplikasi lain. Mulailah dengan nilai yang konservatif lalu ukur kinerjanya.

Jika dokumen hanya berbahasa Arab dan Indonesia, gunakan:

```
--language ara+ind
```

Jika dokumen juga memuat Inggris, gunakan `eng+ara+ind`. Tambahkan bahasa lain hanya jika memang terdapat dalam sumber.

### B. Menambahkan bahasa Turki, Parsi, atau Hindi

Contoh jika dokumen memuat seluruh bahasa tersebut:

```
ocrmypdf \
  --language eng+ara+ind+tur+fas+hin \
  --rotate-pages \
  --deskew \
  --jobs 6 \
  --output-type pdfa \
  dokumen.pdf \
  dokumen_ocr.pdf
```

Jangan langsung menggunakan konfigurasi enam bahasa untuk semua dokumen. Uji dahulu karena pemilihan bahasa yang tepat dapat membantu pengenalan, sedangkan bahasa yang tidak relevan dapat menambah beban pemrosesan dan memengaruhi hasil.

Setelah proses selesai, `dokumen_ocr.pdf` memiliki lapisan teks OCR yang dapat dicari. Hasilnya tetap perlu diperiksa, terutama untuk huruf Arab, titik pembeda huruf, angka, dan urutan kolom.

---

## 5. Pre-processing untuk OCR Berakurasi Tinggi

Untuk meningkatkan akurasi OCR, gambar halaman PDF dapat diperbaiki sebelum diproses oleh Tesseract. Ada empat teknik utama yang dapat diuji:

1. **Deskew:** meluruskan teks atau halaman yang miring.
2. **Binarisasi:** memperjelas perbedaan teks dan latar belakang dengan mengubah gambar menjadi hitam-putih.
3. **Denoise:** mengurangi bintik dan gangguan gambar.
4. **Super-resolution:** meningkatkan resolusi efektif gambar yang terlalu kecil atau buram.

OCRmyPDF sudah menyediakan deskew dan sejumlah operasi pemrosesan gambar dasar. Namun, binarisasi, denoise, dan super-resolution memerlukan pengaturan atau alat tambahan apabila tidak tersedia dalam pipeline yang digunakan.

### A. Deskew — meluruskan halaman

Untuk koreksi kemiringan dasar, gunakan opsi bawaan OCRmyPDF:

```bash
ocrmypdf \
  --language eng+ara+ind \
  --rotate-pages \
  --deskew \
  --jobs 6 \
  kamus.pdf \
  kamus_ocr.pdf
```

`--rotate-pages` menangani orientasi halaman yang salah, sedangkan `--deskew` mengoreksi kemiringan kecil pada halaman. Keduanya memiliki fungsi berbeda.

Mulailah dengan cara ini sebelum mencoba pemrosesan gambar tambahan.

### B. Binarisasi — meningkatkan kontras teks

Binarisasi mengubah gambar menjadi dua warna utama: hitam untuk teks dan putih untuk latar belakang. Teknik ini dapat membantu pada hasil pindai dengan latar abu-abu atau kontras rendah.

Contoh menggunakan ImageMagick di Ubuntu:

Instal terlebih dahulu:

```bash
sudo apt install imagemagick
```

Konversi satu gambar halaman:

```bash
magick halaman.png \
  -colorspace Gray \
  -threshold 55% \
  halaman_biner.png
```

Angka `55%` merupakan nilai awal untuk pengujian, bukan nilai yang cocok bagi semua halaman. Sesuaikan berdasarkan hasil visual dan akurasi OCR.

**Peringatan untuk teks Arab:** ambang yang terlalu tinggi atau rendah dapat menghilangkan titik pembeda huruf, harakat, dan garis tipis. Periksa gambar hasil sebelum menggunakannya untuk OCR.

### C. Denoise — mengurangi gangguan gambar

Jika gambar mengandung bintik, debu hasil pemindaian, atau gangguan kompresi, ImageMagick dapat digunakan untuk mengurangi noise.

Contoh:

```bash
magick halaman.png \
  -colorspace Gray \
  -despeckle \
  halaman_denoise.png
```

`-despeckle` berusaha mengurangi bintik kecil. Efeknya perlu diperiksa karena detail kecil pada huruf Arab dapat ikut terhapus.

Untuk dokumen kamus, jangan menggabungkan denoise agresif dengan binarisasi sebelum mengevaluasi hasil masing-masing teknik.

### D. Super-resolution — meningkatkan resolusi gambar

Super-resolution berbeda dari sekadar memperbesar gambar. Pembesaran biasa menambah jumlah piksel, sedangkan super-resolution menggunakan algoritma untuk memperkirakan detail yang lebih tinggi.

Super-resolution dapat dicoba apabila teks terlalu kecil atau gambar beresolusi rendah. Namun, hasilnya bisa menghasilkan detail buatan sehingga tidak selalu meningkatkan akurasi OCR.

Salah satu pilihan adalah menggunakan perangkat super-resolution berbasis AI yang mendukung Ubuntu. Pilihan perangkat dan model perlu ditentukan berdasarkan GPU, dependensi, serta kualitas gambar sumber.

Sebagai pembanding sederhana, pembesaran biasa dapat dilakukan menggunakan ImageMagick:

```bash
magick halaman.png \
  -filter Lanczos \
  -resize 200% \
  halaman_upscaled.png
```

**Perintah ini hanya memperbesar gambar, bukan super-resolution berbasis AI.** Gunakan sebagai eksperimen pembanding, bukan sebagai bukti bahwa detail yang hilang telah dipulihkan.

### E. Menghubungkan pre-processing dengan OCRmyPDF

Perintah OCRmyPDF biasa memproses PDF secara langsung. Untuk menguji hasil binarisasi, denoise, atau super-resolution, alurnya perlu dibuat bertahap:

1. Render halaman PDF menjadi gambar.
2. Terapkan satu teknik pre-processing pada gambar.
3. Jalankan OCR pada gambar hasil pemrosesan.
4. Bandingkan hasil teks dengan OCR dasar.
5. Setelah metode terbaik diketahui, tentukan cara mengintegrasikannya ke pipeline seluruh dokumen.

Contoh merender halaman pertama pada 300 DPI menggunakan Poppler:

```bash
pdftoppm \
  -f 1 -l 1 \
  -r 300 \
  -png \
  kamus.pdf \
  halaman
```

Hasilnya berupa gambar halaman yang dapat diproses dengan ImageMagick.

Untuk menguji OCR pada satu gambar hasil pre-processing, panggil Tesseract secara langsung:

```bash
tesseract \
  halaman_biner.png \
  hasil_ocr \
  -l eng+ara+ind
```

Hasil teks akan disimpan sebagai `hasil_ocr.txt`.

Pengujian langsung ini berguna untuk membandingkan gambar asli dan gambar hasil pre-processing. Setelah metode terbaik ditemukan, pipeline dapat diintegrasikan kembali dengan OCRmyPDF atau dijalankan sebagai proses per halaman jika diperlukan.

### F. Strategi evaluasi

Gunakan 5–10 halaman yang mewakili variasi dokumen. Bandingkan sekurang-kurangnya:

- OCR tanpa pre-processing tambahan;
- OCR dengan deskew;
- OCR dengan binarisasi;
- OCR dengan denoise;
- OCR dengan pembesaran atau super-resolution.

Catat kesalahan pengenalan karakter, titik huruf Arab, harakat, angka, teks Indonesia, serta urutan kolom.

Untuk kamus Arab–Indonesia, hasil yang paling tajam secara visual belum tentu menghasilkan OCR terbaik. **Pilih metode berdasarkan ketepatan teks dan struktur entri, bukan penampilan gambar saja.**

---

## 6. Poppler: Lokasi dan Fungsi

Di Ubuntu, Poppler umumnya dipasang melalui paket `poppler-utils`. Programnya dapat dipanggil langsung dari terminal, tanpa perlu mengatur path Windows.

Periksa lokasi executable:

```
command -v pdftotext
command -v pdftoppm
```

### A. Mengekstrak teks dengan `pdftotext`

Setelah PDF memiliki lapisan teks OCR:

```
pdftotext -layout kamus_ocr.pdf kamus.txt
```

Opsi `-layout` berusaha mempertahankan tata letak teks. Namun, opsi ini tidak menjamin urutan baca dua kolom selalu benar, khususnya untuk teks Arab yang dibaca dari kanan ke kiri dan bercampur dengan bahasa lain.

`pdftotext` juga dapat digunakan untuk PDF yang sejak awal sudah memiliki teks digital. Jika sumber PDF sudah mengandung teks yang benar, ekstraksi langsung dapat lebih baik daripada OCR ulang.

### B. Merender PDF menjadi gambar dengan `pdftoppm`

Contoh merender halaman pertama pada 300 DPI:

```
pdftoppm -f 1 -l 1 -r 300 -png kamus.pdf halaman
```

Perintah tersebut menghasilkan gambar halaman yang dapat digunakan untuk pemeriksaan atau pre-processing tambahan.

Poppler bukan mesin OCR dan tidak meningkatkan akurasi dengan sendirinya. Perannya adalah membantu mengekstrak teks yang tersedia dan merender halaman PDF menjadi gambar.

---

## 7. Ekstraksi dan Pemeriksaan Tata Letak

Setelah OCR, ekstrak teks:

```
pdftotext -layout kamus_ocr.pdf kamus.txt
```

Bedakan dua jenis kesalahan:

1. **Kesalahan pengenalan karakter:** huruf Arab salah, titik hilang, angka keliru, atau kata Indonesia tidak terbaca.
2. **Kesalahan tata letak:** teks dari kolom berbeda bercampur atau definisi terpisah dari lema yang seharusnya.

Pre-processing membantu memperbaiki masukan gambar, tetapi tidak otomatis menyelesaikan semua masalah urutan baca.

Jika tata letak dua kolom tetap kacau, pertimbangkan untuk merender halaman lalu memproses setiap kolom secara terpisah. Setelah itu, susun kembali entri berdasarkan struktur kamus.

Untuk ekstraksi per halaman dan parsing lanjutan, Python dapat digunakan untuk:

- mengekstrak teks per halaman;
- menandai batas entri;
- memisahkan lema dan makna;
- mempertahankan contoh Arab dan terjemahannya;
- menyimpan nomor halaman untuk pelacakan sumber;
- menghasilkan JSONL atau format terstruktur lain.

---

## 8. Pipeline yang Direkomendasikan

1. **Simpan PDF asli** tanpa perubahan.
2. **Periksa kualitas dan tata letak** halaman.
3. **Uji pre-processing** pada sejumlah halaman representatif.
4. **Jalankan OCRmyPDF/Tesseract** menggunakan bahasa yang sesuai.
5. **Ekstrak teks** dengan `pdftotext -layout` atau pustaka Python.
6. **Periksa karakter dan urutan kolom** terhadap sumber.
7. **Parse entri kamus** menjadi lema, akar kata, makna, bentuk turunan, contoh, dan keterangan gramatikal.
8. **Simpan hasil terstruktur** ke JSONL atau basis data.
9. **Validasi sampel** untuk mengukur kualitas sebelum memproses seluruh dokumen.

## Kesimpulan

Tesseract + OCRmyPDF merupakan alternatif yang layak untuk pipeline OCR kamus di Ubuntu. Conda mengelola lingkungan Python, sementara APT menyediakan komponen sistem seperti Tesseract dan Poppler.

Gunakan `eng+ara+ind` sebagai konfigurasi awal untuk dokumen yang memuat tiga bahasa utama. Tambahkan `tur`, `fas`, atau `hin` sesuai kebutuhan dokumen. Gunakan pre-processing hanya jika pengujian menunjukkan peningkatan akurasi.

Untuk kamus dua kolom, keberhasilan bukan hanya ditentukan oleh pengenalan karakter. Urutan kolom, pemisahan lema, dan hubungan antara entri dengan contoh juga harus dipertahankan agar hasil OCR layak dijadikan data kamus terstruktur.

Saran teknis: untuk lingkungan Anda, mulai dengan tiga bahasa utama (`eng+ara+ind`), lalu uji 5–10 halaman. Jangan langsung menjalankan seluruh kamus dengan enam bahasa atau seluruh teknik pre-processing sekaligus; bandingkan hasilnya terlebih dahulu.


Share:

Tidak ada komentar: