Lewati ke konten utama

Mistral OCR 3: Panduan Lengkap dengan Mistral AI Studio dan Python

Pelajari cara mengekstrak data tekstual dari dokumen dan gambar menggunakan model OCR terbaru dan paling andal dari Mistral, Mistral OCR 3.
· 9 mnt Baca

Jelajahi bersama AI

Model OCR terbaru dari Mistral, Mistral OCR 3, mampu mengekstrak teks dan gambar tersemat dari berbagai jenis dokumen dengan ketepatan yang luar biasa.

Pada artikel ini, saya akan mengajarkan Anda cara memaksimalkan Mistral OCR 3 menggunakan AI Studio mereka dan API-nya dengan Python. Kita akan membangun aplikasi kecil yang mengubah foto menu menjadi situs web interaktif.

Tangkapan layar yang menunjukkan Mistral OCR 3 mampu mengenali teks tulisan tangan dengan akurasi tinggi.

Jika Anda ingin mempelajari lebih lanjut tentang bekerja dengan API untuk membangun alat bertenaga AI, saya sarankan untuk melihat kursus Working with the OpenAI API. 

Apa itu Mistral OCR?

OCR adalah singkatan dari Optical Character Recognition dan bertujuan mengonversi dokumen menjadi teks. Misalnya, OCR dapat mengonversi foto catatan tulisan tangan menjadi teks atau tabel dalam PDF menjadi tabel teks sebenarnya yang dapat dicari dan diedit.

Mistral OCR 3 adalah model pemahaman dokumen terbaru dari Mistral AI, yang menghadirkan akurasi dan efisiensi mutakhir untuk dokumen dunia nyata. Model ini mengekstrak teks dan gambar tersemat dengan fidelitas tinggi serta mempertahankan struktur melalui keluaran markdown dengan rekonstruksi tabel berbasis HTML, dengan opsi JSON terstruktur.

Mistral OCR 3 mengungguli semua pesaing dalam berbagai tolok ukur:

Hasil tolok ukur Mistral OCR 3.

Dibandingkan dengan Mistral OCR 2, model ini mencapai tingkat kemenangan keseluruhan 74% pada formulir, dokumen hasil pindai, tabel kompleks, dan tulisan tangan, dengan peningkatan besar pada hasil pindai berkualitas rendah dan tata letak padat.

Mistral OCR 2 vs Mistral OCR 3

Untuk mempelajari lebih lanjut tentang OCR dan model sebelumnya dari Mistral, lihat artikel ini: Mistral OCR: Panduan dengan Contoh Praktis.

Menggunakan Mistral OCR 3 di Mistral AI Studio

Mari jelajahi cara menyiapkan penggunaan Mistral OCR 3 dengan AI Studio. 

Penyiapan akun

Mistral OCR 3 tersedia untuk digunakan di AI studio mereka. Ini adalah cara termudah untuk mencobanya karena menyediakan antarmuka yang ramah pengguna.

Saat kita mendaftar, pertama-tama kita diminta membuat organisasi:

Membuat organisasi Mistral

Awalnya, Mistral OCR 3 akan terkunci, dan kita perlu memilih paket untuk membukanya:

Tangkapan layar yang menunjukkan paket diperlukan untuk membuka kunci Mistral OCR.

Kita dapat memilih paket gratis, yang memungkinkan penggunaan Mistral OCR 3 dengan mengizinkan mereka mengumpulkan data penggunaan untuk meningkatkan layanan. Atau, kita dapat memasukkan detail kartu kredit dan dikenai biaya berdasarkan penggunaan.

Tidak ada biaya langganan, tetapi kita dikenai biaya $2 atau $1 per 1.000 halaman, tergantung apakah kita menggunakan permintaan batch atau tidak.

Rincian harga Mistral OCR 3.

Mengurai dokumen pertama kita

Setelah akun disiapkan, kita dapat bereksperimen dengan Mistral OCR 3 dengan mengakses tab "Document AI" di AI Studio.

Antarmuka OCR playground.

Untuk memulai, kita mengunggah dokumen atau gambar yang ingin kita lakukan OCR. Dalam kasus saya, saya menulis beberapa teks dan sebuah tabel di selembar kertas dan mengunggahnya. Tulisan tangan saya cukup buruk, jadi saya penasaran apakah Mistral OCR 3 bisa memahaminya.

Memilih opsi OCR.

