Text Recognition di aplikasi — apa itu, OCR dan Vision

Penulis: IT Sectr Diterbitkan: 2026-07-18 Waktu membaca: 10 mnt

Text Recognition (OCR — Optical Character Recognition) — adalah teknologi untuk mengekstrak teks cetak atau tulisan tangan dari gambar dan streaming video. Dalam pengembangan seluler, Text Recognition digunakan untuk digitalisasi dokumen, pengenalan plat nomor, membaca kartu nama, dan menerjemahkan teks secara real-time. Solusi OCR seluler utama: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Menurut data Google ML Kit, 2025, Text Recognition V2 memproses frame dalam 10–30 ms dengan akurasi 96% untuk aksara Latin dan 91% untuk Kiril.

Poin utama

  • Text Recognition — ekstraksi teks dari gambar dan video (OCR)
  • ML Kit Text Recognition — 45+ bahasa, akurasi 96% (Latin), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ bahasa, iOS asli
  • Tesseract — OCR open-source, 100+ bahasa, 50–200 ms, CPU
  • Real-time — hingga 30 FPS dengan CameraX/AVFoundation di perangkat modern

Apa itu Text Recognition: prinsip OCR

Text Recognition (OCR) — proses computer vision yang mengubah gambar teks menjadi karakter yang dapat dibaca mesin. OCR terdiri dari tahapan: prapemrosesan gambar (binarisasi, deskew, koreksi kemiringan), segmentasi (pembagian menjadi baris, kata, karakter), pengenalan (klasifikasi setiap karakter), dan pascapemrosesan (pemeriksaan dengan kamus, koreksi kesalahan). Sistem OCR modern (ML Kit, Vision) menggunakan jaringan saraf end-to-end yang menggabungkan semua tahapan.

Jenis OCR: teks cetak (printed text) — pengenalan teks mesin dari dokumen, papan, layar — akurasi 95–99%; teks tulisan tangan (handwriting) — pengenalan tulisan tangan — akurasi 80–90% untuk Latin, 70–80% untuk Kiril; teks pemandangan (scene text) — teks di pemandangan alami: nomor rumah, rambu jalan, nama toko — yang paling sulit karena distorsi perspektif dan silau.

CRNN + CTC Loss — arsitektur yang digunakan dalam model OCR modern. Convolutional Recurrent Neural Network (CNN + LSTM) mengekstrak fitur gambar, dan Connectionist Temporal Classification mendekode urutan karakter tanpa memerlukan segmentasi awal. CRNN bekerja dengan teks dengan panjang berapa pun, tahan terhadap kemiringan dan distorsi. Menurut arXiv (2025), model CRNN memberikan akurasi 97.5% pada benchmark ICDAR 2019.

Solusi OCRAkurasiKecepatanBahasaPlatform
ML Kit V296%10–30 ms45+Android, iOS
Apple Vision95%10–40 ms13+iOS, macOS
Tesseract 590%50–200 ms100+Lintas platform
Google Cloud Vision98%500–1000 ms200+Server (API)

CRNN untuk perangkat seluler — ML Kit menggunakan model MobileNetV2 + CRNN dengan kuantisasi INT8. Model ini memakan 2–5 MB (latent) dan dijalankan di GPU/NPU melalui TFLite Delegate. Tidak seperti Tesseract (pipeline klasik), OCR jaringan saraf tidak memerlukan segmentasi karakter terpisah dan lebih tahan terhadap noise. Kekurangan: memerlukan GPU atau NPU untuk real-time — di CPU murni kecepatan turun menjadi 5–10 FPS.

ML Kit Text Recognition di Android dan iOS

ML Kit Text Recognition — alat OCR utama untuk aplikasi seluler. Tersedia dalam dua versi: V2 (Latin-based — dioptimalkan untuk Latin, Kiril, angka) dan V1 (Latin + CJK — Jepang, Cina, Korea, tetapi lebih lambat). V2 menggunakan model CRNN end-to-end, V1 — CNN + LSTM yang lebih lama. Google merekomendasikan V2 untuk semua kasus kecuali kebutuhan pengenalan CJK.

Struktur hasil ML Kit: Text → TextBlock → Line → Element (Word/Symbol). Setiap level memiliki bounding box, confidence (0..1) dan recognised text. Text — objek root dengan fullText (semua teks yang dikenali dalam satu baris). TextBlock — blok teks logis (paragraf, kolom). Line — baris teks. Element — kata atau simbol. Gunakan confidence untuk menyaring pengenalan yang tidak akurat.

