Lewati ke konten utama

Mistral OCR: Panduan dengan Contoh Praktis

Pelajari cara menggunakan API OCR milik Mistral dengan Python untuk mengekstrak teks dan gambar dari dokumen serta mengintegrasikan kemampuan OCR ke dalam aplikasi.
· 12 mnt Baca

Jelajahi bersama AI

Minggu lalu, Mistral merilis Mistral OCR, sebuah API optical character recognition (OCR) yang inovatif. API mereka menetapkan standar baru bagi kemampuan AI dalam memahami dokumen dan gambar. API ini mampu memproses dan mengurai dokumen dengan gambar, matematika, tabel, dan lainnya dengan tingkat akurasi yang tinggi.

Dalam artikel ini, saya akan menjelaskan langkah demi langkah cara menggunakan Mistral OCR dengan Python. Saya akan menunjukkan cara menggunakannya untuk dokumen, gambar, serta cara menggabungkannya dengan chat untuk memadukan prompt dengan dokumen.

Apa Itu Mistral OCR?

Optical character recognition, atau OCR, adalah teknologi yang mengonversi berbagai jenis dokumen—seperti dokumen kertas yang dipindai, file PDF, atau gambar yang diambil dengan kamera digital—menjadi data yang dapat diedit dan ditelusuri.

OCR bekerja dengan mengidentifikasi karakter teks dalam gambar, menganalisis polanya, dan menerjemahkan elemen visual ini menjadi teks yang terenkode mesin. Teknologi ini telah mengubah cara kita berinteraksi dengan materi cetak, memungkinkan segala hal mulai dari digitalisasi arsip sejarah hingga otomatisasi input data dari formulir bisnis.

API OCR milik Mistral merepresentasikan kemajuan signifikan di bidang ini, menawarkan alat yang kuat bagi pengembang untuk mengekstrak teks dari gambar dan dokumen dengan akurasi luar biasa.

Contoh Mistral OCR

Sumber: Mistral

Berbeda dari solusi OCR tradisional yang hanya mengidentifikasi teks, API Mistral menggunakan model AI canggih untuk memahami konteks dan struktur dokumen, mempertahankan pemformatan saat mengekstrak konten. Artinya, API ini dapat mengenali tata letak yang kompleks, membedakan judul dan isi, serta menafsirkan tabel dan format multi-kolom dengan benar.

Yang membuat API OCR milik Mistral istimewa adalah integrasinya dengan kapabilitas pemahaman bahasa Mistral. Sistem ini tidak sekadar mengekstrak teks—tetapi juga memahaminya.

Hal ini memungkinkan alur kerja pemrosesan dokumen yang lebih canggih, di mana API tidak hanya mengenali teks, tetapi juga dapat menjawab pertanyaan tentang isi dokumen, meringkas informasi, atau mengekstrak poin data tertentu.

Selain itu, API OCR Mistral dirancang untuk bekerja lintas berbagai bahasa dan himpunan karakter, menjadikannya serbaguna untuk aplikasi global. Kombinasi pengenalan teks yang presisi dengan pemahaman bahasa yang mendalam memosisikan penawaran Mistral sebagai solusi kecerdasan dokumen generasi berikutnya, bukan sekadar alat OCR sederhana.

Harga dan Batas Mistral OCR

API Mistral OCR tidak gratis, tetapi biayanya hanya $1 per 1.000 halaman (atau $0,001 per halaman). Menurut saya, ini harga yang sangat kompetitif dan terjangkau.

File dokumen tidak boleh melebihi 50 MB dan tidak lebih dari 1.000 halaman.

Informasi lebih lanjut dapat ditemukan di halaman harga mereka.

Penyiapan API Mistral OCR

Masuk ke halaman kunci API Mistral dan klik tombol "Create new key".

Pada formulir pembuatan kunci, kita dapat memberinya nama dan tanggal kedaluwarsa.

  • Nama berguna untuk keperluan organisasi jika kita memiliki beberapa proyek, masing-masing menggunakan kunci yang berbeda. Untuk tutorial ini, kita bisa mengosongkannya.
  • Tanggal kedaluwarsa berguna untuk memastikan jika kita tidak sengaja membagikannya, orang lain tidak akan memiliki akses selamanya ke kunci kita.