Saat file dipilih, kita disajikan opsi tentang bagaimana file harus diproses. Pada contoh pertama ini, saya membiarkan opsi default dan cukup mengklik tombol "Run" di pojok kanan atas.

Berikut hasilnya:

Hasil melakukan OCR dengan tulisan tangan saya.

Hasilnya cukup baik, tetapi tidak sempurna:

  • Kalimat pertama memiliki dua kesalahan: "homd" alih-alih "hand" dan "tarnible" alih-alih "terrible."
  • Tabelnya secara keseluruhan baik, tetapi gagal mengidentifikasi nama kolom dengan benar. Nama tabel "OCR Benchmark Multilingual Chinese" dan kolom "Result" tergabung.
  • Saya terkesan dengan caranya menangani kesalahan yang saya coret secara manual. Namun, jika saya menggunakannya untuk mengurai catatan saya, saya lebih suka kesalahan tersebut diidentifikasi dan dibiarkan keluar.
  • Terakhir, saya menulis satu kalimat dalam bahasa Tionghoa tradisional, dan model dapat mengenali sebagian besar bagiannya. Ada karakter "好" yang diurai sebagai dua karakter terpisah, "女" dan "子," koma dikenali sebagai huruf "g", dan ada satu kesalahan juga di bagian akhir.

Mengeksplorasi opsi penguraian

Salah satu fitur menarik Mistral OCR 3 adalah kemampuan untuk menentukan struktur JSON untuk mengurai data. Ini sangat berguna untuk mengurai tabel dengan memungkinkan kita menentukan nama kolom dan tipe datanya sehingga kita memperoleh baris sebagai kamus JSON.

Mari coba mengurai kembali tabel dari contoh sebelumnya dengan menentukan skema JSON.

Contoh tabel tulisan tangan.

Untuk menyediakan skema JSON, kita perlu memilih JSON schema alih-alih mode teks sebelum menjalankan OCR.

Memilih skema JSON.

Lalu kita menyediakan skema baik dengan kode maupun menggunakan antarmuka pengguna "Visual Builder". Saya merekomendasikan opsi kedua, karena lebih sederhana saat kita sudah menggunakan model secara manual.

Saat menambahkan bidang, kita menentukan:

  • Nama
  • Deskripsi
  • Tipe data
  • Apakah bidang tersebut wajib atau tidak

Menambahkan bidang JSON.

Dalam kasus ini, saya menentukan dua bidang, satu untuk nama model dan satu lagi untuk hasil tolok ukur:

Contoh skema JSON dengan dua bidang.

Sekarang kita bisa klik "Run" dan melihat hasilnya. Sayangnya, contoh ini tidak berhasil. Pada hasilnya, satu-satunya hal yang ditampilkan adalah skema yang saya berikan, bukan data sebenarnya.

Hasil penguraian JSON.

Saya pikir mungkin saya menggunakannya dengan tidak benar, jadi untuk memastikan, saya mengambil tangkapan layar tabel contoh dari Wikipedia) dan mencoba lagi.

Contoh tabel diambil dari Wikipedia.

Saya menentukan empat kolom, membiarkan kolom terakhir sebagai opsional:

Skema JSON untuk tabel contoh Wikipedia.

Kali ini berhasil dengan baik. Tampaknya ketika penguraian gagal, hasil JSON hanyalah skema yang diberikan. Ini juga berarti bahwa Mistral OCR 3 gagal mengurai tabel tulisan tangan saya sebagai JSON meskipun ia bisa merendernya sebagai teks.

Contoh hasil penguraian JSON.

Menggunakan Mistral OCR 3 dengan Python

Di bagian ini, kita akan menjelajahi cara menggunakan Python untuk berinteraksi dengan API Mistral OCR 3. Ini memberikan fleksibilitas yang jauh lebih besar, karena kita dapat, misalnya, menggabungkan keluarannya dengan model AI lain untuk memproses data yang diekstrak.

Saat kita mengunggah file ke AI Studio, ada tombol "Code" di sebelah tombol "Run". Dengan mengklik ini, kita dapat melihat kode apa yang diperlukan untuk melakukan operasi ini menggunakan API sebagai gantinya.

Tombol code memungkinkan kita melihat kode yang dibutuhkan untuk menghasilkan OCR.

Berikut contohnya:

Melihat kode yang diperlukan untuk melakukan OCR.