kotlin
// ML Kit Text Recognition V2
val recognizer = TextRecognition.getClient(
    TextRecognizerOptions.DEFAULT_OPTIONS
)

recognizer.process(inputImage)
    .addOnSuccessListener { text ->
        val fullText = text.text
        text.textBlocks.forEach { block ->
            val blockText = block.text
            val blockRect = block.boundingBox
            block.lines.forEach { line ->
                line.elements.forEach { element ->
                    val word = element.text
                    val confidence = element.confidence
                }
            }
        }
    }
    .addOnFailureListener { error -> /* error */ }

Text Recognition di iOS melalui ML Kit: API mirip dengan Android, tetapi menggunakan UIImage/CVPixelBuffer alih-alih InputImage. ML Kit secara otomatis menggunakan Apple Neural Engine di A12+ melalui Core ML Delegate. Untuk iOS, ML Kit Text Recognition V2 menunjukkan kecepatan 15–30 ms di iPhone 15 Pro. Untuk kinerja maksimal, konversikan UIImage ke CVPixelBuffer sebelum dikirim — ini mengurangi overhead konversi.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework menyediakan OCR asli melalui VNRecognizeTextRequest (iOS 13+). Vision OCR menggunakan Apple Neural Engine (ANE) dan tidak memerlukan SDK tambahan. Mendukung 13 bahasa (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision secara otomatis mendeteksi bahasa teks (language correction) dan mendukung banyak bahasa dalam satu frame. Kecepatan — 10–40 ms di A16+.

Fitur Vision OCR: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (menambahkan istilah spesifik), dukungan top candidates (beberapa varian pengenalan untuk teks yang tidak jelas). Mode fast memberikan akurasi 90% pada 10–20 ms, accurate — 95% pada 30–50 ms. Untuk produksi, gunakan accurate dengan penyaringan berdasarkan confidence >= 0.5.

swift
import Vision

let request = VNRecognizeTextRequest { request, error in
    guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
    for observation in observations {
        let topCandidate = observation.topCandidates(1).first
        let text = topCandidate?.string ?? ""
        let confidence = topCandidate?.confidence ?? 0
        let boundingBox = observation.boundingBox
    }
}
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true

let handler = VNImageRequestHandler(cgImage: cgImage, orientation: .up)
try handler.perform([request])

Vision vs ML Kit di iOS: Vision lebih cepat di perangkat lama (iPhone X–13) berkat ANE bawaan. ML Kit lebih akurat di pemandangan kompleks (distorsi, kemiringan, silau) berkat model Google yang dilatih pada jutaan gambar scene text. Vision tidak mendukung confidence untuk karakter individual (hanya untuk kata), yang membatasi penyaringan. Untuk dokumen — Vision (lebih cepat), untuk scene text — ML Kit (lebih akurat).

Tesseract OCR: alternatif open-source

Tesseract OCR — mesin pengenalan teks open-source, dikembangkan oleh HP (1985–1998) dan dilanjutkan oleh Google (2006+). Tesseract 5 (LSTM-based) menggunakan arsitektur jaringan saraf CRNN, yang memberikan peningkatan akurasi signifikan dibandingkan Tesseract 4 (klasik + LSTM). Tesseract mendukung 100+ bahasa, termasuk Kiril, Arab, Ibrani, dan CJK. Untuk Android — tess-two (fork), untuk iOS — swift-tesseract.

Kekurangan Tesseract: kecepatan 50–200 ms per frame (CPU-only, tanpa akselerasi GPU), memerlukan prapemrosesan gambar (binarisasi, deskew, penentuan orientasi) sebelum dikirim ke mesin, tidak ada deteksi teks bawaan — perlu mengirim area gambar (sering dipasangkan dengan OpenCV Text Detection atau EAST). Tesseract memberikan akurasi 90% pada dokumen bersih dan ~70% pada scene text.

Kapan memilih Tesseract: jika aplikasi berjalan di perangkat tanpa Google Play (Huawei), perlu dukungan bahasa langka (Sanskerta, Ibrani), atau diperlukan kustomisasi penuh pipeline OCR (pelatihan pada font sendiri). Untuk semua kasus lainnya, ML Kit atau Vision lebih cepat, lebih akurat, dan membutuhkan lebih sedikit kode. Tesseract adalah pilihan yang dibenarkan hanya jika ada batasan pada SDK pihak ketiga.

kotlin
// Tesseract OCR melalui tess-two
val tess = TessBaseAPI()
tess.init(dataPath, "rus+eng")
tess.pageSegMode = TessBaseAPI.PageSegMode.PSM_AUTO

val bitmap = BitmapFactory.decodeResource(resources, R.drawable.text)
val gray = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
OpenCV.process(bitmap, gray) // Binarisasi + deskew

tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()

Prapemrosesan untuk Tesseract wajib dilakukan: konversi ke grayscale, binarisasi (Otsu atau Adaptive), koreksi kemiringan (deskew), penghapusan noise (median blur). Tanpa prapemrosesan, akurasi Tesseract turun menjadi 50–60%. Gunakan OpenCV untuk prapemrosesan: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Untuk dokumen dengan latar belakang rata, binarisasi sudah cukup, untuk scene text — pipeline lengkap.

Prapemrosesan gambar untuk OCR

Kualitas gambar — faktor utama akurasi OCR. ML Kit dan Vision memiliki prapemrosesan bawaan, tetapi untuk kasus kompleks (foto gelap, buram, silau berlebih) pemrosesan tambahan meningkatkan akurasi sebesar 10–15%. Teknik utama: peningkatan kontras (CLAHE), penghapusan keburaman (unsharp mask), koreksi perspektif (perspective transform), penghapusan bayangan dan silau.

CLAHE (Contrast Limited Adaptive Histogram Equalization) — pemerataan histogram adaptif terbatas kontras, yang meningkatkan kontras area lokal. CLAHE efektif untuk foto dokumen dengan pencahayaan tidak merata (sebagian di bayangan, sebagian di cahaya). OpenCV Core.createCLAHE dengan clipLimit=2.0 dan tileGridSize=(8,8) memberikan hasil optimal untuk OCR. Setelah CLAHE, akurasi ML Kit pada dokumen gelap meningkat dari 70% menjadi 88%.

Koreksi perspektif — wajib untuk foto dokumen yang diambil miring. Gunakan OpenCV findHomography + warpPerspective untuk meratakan dokumen. Untuk deteksi tepi dokumen otomatis, gunakan Canny edge detection + findContours + approxPolyDP. Setelah koreksi perspektif, akurasi OCR meningkat 20–30% untuk foto dengan sudut >30°.

kotlin
// CLAHE + prapemrosesan OpenCV
val mat = Mat()
Utils.bitmapToMat(bitmap, mat)
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY)