Form kunci API mistral

Setelah membuat kunci, salin dan buat file bernama .env di folder yang sama tempat kita akan menulis skrip. 

Membuat kunci API untuk menggunakan mistral OCR

Tempelkan kunci ke dalam file dengan format berikut:

MISTRAL_API_KEY=<paste_api_key_here>

Jika Anda menggunakan GitHub, pastikan untuk menambahkan file ini ke .gitignore untuk menghindari mengunggah kunci API ke GitHub.

Penyiapan Lingkungan Python

Untuk menggunakan API OCR milik Mistral dengan Python, instal paket-paket berikut:

  • mistralai: Paket yang disediakan oleh Mistral untuk berinteraksi dengan API mereka.
  • python-dotenv: Paket untuk memudahkan memuat kunci API dari file .env.
  • datauri: Paket ini digunakan untuk memproses data gambar dan menyimpannya ke file.

Kita dapat memasangnya dengan perintah:

pip install mistralai python-dotenv datauri

Saya menyarankan untuk membuat environment agar instalasi Anda tidak bertabrakan dengan instalasi Python bawaan. Salah satu caranya adalah menggunakan Anaconda:

conda create -n mistral -y python=3.9
conda activate mistral
pip install mistralai python-dotenv datauri

Perintah pertama membuat environment bernama mistral yang menggunakan Python 3.9. Lalu, kita mengaktifkan environment tersebut dan memasang paket-paket yang disebutkan di atas.

Membuat Skrip Python untuk Berinteraksi dengan Mistral OCR

Mari kita lihat bagaimana cara membuat permintaan pertama ke API OCR milik Mistral.

Impor dependensi yang diperlukan

Di folder yang sama dengan file .env, buat skrip Python baru bernama ocr.py dan impor paket-paket yang diperlukan:

from mistralai import Mistral
from dotenv import load_dotenv
import datauri
import os

Perhatikan bahwa kita juga mengimpor os, yang kita gunakan untuk memuat kunci API dari environment ke dalam variabel. Kita tidak perlu memasangnya karena ini paket bawaan.

Muat kunci API dan inisialisasi klien Mistral

Selanjutnya, tambahkan baris berikut untuk memuat kunci API dan menginisialisasi klien Mistral:

load_dotenv()
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)

Membuat permintaan ke API Mistral OCR

Cara termudah menggunakan API OCR adalah dengan URL PDF yang di-host secara online. Untuk contoh ini, mari gunakan paper Mistral 7B ini yang di-host di arXiv (platform yang menampung versi pra-submisi makalah riset):

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "document_url",
    "document_url": "https://arxiv.org/pdf/2501.00663",
  },
)
print(ocr_response)

Kita kemudian dapat menjalankan skrip dengan perintah python ocr.py. Ini akan menghasilkan respons berikut:

pages=[OCRPageObject(index=0, markdown='# Mistral 7B \n\nAlbert Q. Jiang,
...

Struktur respons

Respons berisi beberapa field. Detail lengkap tersedia di dokumentasi API Mistral. Kita tertarik khususnya pada field pages, yang berisi, untuk setiap halaman, teks markdown dari halaman tersebut.

Kita dapat mencetak jumlah halaman untuk melihat apakah sesuai dengan file PDF:

print(len(ocr_response.pages))

Hasil:

9

Setiap halaman memiliki beberapa field. Yang paling penting adalah:

  • markdown: Konten markdown dari halaman.
  • images: Gambar-gambar pada halaman.

Sebagai contoh, kita dapat mencetak konten markdown untuk halaman pertama dengan:

print(ocr_response.pages[0].markdown)
# Mistral 7B 

Albert Q. Jiang, Alexandre Sablayrolles, Arthur Mensch, Chris Bamford, Devendra Singh Chaplot, Diego de las Casas, Florian Bressand, Gianna Lengyel, Guillaume Lample, Lucile Saulnier, Lélio Renard Lavaud, Marie-Anne Lachaux, Pierre Stock, Teven Le Scao, Thibaut Lavril, Thomas Wang, Timothée Lacroix, William El Sayed

![img-0.jpeg](img-0.jpeg)

#### Abstract

We introduce Mistral 7B, a 7-billion-parameter language
...

Mengonversi file PDF ke Markdown

Untuk mengonversi PDF menjadi Markdown, kita melakukan loop ke seluruh halaman dan menulis konten Markdown masing-masing ke dalam sebuah file. Berikut fungsi untuk melakukannya.

def create_markdown_file(ocr_response, output_filename = "output.md"):
  with open(output_filename, "wt") as f:
    for page in ocr_response.pages:
      f.write(page.markdown)

Berikut perbandingan berdampingan antara file PDF asli dan file Markdown yang kita hasilkan:

Mengonversi PDF ke markdown menggunakan Mistral OCR

Memproses gambar

Pada contoh sebelumnya, kita melihat bahwa file Markdown tidak memiliki gambar dari PDF. Itu karena kita tidak membuat file gambar, hanya teks Markdow-nya saja.

Jika kita melihat output markdown, kita melihat adanya referensi gambar:

...
![img-0.jpeg](img-0.jpeg)
...

Namun, gambar tersebut tidak ditampilkan. Gambar pada setiap halaman disimpan dalam atribut images.

for page in ocr_response.pages:
  print(page.images)

Keluaran:

[OCRImageObject(id='img-0.jpeg', top_left_x=425, top_left_y=600, bottom_right_x=1283, bottom_right_y=893, image_base64=None)]
[OCRImageObject(id='img-1.jpeg', top_left_x=294, top_left_y=638, bottom_right_x=1405, bottom_right_y=1064, image_base64=None)]
[OCRImageObject(id='img-2.jpeg', top_left_x=294, top_left_y=191, bottom_right_x=1405, bottom_right_y=380, image_base64=None)]
[OCRImageObject(id='img-3.jpeg', top_left_x=292, top_left_y=204, bottom_right_x=1390, bottom_right_y=552, image_base64=None)]
[OCRImageObject(id='img-4.jpeg', top_left_x=464, top_left_y=202, bottom_right_x=1232, bottom_right_y=734, image_base64=None)]
[]
[OCRImageObject(id='img-5.jpeg', top_left_x=727, top_left_y=794, bottom_right_x=975, bottom_right_y=1047, image_base64=None)]
[]
[]

Pada keluaran di atas, terlihat bahwa memang ada referensi ke img-0.jpeg. Namun, datanya tidak ada: image_base64=None.

Untuk mendapatkan data gambar, kita perlu mengubah permintaan OCR agar menyertakan data gambar dengan menambahkan parameter include_image_base64=True.

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "document_url",
    "document_url": "https://arxiv.org/pdf/2310.06825",
  },
  include_image_base64=True,
)

Jika kita mencetak gambar lagi, kita akan melihat bahwa field image_base_64 kini terisi. Sesuai namanya, data gambar disimpan dalam base 64. Kita tidak akan membahas detail cara kerja representasi gambar base-64. Sebagai gantinya, berikut fungsi yang menggunakan paket datauri yang kita pasang sebelumnya untuk menulis sebuah gambar ke file:

def save_image(image):
    parsed = datauri.parse(image.image_base64)
    with open(image.id, "wb") as file:
      file.write(parsed.data)

Sekarang kita dapat memperbarui fungsi create_markdown_file() untuk juga menulis semua gambar ke file:

def create_markdown_file(ocr_response, output_filename = "output.md"):
  with open(output_filename, "wt") as f:
    for page in ocr_response.pages:
      f.write(page.markdown)
      for image in page.images:
        save_image(image)

Jika kita menjalankan kode yang diperbarui dan merender ulang pratinjau Markdown, kita akan melihat gambarnya.

Memproses gambar dokumen

Menggunakan file lokal

Pada contoh di atas, kita menggunakan file yang sudah di-host. Untuk bekerja dengan file PDF dari komputer kita, API Mistral memungkinkan kita mengunggah file menggunakan fungsi client.files.upload(). Dengan asumsi file PDF, myfile.pdf berada di folder yang sama dengan skrip, berikut caranya:

