Tutorial Lengkap Finetuning EasyOCR untuk Dataset Custom
EasyOCR adalah library OCR (Optical Character Recognition) open-source yang powerful dan mendukung lebih dari 80 bahasa. Namun, untuk kasus penggunaan spesifik seperti font khusus, dokumen historis, handwriting, atau format dokumen yang unik, finetuning model EasyOCR bisa meningkatkan akurasi secara signifikan.
Dalam tutorial ini, kita akan mempelajari cara melakukan finetuning EasyOCR dari awal hingga evaluasi model.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Python 3.7+ (disarankan Python 3.8 atau 3.9)
- GPU dengan CUDA support (sangat direkomendasikan, minimal 8GB VRAM)
- Minimal 16GB RAM sistem
- Dataset gambar teks dengan label ground truth (minimal 1000 samples untuk hasil baik)
- Disk space minimal 10GB untuk model dan dataset
Instalasi dan Setup Environment
1. Clone Repository EasyOCR
# Clone repository
git clone https://github.com/JaidedAI/EasyOCR.git
cd EasyOCR
Checkout ke branch stable (opsional)
git checkout v1.7.0
2. Setup Virtual Environment
# Buat virtual environment
python -m venv easyocrenv
Aktivasi
Untuk Linux/Mac:
source easyocrenv/bin/activate
Untuk Windows:
easyocrenv\Scripts\activate
3. Install Dependencies
# Install PyTorch dengan CUDA support
Sesuaikan versi CUDA dengan sistem Anda
pip install torch==2.0.1 torchvision==0.15.2 --index-url https://download.pytorch.org/whl/cu118
Install requirements EasyOCR
pip install -r requirements.txt
Install dependencies tambahan untuk training
pip install tensorboard
pip install lmdb
pip install pillow
pip install opencv-python
pip install albumentations
pip install python-Levenshtein
4. Verifikasi Instalasi
import torch
print(f"PyTorch version: {torch.version}")
print(f"CUDA available: {torch.cuda.isavailable()}")
print(f"CUDA version: {torch.version.cuda}")
print(f"GPU count: {torch.cuda.devicecount()}")
if torch.cuda.isavailable():
print(f"GPU name: {torch.cuda.getdevicename(0)}")
Persiapan Dataset
Dataset adalah komponen paling penting dalam finetuning. Kualitas dan kuantitas dataset sangat mempengaruhi hasil akhir.
1. Struktur Folder Dataset
Buat struktur folder seperti ini:
dataset/
├── raw/
│ ├── train/
│ │ ├── img001.jpg
│ │ ├── img002.jpg
│ │ └── ...
│ ├── validation/
│ │ ├── img001.jpg
│ │ └── ...
│ └── test/
│ ├── img001.jpg
│ └── ...
├── labels/
│ ├── trainlabels.txt
│ ├── vallabels.txt
│ └── testlabels.txt
└── lmdb/
├── train/
└── validation/
2. Format Label File
File label menggunakan format TSV (Tab-Separated Values):
trainlabels.txt:img001.jpg Hello World
img
002.jpg Invoice #12345
img003.jpg Total: $1,250.00
img004.jpg PT Rubythalib Data Konsulta
Setiap baris berisi:
- Nama file gambar
- Tab character (\t)
- Teks ground truth
- Gambar harus jelas dan readable
- Minimal resolusi 64x256 pixels
- Variasi font, ukuran, dan style
- Berbagai kondisi pencahayaan
- Include noise dan distorsi realistis
- Balanced character distribution
3. Script Preprocessing Dataset
Buat file preparedataset.py:
import os
import cv2
import numpy as np
from PIL import Image
from pathlib import Path
def preprocessimage(imagepath, outputpath):
"""
Preprocessing gambar untuk training OCR
"""
# Baca gambar
img = cv2.imread(str(imagepath))
if img is None:
print(f"Error reading {imagepath}")
return False
# Convert ke grayscale
gray = cv2.cvtColor(img, cv2.COLORBGR2GRAY)
# Noise reduction