Namun, kode Python yang disediakan tidak sepenuhnya akurat. Misalnya, ia mendefinisikan fungsi bernama encode_file tetapi kemudian memanggil fungsi bernama encode. Ini adalah inkonsistensi kecil, tetapi membuat kode tersebut tidak langsung bisa berjalan.

Namun jangan khawatir, kita akan menjelaskan secara detail cara menggunakan API. Untuk mempelajari lebih lanjut tentang API, kami sarankan memeriksa dokumentasi resmi.

Penyiapan API

Hal pertama yang perlu kita lakukan adalah membuat kunci API di tab "API Keys" dan menyalin kunci tersebut ke file baru bernama .env yang berada di folder yang sama dengan skrip Python.

Selanjutnya, kita memasang dependensi yang diperlukan:

pip install mistralai python-dotenv

Melakukan OCR pada gambar

Berikut skrip Python yang memuat gambar JPEG lokal, melakukan OCR, dan menyimpan hasilnya dalam file markdown:

import sys
import base64
import os
from mistralai import Mistral
from dotenv import load_dotenv

# Load the API key from the .env file
load_dotenv()

# Initialize the Mistral client
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)

# Load a file as base 64
def encode_file(file_path):
    with open(file_path, "rb") as pdf_file:
        return base64.b64encode(pdf_file.read()).decode('utf-8')

# Perform OCR on and image
def process_image_ocr(file_path):
    base64_file = encode_file(file_path)
    ocr_response = client.ocr.process(
        model="mistral-ocr-latest",
        document={
            "type": "image_url",
            "image_url": f"data:image/jpeg;base64,{base64_file}" 
        },
        include_image_base64=True
    )
    for index, page in enumerate(ocr_response.pages):
        with open(f"page{index}.md", "wt") as f:
            f.write(page.markdown)

if __name__ == "__main__":
    # Load the input file from the arguments
    file_path = sys.argv[1]
    process_image_ocr(file_path)

Melakukan OCR pada PDF

Saat input berupa PDF, satu-satunya yang berubah adalah nilai yang diberikan pada bidang document. Untuk gambar JPEG, kita menggunakan:

document={
  "type": "image_url",
   "image_url": f"data:image/jpeg;base64,{base64_file}" 
},

Untuk PDF, kita gunakan:

document={
  "type": "document_url",
  "document_url": f"data:application/pdf;base64,{base64_file}" 
},

Berikut fungsi lengkap yang dapat kita gunakan untuk memproses PDF:

def process_pdf_ocr(file_path):
    base64_file = encode_file(file_path)
    ocr_response = client.ocr.process(
        model="mistral-ocr-latest",
        document={
            "type": "document_url",
            "document_url": f"data:application/pdf;base64,{base64_file}" 
        },
        include_image_base64=True
    )
    process_pages(ocr_response)

Membuat versi generik

Memiliki dua fungsi terpisah untuk memproses file PDF dan JPEG agak merepotkan dan juga bukan praktik terbaik, karena ada banyak kode yang sama di antara keduanya.

Untuk menghindarinya, kami menulis fungsi baru yang ditingkatkan yang menggunakan paket mimetypes untuk mencoba mengidentifikasi tipe file yang diberikan dan membangun permintaan API sesuai kebutuhan. Kami juga memperbarui kode untuk menyimpan gambar yang diidentifikasi dalam dokumen.

Berikut versi finalnya:

import sys
import os
import base64
import mimetypes
import datauri
from mistralai import Mistral
from dotenv import load_dotenv
# Load the API key from the .env file
load_dotenv()
# Initialize the Mistral client
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
# List the supported image types
SUPPORTED_IMAGE_TYPES = {
    "image/jpeg",
    "image/png",
    "image/webp",
    "image/tiff",
}
PDF_MIME = "application/pdf"
# Load a file as base 64
def encode_file(file_path: str) -> str:
    with open(file_path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")
# Build the document payload depending on the type of data contained in the file
def build_document_payload(file_path: str) -> dict:
    mime_type, _ = mimetypes.guess_type(file_path)
    if not mime_type:
        raise ValueError(f"Could not determine MIME type for {file_path}")
base64_file = encode_file(file_path)
if mime_type == PDF_MIME:
        return {
            "type": "document_url",
            "document_url": f"data:{mime_type};base64,{base64_file}",
        }
if mime_type in SUPPORTED_IMAGE_TYPES:
        return {
            "type": "image_url",
            "image_url": f"data:{mime_type};base64,{base64_file}",
        }
raise ValueError(f"Unsupported file type: {mime_type}")
# Generic function to process OCR on a file
def process_ocr(file_path: str, output_filename: str = "output.md"):
    document = build_document_payload(file_path)
    ocr_response = client.ocr.process(
        model="mistral-ocr-latest",
        document=document,
        include_image_base64=True,
    )
    process_pages(ocr_response, output_filename)
# Save an image to a local file
def save_image(image):
    parsed = datauri.parse(image.image_base64)
    with open(image.id, "wb") as f:
        f.write(parsed.data)
# Process all pages from the OCR response
def process_pages(ocr_response, output_filename: str):
    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)
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python ocr.py <file>")
        sys.exit(1)