filename = "myfile.pdf"
uploaded_pdf = client.files.upload(
  file={
    "file_name": filename,
    "content": open(filename, "rb"),
  },
  purpose="ocr"
)

Setiap file yang diunggah dengan cara ini memiliki ID unik yang terkait dengannya, yang diperlukan untuk merujuk ke file tersebut. Kita dapat mengaksesnya menggunakan atribut id dari hasilnya, seperti ini:

print(uploaded_pdf.id)

Untuk melakukan OCR pada file tersebut, kita perlu menyediakan URL-nya. Kita bisa mendapatkannya menggunakan fungsi client.files.get_signed_url() dengan memberikan ID file:

signed_url = client.files.get_signed_url(file_id=uploaded_pdf.id)

Jika digabungkan, kita dapat mengimplementasikan fungsi yang mengunggah file menggunakan API Mistral dan mengambil URL-nya:

def upload_pdf(filename):
  uploaded_pdf = client.files.upload(
    file={
      "file_name": filename,
      "content": open(filename, "rb"),
    },
    purpose="ocr"
  )
  signed_url = client.files.get_signed_url(file_id=uploaded_pdf.id)
  return signed_url.url

Berikut contoh membuat permintaan OCR dengan file lokal:

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "document_url",
    "document_url": upload_pdf("myfile.pdf"),
  },
  include_image_base64=True,
)

Untuk menggunakan file lain, ganti myfile.pdf dengan nama file yang ingin digunakan.

OCR pada gambar

API OCR juga berfungsi dengan masukan gambar. Untuk menggunakan gambar, kita memakai tipe image_url alih-alih document_url:

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "image_url",
    "image_url": <url of the image>,
  },
)

Pada contoh di atas, kita perlu mengganti <url of the image> dengan URL gambar tersebut. 

Untuk menggunakan gambar lokal, kita dapat menggunakan fungsi berikut untuk memuatnya:

def load_image(image_path):
  import base64
  mime_type, _ = mimetypes.guess_type(image_path)
  with open(image_path, "rb") as image_file:
    image_data = image_file.read()
  base64_encoded = base64.b64encode(image_data).decode('utf-8')
  base64_url = f"data:{mime_type};base64,{base64_encoded}"
  return base64_url

Fungsi ini menggunakan paket base64, yang merupakan paket bawaan, jadi kita tidak perlu memasangnya.

Mari coba melakukan OCR pada struk ini yang kita simpan dalam file bernama receipt.jpeg:

Contoh struk untuk OCR

Kita dapat membuat permintaan OCR dengan menggunakan fungsi load_image() untuk memuat gambar dari komputer kita:

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "image_url",
    "image_url": load_image("receipt.jpeg"),
  },
)

Berikut hasilnya:

Menggunakan Mistral OCR dengan gambar

Hasilnya jauh dari sempurna, tetapi tidak terlalu meleset.

Menggabungkan Mistral OCR dengan Chat

OCR menyediakan cara efisien untuk mengonversi data menjadi format teks yang siap digunakan LLM. API Mistral memungkinkan pengguna menggabungkan dokumen dan prompt dalam permintaan LLM. Di balik layar, API OCR digunakan untuk memproses dokumen agar dapat dikonsumsi oleh LLM.

Mari kita coba menggunakannya untuk meringkas artikel yang kita rujuk sepanjang tutorial ini.

Jika ini pertama kalinya Anda menggunakan API chat Mistral, Anda mungkin ingin membaca panduan Mistral yang komprehensif ini karena kita tidak akan membahas detail cara kerjanya.

Berikut contoh Python lengkap untuk meminta penjelasan artikel yang mudah dipahami:

from mistralai import Mistral
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)
messages = [
  {
    "role": "user",
    "content": [
      {
        "type": "text",
        "text": "Explain this article in detail to someone who doesn't have a technical background",
      },
      {
        "type": "document_url",
        "document_url": "https://arxiv.org/pdf/2310.06825",
      },
    ],
  }
]
chat_response = client.chat.complete(
  model="mistral-small-latest",
  messages=messages,
)
print(chat_response.choices[0].message.content)