val clahe = Imgproc.createCLAHE(2.0, Size(8.0, 8.0))
clahe.apply(mat, mat)

Imgproc.GaussianBlur(mat, mat, Size(3.0, 3.0), 0.0)
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_BINARY or Imgproc.THRESH_OTSU)

val processedBitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(mat, processedBitmap)

Deteksi teks sebelum OCR — untuk scene text, gunakan EAST (Efficient Accurate Scene Text Detector) atau CRAFT (Character Region Awareness for Text Detection) sebelum dikirim ke OCR. EAST mendeteksi bounding box teks di pemandangan dalam 5–15 ms. CRAFT lebih akurat (97%), tetapi lebih lambat (50–100 ms). Deteksi teks memungkinkan pemotongan area tanpa teks dan hanya mengirim bagian yang relevan ke OCR, yang mempercepat pemrosesan keseluruhan.

Penerapan OCR di aplikasi seluler

Pemindaian dokumen — penerapan OCR yang paling masif. Aplikasi pemindai (CamScanner, Adobe Scan, Google Drive) menggunakan ML Kit atau Vision untuk pengenalan teks dari foto dokumen. Pipeline tipikal: deteksi tepi dokumen → koreksi perspektif → pemrosesan CLAHE → OCR → pemformatan (PDF, DOCX). ML Kit Text Recognition V2 memproses halaman A4 dalam 100–200 ms.

Terjemahan teks real-time — kombinasi OCR dan terjemahan mesin. Google Translate, Microsoft Translator, Yandex Translate menggunakan ML Kit atau Vision untuk pengenalan teks dari kamera dan menempatkan terjemahan di atas teks asli (terjemahan AR). Persyaratan: latensi < 200 ms untuk UX yang nyaman. ML Kit V2 + NNAPI memberikan 30–80 ms per frame, menyisakan ruang untuk terjemahan dan rendering.

Entri data otomatis — OCR untuk mengekstrak data dari kartu nama, kartu bank, dokumen identitas. ML Kit mengenali teks, kemudian pascapemrosesan mengurai struktur: nama, telepon, email (kartu nama) atau nomor kartu, masa berlaku, CVV (kartu pembayaran). Untuk kartu nama, gunakan ekspresi reguler setelah OCR. Untuk kartu bank — model ML khusus (berbayar, ~99% akurasi).