process_ocr(sys.argv[1])

Menggunakan versi ini memerlukan paket datauri untuk menyimpan gambar yang diidentifikasi oleh Mistral OCR 3, yang dapat dipasang menggunakan:

pip install datauri

Menyediakan skema JSON

Kita telah mempelajari di atas bahwa Mistral OCR 3 memungkinkan kita menyediakan skema JSON untuk mengurai data. Fitur ini juga tersedia saat menggunakannya melalui API.

Untuk melakukannya, kita perlu menyediakan skema JSON dalam parameter document_annotation_format saat membuat permintaan. Di bawah ini adalah contoh skema JSON untuk dua kolom model dan result, yang sesuai dengan tabel contoh tulisan tangan.

Contoh tabel tulisan tangan.

document_annotation_format={
    "name": "response_schema",
    "schemaDefinition": {
        "properties": {
            "model": {
                "type": "string",
	         "description": "The name of the model"
             },
             "result": {
	         "type": "number",
	         "description": "The benchmark result"
	     }
         },
         "required": [
             "model"
         ]
    }
}

Strukturnya selalu sama. Kita perlu menambahkan satu entri untuk setiap kolom di bidang properties, termasuk informasi tentang tipe data dan deskripsi untuk membantu model mengidentifikasi data.

Lalu kita mencantumkan semua bidang yang wajib di bawah bidang required.

Untuk menggunakannya bersama dengan kode, cara termudah adalah menyimpan skema dalam file JSON dan memuatnya menggunakan paket json.

Ide Proyek Mistral OCR 3

Salah satu keunggulan utama menggunakan Mistral OCR 3 dengan API adalah kemampuan untuk membangunnya lebih lanjut. Pada bagian ini, kami menyajikan beberapa ide proyek untuk Anda kembangkan di atasnya.

Aplikasi pelacak pengeluaran

Kita telah mempelajari cara melakukan OCR pada gambar. Kita dapat menggunakannya untuk membangun aplikasi yang mengambil foto struk belanja, lalu menggunakan Mistral OCR 3 untuk memproses data pada gambar dan mengekstrak kamus JSON yang mencantumkan item pada struk beserta harganya.

Pengeluaran ini kemudian dapat dikategorikan secara otomatis dan ditambahkan ke basis data, memungkinkan pengguna melacak pengeluarannya.

Pembaca audio dokumen

Kita dapat menggabungkan Mistral OCR 3 dengan AI text-to-speech untuk membuat pembaca audio dokumen. Pengguna dapat memilih PDF teks dan mengirimkannya ke Mistral OCR 3 untuk diproses. Lalu teks hasilnya dikirim ke model text-to-speech seperti OpenAI Audio API atau Eleven Labs.

Karena Mistral OCR 3 juga berfungsi dengan gambar, model ini dapat digunakan dengan foto, memungkinkan pengguna memotret dokumen dan mendengarkannya saat bepergian.

Untuk mempelajari lebih lanjut tentang text-to-speech, saya merekomendasikan salah satu dari berikut ini:

Kesimpulan

Mistral OCR 3 adalah alat yang andal dan praktis untuk mengubah dokumen dunia nyata menjadi teks dan data terstruktur yang dapat digunakan, baik Anda bereksperimen di AI Studio maupun melakukan integrasi melalui Python.

Model ini unggul pada halaman hasil pindai, formulir, dan tabel, mempertahankan tata letak dengan markdown dan gambar, serta mendukung skema JSON saat Anda memerlukan struktur. Meski begitu, seperti yang kita lihat, tulisan tangan yang berantakan dan header yang ambigu masih bisa menyulitkannya, dan penguraian skema yang gagal akan mengembalikan skema saja.