Perhatikan bahwa file disediakan menggunakan format yang sama seperti yang kita pelajari di atas:

{
  "type": "document_url",
  "document_url": "https://arxiv.org/pdf/2310.06825",
}

Aplikasi Dunia Nyata untuk Mistral OCR

Sekarang setelah Anda mempelajari cara mengimplementasikan Mistral OCR dalam proyek Python Anda, mari jelajahi beberapa aplikasi praktis tempat Anda dapat menerapkan yang telah kita pelajari.

Analisis makalah riset

Anda dapat mengekstrak teks, persamaan, tabel, dan gambar dari makalah ilmiah untuk membangun asisten riset personal. Anda bisa membuat sistem yang meringkas temuan utama, mengekstrak detail metodologi, atau membangun basis data makalah yang dapat ditelusuri di bidang Anda.

Proyek digitalisasi dokumen

Anda dapat mengubah arsip fisik atau dokumen yang dipindai menjadi koleksi digital yang dapat ditelusuri. Ini sangat berharga untuk dokumen historis, catatan keluarga, atau arsip organisasi yang perlu dilestarikan dan mudah diakses.

Pemrosesan dokumen multibahasa

Anda dapat menggunakan kapabilitas multibahasa Mistral OCR untuk memproses dokumen dalam berbagai bahasa. Ini bisa berguna untuk bisnis internasional, layanan penerjemahan, atau proyek riset global yang perlu mengekstrak informasi dari dokumen dalam beragam aksara.

Manajemen konten edukasi

Anda dapat mengonversi buku teks, slide kuliah, dan catatan tulisan tangan ke format digital. Buat sistem yang mengekstrak konsep kunci, rumus, dan diagram untuk membangun materi belajar personal atau bank soal.

Pemrosesan dokumen keuangan

Anda dapat mengotomatiskan ekstraksi data dari faktur, struk, laporan keuangan, atau dokumen pajak. Ini dapat merampingkan proses akuntansi atau membantu pengelolaan biaya dan analisis keuangan.

Kesimpulan

API OCR milik Mistral menyediakan alat yang kuat untuk mengekstrak dan memahami teks dari dokumen dan gambar. Dalam tutorial ini, kita telah meninjau cara menyiapkan dan menggunakan kemampuan ini untuk berbagai tugas pemrosesan dokumen.

Dengan mengikuti langkah-langkah yang diuraikan dalam tutorial ini, Anda dapat mengintegrasikan OCR milik Mistral ke dalam aplikasi Anda, baik Anda sedang mendigitalisasi arsip, mengotomatiskan entri data, atau membangun sistem manajemen dokumen cerdas. Seiring teknologi terus berkembang, kita dapat mengharapkan kemampuan pemrosesan dokumen yang semakin akurat dan memahami konteks, yang semakin menjembatani kesenjangan antara dokumen fisik dan alur kerja digital.

François Aubry

Penulis

François Aubry

Insinyur full-stack & pendiri di CheapGPT. Mengajar selalu menjadi passion saya. Sejak masa awal sebagai mahasiswa, saya aktif mencari peluang untuk membimbing dan membantu mahasiswa lain. Passion ini mendorong saya menempuh studi PhD, di mana saya juga menjadi asisten pengajar untuk mendukung kegiatan akademik saya. Selama tahun-tahun itu, saya menemukan kepuasan besar dalam suasana kelas tradisional, membangun koneksi dan memfasilitasi proses belajar. Namun, dengan hadirnya platform pembelajaran daring, saya melihat potensi transformatif pendidikan digital. Bahkan, saya terlibat aktif dalam pengembangan salah satu platform tersebut di universitas kami. Saya sangat berkomitmen untuk mengintegrasikan prinsip-prinsip pengajaran tradisional dengan metodologi digital yang inovatif. Tujuan saya adalah menciptakan kursus yang tidak hanya menarik dan informatif, tetapi juga mudah diakses oleh para pembelajar di era digital ini.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026