swift
// OCR + terjemahan AR (disederhanakan)
let request = VNRecognizeTextRequest { req, _ in
    guard let results = req.results as? [VNRecognizedTextObservation] else { return }
    for observation in results {
        let text = observation.topCandidates(1).first?.string ?? ""
        let rect = observation.boundingBox
        // Terjemahan dan rendering AR di atas persegi panjang
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

OCR untuk penyandang keterbatasan penglihatan — Teknologi Bantu: aplikasi membacakan teks dari kemasan, menu, papan. Menggunakan ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Persyaratan utama — real-time dengan latensi rendah (< 100 ms). Seeing AI (Microsoft) dan Envision AI menggunakan pendekatan ini. Untuk aplikasi aksesibilitas, gunakan mode fast recognition dan jangan menyaring berdasarkan confidence — setiap teks penting bagi pengguna.

Pertanyaan yang Sering Diajukan

Apa itu Text Recognition (OCR) di aplikasi seluler?

Text Recognition (OCR) — teknologi yang memungkinkan aplikasi "membaca" teks dari foto dan video. Kamera ponsel menangkap gambar, jaringan saraf di perangkat mengenali karakter dan mengembalikan teks yang dapat dibaca mesin. Di aplikasi seluler, OCR digunakan untuk memindai dokumen, menerjemahkan dengan kamera, memasukkan data dari kartu nama, dan menciptakan antarmuka yang dapat diakses bagi penyandang keterbatasan penglihatan.

OCR mana yang lebih baik untuk Android: ML Kit atau Tesseract?

ML Kit Text Recognition — pilihan terbaik untuk Android: akurasi 96%, kecepatan 10–30 ms, 45 bahasa, akselerasi GPU melalui NNAPI, menemukan teks dalam orientasi apa pun. Tesseract — alternatif open-source (akurasi 90%, 100+ bahasa, CPU), cocok untuk perangkat tanpa Google Play atau bahasa langka. Untuk 95% proyek, pilih ML Kit — lebih cepat, lebih akurat, dan tidak memerlukan prapemrosesan gambar.

Apakah diperlukan internet untuk OCR di perangkat seluler?

Tidak, ML Kit Text Recognition, Apple Vision dan Tesseract bekerja sepenuhnya on-device. ML Kit dapat mengunduh model saat pertama kali dijalankan (downloaded mode), setelah itu bekerja offline. Apple Vision tertanam di iOS, tidak memerlukan internet. Tesseract sepenuhnya offline. Cloud OCR (Google Cloud Vision, AWS Textract) bekerja melalui internet, tetapi tidak digunakan di aplikasi seluler real-time.

Bahasa apa yang didukung oleh ML Kit Text Recognition?

ML Kit Text Recognition V2 mendukung 45+ bahasa dari kelompok Latin dan Kiril: Inggris, Rusia, Jerman, Prancis, Spanyol, Italia, Portugis, Polandia, Ukraina, Rumania, Turki dan lainnya. V1 (CJK) juga mendukung Cina, Jepang, Korea. Daftar lengkap ada di dokumentasi TextRecognizerOptions. Untuk pengenalan Arab atau Ibrani, gunakan Tesseract (>100 bahasa).

Bagaimana meningkatkan akurasi OCR pada foto dokumen?

Metode utama: meratakan dokumen (koreksi perspektif melalui OpenCV), meningkatkan kontras (CLAHE), menghilangkan keburaman (unsharp mask), pencahayaan yang baik (continuous auto-exposure), stabilisasi kamera (OIS/EIS). ML Kit memproses distorsi dasar sendiri, tetapi untuk dokumen dengan distorsi perspektif (>30°) prapemrosesan meningkatkan akurasi sebesar 20–30%. Gunakan mode fast recognition untuk video.

Ringkasan

  • Text Recognition — OCR di perangkat seluler: cetak, tulisan tangan, scene text
  • ML Kit V2 — akurasi 96%, 45+ bahasa, 10–30 ms, akselerasi GPU/NPU
  • Apple Vision — OCR asli iOS (iOS 13+), 13 bahasa, melalui ANE
  • Tesseract 5 — open-source, 100+ bahasa, 50–200 ms (CPU), fallback untuk Huawei
  • Prapemrosesan — CLAHE, deskew, koreksi perspektif meningkatkan akurasi 10–30%
  • Real-time — hingga 30 FPS melalui CameraX/AVFoundation dengan ML Kit atau Vision
  • On-device — semua komputasi lokal, privasi data terjamin

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga