Tutorial DeepSeek-OCR: Dari Dokumen Berantakan ke Data Terstruktur dengan Python
Siap membuka data yang terperangkap dalam dokumen pindaian, gambar, dan PDF Anda? DeepSeek-OCR bukan hanya alat OCR biasa; ini adalah model AI generatif yang memahami struktur dokumen dan menghasilkan Markdown yang bersih dan terstruktur. Tutorial ini adalah panduan langkah demi langkah Anda untuk memanfaatkan kekuatannya dengan Python, mengubah informasi visual yang berantakan menjadi data yang siap dianalisis.
Tinjauan Eksekutif
Dalam postingan Radar kami sebelumnya tentang DeepSeek-OCR, kami mengeksplorasi bagaimana model vision-language multimodal ini mendefinisikan ulang kecerdasan dokumen dengan memperlakukan OCR sebagai tugas pembuatan teks. Tutorial ini berfokus pada aplikasi praktis: menyiapkan lingkungan Anda, memuat model, dan melakukan OCR pada gambar tunggal dan PDF multi-halaman. Pada akhirnya, Anda akan memiliki skrip Python yang berfungsi untuk mengubah dokumen Anda menjadi Markdown terstruktur, siap untuk pemrosesan lebih lanjut atau integrasi ke dalam alur kerja AI.
1. Menyiapkan Lingkungan Anda
Untuk memulai, pastikan Anda memiliki lingkungan Python yang sesuai. Lingkungan virtual khusus sangat disarankan.
Prasyarat:
- Python 3.10+
- GPU NVIDIA (Disarankan): Untuk kinerja optimal, GPU berkemampuan CUDA dengan setidaknya 8GB VRAM sangat disarankan. Meskipun DeepSeek-OCR dapat berjalan di CPU, inferensi akan jauh lebih lambat.
- Git LFS: Diperlukan untuk mengunduh file model besar dari Hugging Face.
Langkah-langkah Instalasi:
Buat dan Aktifkan Lingkungan Virtual:
# Buat lingkungan virtual baru python3 -m venv .venv # Aktifkan (macOS/Linux) source .venv/bin/activate # Di Windows, gunakan: .venv\Scripts\activateInstal Pustaka Inti: Instal PyTorch, Hugging Face Transformers, dan Pillow.
# Instal PyTorch (sesuaikan untuk versi CUDA Anda jika diperlukan) pip install torch torchvision torchaudio # Instal Hugging Face Transformers, Tokenizers, dan Pillow pip install transformers tokenizers pillow # Instal pypdfium2 untuk pemrosesan PDF pip install pypdfium2 # Opsional: Instal Flash Attention untuk peningkatan kinerja GPU # Catatan: Mungkin memerlukan kompatibilitas GPU/driver tertentu pip install flash-attn --no-build-isolation
2. Memuat Model DeepSeek-OCR
Setelah lingkungan Anda siap, Anda dapat memuat model DeepSeek-OCR dan tokenizer-nya. Proses ini akan secara otomatis mengunduh bobot model (sekitar 10-15 GB) pertama kali Anda menjalankannya.
from transformers import AutoModel, AutoTokenizer
import torch
from PIL import Image
# Tentukan repositori model di Hugging Face
model_name = "deepseek-ai/DeepSeek-OCR"
# Muat tokenizer
print("Memuat tokenizer...")
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
# Muat model
print("Memuat model (ini mungkin mengunduh bobot saat pertama kali dijalankan)...")
model = AutoModel.from_pretrained(
model_name,
trust_remote_code=True,
use_safetensors=True,
_attn_implementation="flash_attention_2" if torch.cuda.is_available() else None # Gunakan Flash Attention jika GPU tersedia
)
# Pindahkan model ke GPU dan atur ke bfloat16 untuk efisiensi jika CUDA tersedia
if torch.cuda.is_available():
model = model.eval().cuda().to(torch.bfloat16)
else:
model = model.eval() # Fallback CPU
print("Model DeepSeek-OCR berhasil dimuat!")
3. OCR pada Gambar: Dokumen Pertama Anda
Sekarang, mari kita lakukan OCR pada gambar tunggal. Pastikan Anda memiliki file gambar sampel (misalnya, sample_document.png) di direktori kerja Anda.
# Path ke file gambar sampel Anda
image_path = "sample_document.png"
try:
image = Image.open(image_path).convert("RGB")
except FileNotFoundError:
print(f"Error: File gambar '{image_path}' tidak ditemukan. Pastikan file tersebut ada.")
exit()
# Prompt menginstruksikan model untuk mengubah dokumen menjadi Markdown
prompt = "<image>\n<|grounding|>Ubah dokumen menjadi markdown."
# Siapkan input untuk model
inputs = tokenizer(
[prompt],
[image],
return_tensors="pt",
padding="longest"
)
# Pindahkan input ke GPU jika tersedia
if torch.cuda.is_available():
inputs = {k: v.to(model.device) for k, v in inputs.items()}
# Hasilkan output OCR
print("Menjalankan inferensi pada gambar...")
with torch.no_grad():
output = model.generate(**inputs, max_new_tokens=2048)
# Dekode output untuk mendapatkan teks Markdown
ocr_result = tokenizer.decode(output[0], skip_special_tokens=True)
print("\n--- Hasil OCR (Markdown) ---")
print(ocr_result)
# Secara opsional, simpan output ke file Markdown
output_filename = "output_image_document.md"
with open(output_filename, "w", encoding="utf-8") as f:
f.write(ocr_result)
print(f"\nHasil OCR disimpan ke {output_filename}")
4. Menguasai PDF: Pemrosesan Dokumen Multi-Halaman
DeepSeek-OCR memproses gambar. Untuk menangani PDF multi-halaman, Anda perlu terlebih dahulu mengubah setiap halaman menjadi gambar. Pustaka pypdfium2 sangat ideal untuk ini.
import pypdfium2 as pdfium
def convert_pdf_to_images(pdf_path):
"""Mengubah file PDF menjadi daftar objek PIL Image, satu per halaman."""
pdf = pdfium.PdfDocument(pdf_path)
return [page.render().to_pil() for page in pdf]
# Path ke file PDF sampel Anda
pdf_path = "sample_document.pdf"
all_pages_markdown = ""
try:
pdf_images = convert_pdf_to_images(pdf_path)
except FileNotFoundError:
print(f"Error: File PDF '{pdf_path}' tidak ditemukan. Pastikan file tersebut ada.")
exit()
print(f"Memproses {len(pdf_images)} halaman dari PDF...")
for i, page_image in enumerate(pdf_images):
print(f" Memproses halaman {i+1}/{len(pdf_images)}...")
# Gunakan logika inferensi yang sama seperti untuk gambar tunggal
inputs = tokenizer([prompt], [page_image], return_tensors="pt", padding="longest")
if torch.cuda.is_available():
inputs = {k: v.to(model.device) for k, v in inputs.items()}
with torch.no_grad():
output = model.generate(**inputs, max_new_tokens=2048)
page_markdown = tokenizer.decode(output[0], skip_special_tokens=True)
all_pages_markdown += f"\n\n--- Halaman {i+1} ---\n\n" + page_markdown # Tambahkan pemisah antar halaman
# Simpan output Markdown gabungan untuk seluruh PDF
output_pdf_filename = "output_pdf_document.md"
with open(output_pdf_filename, "w", encoding="utf-8") as f:
f.write(all_pages_markdown)
print(f"\nPemrosesan PDF selesai. Markdown gabungan disimpan ke {output_pdf_filename}")
5. Langkah Selanjutnya: Mengintegrasikan DeepSeek-OCR ke dalam Alur Kerja Anda
DeepSeek-OCR menyediakan fondasi yang kuat untuk mengotomatiskan tugas-tugas yang berpusat pada dokumen. Berikut adalah beberapa ide untuk mengintegrasikannya ke dalam proyek Anda:
- Entri Data Otomatis: Ekstrak data terstruktur dari faktur, tanda terima, dan formulir langsung ke database atau spreadsheet.
- Pembuatan Basis Pengetahuan: Ubah manual pindaian, laporan, dan artikel menjadi Markdown yang dapat dicari untuk basis pengetahuan bertenaga LLM.
- Otomasi Proses: Gabungkan DeepSeek-OCR dengan agen AI untuk membuat alur kerja end-to-end yang membaca dokumen, mengekstrak informasi, dan memicu tindakan selanjutnya.
- Analisis Data: Digitalkan dokumen historis dengan cepat untuk analisis kuantitatif.
Daftar Periksa Aksi
- Bereksperimen dengan Dokumen Anda Sendiri: Uji DeepSeek-OCR dengan berbagai jenis dokumen yang relevan dengan kebutuhan Anda (misalnya, faktur, kontrak, makalah penelitian).
- Jelajahi Prompt Lanjutan: DeepSeek-OCR dapat merespons prompt yang lebih spesifik. Bereksperimenlah dengan instruksi seperti “Ekstrak semua nama dan alamat” atau “Ringkas temuan utama.”
- Pertimbangkan Fine-tuning: Untuk jenis dokumen yang sangat khusus, jelajahi fine-tuning model untuk akurasi yang lebih besar.
DeepSeek-OCR adalah pengubah permainan bagi siapa pun yang berurusan dengan data dokumen tidak terstruktur. Dengan mengikuti tutorial ini, Anda telah mengambil langkah pertama menuju pembukaan potensi penuhnya.
Referensi
- Makalah Utama: DeepSeek-OCR: Contexts Optical Compression. (2024). arXiv:2410.17557.
- Kode Resmi: github.com/deepseek-ai/DeepSeek-OCR
- Model Hugging Face: huggingface.co/deepseek-ai/DeepSeek-OCR
- Demo Hugging Face: huggingface.co/spaces/deepseek-ai/deepseek-ocr