API-nya mudah digunakan setelah Anda menyelesaikan sedikit inkonsistensi, dan penangan file generik, bersama dengan penyimpanan gambar, memudahkan integrasi ke aplikasi kecil atau pipeline. Jika Anda hanya ingin mencoba, Studio adalah jalur tercepat. Untuk penggunaan produksi, pertimbangkan model biaya, lakukan batch jika memungkinkan, dan tambahkan validasi untuk kasus tepi.

Dari sana, Anda dapat melakukan iterasi; menyetel skema, menggabungkan keluaran dengan model lain, dan membangun utilitas terfokus seperti pengurai struk atau pembaca audio, membiarkan model menangani pekerjaan berat sementara Anda menangani keandalan dan UX.

Mistral OCR 3 FAQs

Berapa biaya Mistral OCR 3?

Mistral OCR 3 menggunakan model biaya per halaman, bukan per token (umum pada LLM).

  • API Standar: $2 per 1.000 halaman.
  • API Batch: $1 per 1.000 halaman (terbaik untuk tugas volume tinggi saat pemrosesan segera tidak diperlukan).
  • Paket Gratis: Tidak ada biaya langganan untuk mengakses model pada paket "Free", tetapi data penggunaan pada tingkat ini dapat digunakan oleh Mistral untuk melatih model mereka. Untuk menjaga kerahasiaan data, Anda harus memilih paket berbayar.
Format file dan bahasa apa yang didukung?

Mistral OCR 3 secara native bersifat multibahasa dan mampu menangani aksara kompleks selain bahasa Inggris.

  • Format File: Utamanya mendukung PDF dan format gambar umum seperti JPEG, PNG, TIFF, WEBP, dan AVIF. Dokumentasi juga mencatat dukungan untuk format dokumen seperti DOCX dan PPTX melalui input document_url.
  • Bahasa: Mendukung 35+ bahasa secara bawaan, termasuk bahasa berbasis Latin (Inggris, Prancis, Spanyol), Kiril, Arab, Hindi, dan Tionghoa (Tradisional dan Sederhana).
Bagaimana perbandingan Mistral OCR 3 dengan Vision LLM seperti GPT-4o?

Sementara Vision LLM umum (seperti GPT-4o) dapat "membaca" gambar, Mistral OCR 3 adalah model khusus yang dioptimalkan secara spesifik untuk penguraian dokumen.

  • Struktur vs. Konten: Mistral OCR 3 unggul dalam mempertahankan struktur tata letak, mengonversi tabel kompleks langsung menjadi HTML/Markdown dan mengekstrak gambar tersemat secara terpisah. Vision LLM sering kesulitan menjaga geometri tabel yang ketat atau mengembalikan halusinasi saat mengurai spreadsheet yang padat.
  • Efisiensi Biaya: Untuk pemrosesan dokumen murni (misalnya mengurai 10.000 faktur), Mistral OCR 3 umumnya jauh lebih murah karena Anda membayar per halaman, sedangkan Vision LLM membebankan biaya per token (token gambar input + token teks keluaran), yang bisa cepat menjadi mahal untuk teks padat.
Apakah Mistral OCR 3 dapat menangani tulisan tangan?

Ya, tetapi dengan keterbatasan. Model ini mencapai tingkat kemenangan 74% dibanding pendahulunya pada tolok ukur tulisan tangan dan dapat menangani huruf sambung dan anotasi campuran (misalnya, coretan pada formulir cetak). Namun, seperti yang dicatat dalam eksperimen Anda, model ini masih dapat kesulitan dengan tulisan tangan yang sangat berantakan atau teks yang dicoret, sesekali salah menafsirkan koreksi manual atau mengidentifikasinya sebagai teks aktif.

Apa yang terjadi jika ekstraksi JSON gagal?

Salah satu fitur unik Mistral OCR 3 adalah Structured OCR, di mana Anda dapat mendefinisikan skema JSON (seperti nama kolom dan tipe data). Jika model gagal memetakan konten dokumen ke skema ketat Anda, misalnya karena header yang ambigu atau kolom yang tergabung, model umumnya kembali mengembalikan definisi skema itu sendiri atau hasil parse teks standar alih-alih menghalusinasi data palsu. Perilaku "fail-safe" ini membantu mencegah aplikasi hilir memproses data tidak valid secara diam-diam.

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

40 Pertanyaan Wawancara DBMS Teratas di 2026

blogs

Tutorial Korelasi di R