Text Recognition (OCR — Optical Character Recognition) — ay teknolohiya para sa pag-extract ng naka-print o sulat-kamay na teksto mula sa mga larawan at video stream. Sa mobile development, ginagamit ang Text Recognition para sa pag-digitize ng mga dokumento, pagkilala ng mga plaka ng sasakyan, pagbabasa ng mga business card, at pagsasalin ng teksto sa real-time. Mga pangunahing mobile OCR na solusyon: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Ayon sa datos ng Google ML Kit, 2025, pinoproseso ng Text Recognition V2 ang isang frame sa loob ng 10–30 ms na may 96% accuracy para sa Latin at 91% para sa Cyrillic.
Mga pangunahing punto
Text Recognition (OCR) — proseso ng computer vision na nagko-convert ng larawan ng teksto sa mga character na nababasa ng machine. Binubuo ang OCR ng mga yugto: preprocessing ng larawan (binarization, deskew, pagwawasto ng pagkiling), segmentation (paghahati sa mga linya, salita, character), pagkilala (classification ng bawat character), at postprocessing (pagsusuri gamit ang diksyunaryo, pagwawasto ng mga error). Mga modernong OCR system (ML Kit, Vision) ay gumagamit ng end-to-end neural network na pinagsasama ang lahat ng yugto.
Mga uri ng OCR: naka-print na teksto (printed text) — pagkilala ng machine-print na teksto mula sa mga dokumento, karatula, screen — accuracy 95–99%; sulat-kamay na teksto (handwriting) — pagkilala ng sulat-kamay — accuracy 80–90% para sa Latin, 70–80% para sa Cyrillic; teksto ng eksena (scene text) — teksto sa natural na mga eksena: numero ng bahay, mga karatula sa kalsada, pangalan ng tindahan — pinakamahirap dahil sa perspective distortions at glare.
CRNN + CTC Loss — arkitektura na ginagamit sa mga modernong OCR model. Convolutional Recurrent Neural Network (CNN + LSTM) ay kumukuha ng mga feature ng larawan, at Connectionist Temporal Classification ay nagde-decode ng sequence ng mga character nang hindi nangangailangan ng paunang segmentation. Gumagana ang CRNN sa mga teksto ng anumang haba, lumalaban sa pagkiling at distortion. Ayon sa arXiv (2025), ang mga CRNN model ay nagbibigay ng 97.5% accuracy sa ICDAR 2019 benchmark.
| OCR Solution | Accuracy | Bilis | Mga Wika | Platform |
|---|---|---|---|---|
| ML Kit V2 | 96% | 10–30 ms | 45+ | Android, iOS |
| Apple Vision | 95% | 10–40 ms | 13+ | iOS, macOS |
| Tesseract 5 | 90% | 50–200 ms | 100+ | Cross-platform |
| Google Cloud Vision | 98% | 500–1000 ms | 200+ | Server (API) |
CRNN para sa mga mobile device — Gumagamit ang ML Kit ng MobileNetV2 + CRNN model na may INT8 quantization. Ang model ay sumasakop ng 2–5 MB (latent) at tumatakbo sa GPU/NPU sa pamamagitan ng TFLite Delegate. Hindi tulad ng Tesseract (klasikong pipeline), ang neural network OCR ay hindi nangangailangan ng hiwalay na character segmentation at mas lumalaban sa ingay. Disadvantage: nangangailangan ng GPU o NPU para sa real-time — sa purong CPU ang bilis ay bumababa sa 5–10 FPS.
ML Kit Text Recognition — pangunahing OCR tool para sa mga mobile app. Available sa dalawang bersyon: V2 (Latin-based — na-optimize para sa Latin, Cyrillic, numero) at V1 (Latin + CJK — Japanese, Chinese, Korean, ngunit mas mabagal). Gumagamit ang V2 ng end-to-end CRNN model, V1 — mas lumang CNN + LSTM. Inirerekomenda ng Google ang V2 para sa lahat ng kaso maliban sa pangangailangan ng CJK recognition.
Structure ng resulta ng ML Kit: Text → TextBlock → Line → Element (Word/Symbol). Bawat level ay may bounding box, confidence (0..1) at recognised text. Text — root object na may fullText (lahat ng na-recognize na teksto sa isang linya). TextBlock — lohikal na bloke ng teksto (paragraph, column). Line — linya ng teksto. Element — salita o simbolo. Gamitin ang confidence para i-filter ang hindi tumpak na pagkilala.
// 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 sa iOS sa pamamagitan ng ML Kit: API katulad ng Android, ngunit gumagamit ng UIImage/CVPixelBuffer sa halip na InputImage. Awtomatikong ginagamit ng ML Kit ang Apple Neural Engine sa A12+ sa pamamagitan ng Core ML Delegate. Para sa iOS, ang ML Kit Text Recognition V2 ay nagpapakita ng bilis na 15–30 ms sa iPhone 15 Pro. Para sa maximum performance, i-convert ang UIImage sa CVPixelBuffer bago ipadala — binabawasan nito ang conversion overhead.
Apple Vision Framework ay nagbibigay ng native OCR sa pamamagitan ng VNRecognizeTextRequest (iOS 13+). Ang Vision OCR ay gumagamit ng Apple Neural Engine (ANE) at hindi nangangailangan ng karagdagang SDK. Sumusuporta sa 13 wika (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Awtomatikong tinutukoy ng Vision ang wika ng teksto (language correction) at sumusuporta sa maraming wika sa isang frame. Bilis — 10–40 ms sa A16+.
Mga feature ng Vision OCR: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (pagdaragdag ng mga partikular na termino), suporta sa top candidates (maraming variant ng pagkilala para sa hindi malinaw na teksto). Ang fast mode ay nagbibigay ng 90% accuracy sa 10–20 ms, accurate — 95% sa 30–50 ms. Para sa production, gamitin ang accurate na may filtering sa confidence >= 0.5.
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 sa iOS: Mas mabilis ang Vision sa mas lumang device (iPhone X–13) dahil sa built-in na ANE. Mas tumpak ang ML Kit sa mga kumplikadong eksena (distortion, pagkiling, glare) dahil sa Google model na sinanay sa milyun-milyong scene text na larawan. Hindi sinusuportahan ng Vision ang confidence para sa indibidwal na character (para lamang sa mga salita), na naglilimita sa filtering. Para sa mga dokumento — Vision (mas mabilis), para sa scene text — ML Kit (mas tumpak).
Tesseract OCR — open-source text recognition engine, na binuo ng HP (1985–1998) at pinaunlad ng Google (2006+). Ang Tesseract 5 (LSTM-based) ay gumagamit ng CRNN neural network architecture, na nagbibigay ng makabuluhang pagtaas sa accuracy kumpara sa Tesseract 4 (klasiko + LSTM). Sinusuportahan ng Tesseract ang 100+ wika, kabilang ang Cyrillic, Arabic, Hebrew, at CJK. Para sa Android — tess-two (fork), para sa iOS — swift-tesseract.
Mga disadvantage ng Tesseract: bilis 50–200 ms bawat frame (CPU-only, walang GPU acceleration), nangangailangan ng preprocessing ng larawan (binarization, deskew, pagtukoy ng oryentasyon) bago ipadala sa engine, walang built-in na text detection — kailangang ipadala ang lugar ng larawan (madalas kasama ng OpenCV Text Detection o EAST). Ang Tesseract ay nagbibigay ng 90% accuracy sa malinis na dokumento at ~70% sa scene text.
Kailan pumili ng Tesseract: kung ang app ay tumatakbo sa mga device na walang Google Play (Huawei), kailangan ang suporta para sa mga bihirang wika (Sanskrit, Hebrew), o kinakailangan ang buong pag-customize ng OCR pipeline (pagsasanay sa sariling mga font). Para sa lahat ng iba pang kaso, ang ML Kit o Vision ay mas mabilis, mas tumpak, at nangangailangan ng mas kaunting code. Ang Tesseract ay makatwirang pagpipilian lamang kung may mga paghihigpit sa third-party na SDK.
// Tesseract OCR sa pamamagitan ng 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) // Binarization + deskew
tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()
Preprocessing para sa Tesseract ay sapilitan: conversion sa grayscale, binarization (Otsu o Adaptive), pagwawasto ng pagkiling (deskew), pag-alis ng ingay (median blur). Kung walang preprocessing, ang accuracy ng Tesseract ay bumababa sa 50–60%. Gamitin ang OpenCV para sa preprocessing: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Para sa mga dokumento na may pantay na background, sapat na ang binarization, para sa scene text — buong pipeline.
Kalidad ng larawan — pangunahing factor ng OCR accuracy. Ang ML Kit at Vision ay may built-in na preprocessing, ngunit para sa mga kumplikadong kaso (madilim na larawan, blur, sobrang liwanag) ang karagdagang pagproseso ay nagtataas ng accuracy ng 10–15%. Mga pangunahing teknik: pagtaas ng contrast (CLAHE), pag-alis ng blur (unsharp mask), pagwawasto ng perspective (perspective transform), pag-alis ng mga anino at glare.
CLAHE (Contrast Limited Adaptive Histogram Equalization) — adaptive histogram equalization na may limitadong contrast, na nagpapabuti sa contrast ng mga lokal na lugar. Ang CLAHE ay epektibo para sa mga larawan ng dokumento na may hindi pantay na ilaw (bahagi sa anino, bahagi sa liwanag). Ang OpenCV Core.createCLAHE na may clipLimit=2.0 at tileGridSize=(8,8) ay nagbibigay ng pinakamainam na resulta para sa OCR. Pagkatapos ng CLAHE, ang accuracy ng ML Kit sa madilim na dokumento ay tumataas mula 70% hanggang 88%.
Pagwawasto ng perspective — sapilitan para sa mga larawan ng dokumento na kinuha nang pahilig. Gamitin ang OpenCV findHomography + warpPerspective para i-align ang dokumento. Para sa awtomatikong detection ng mga gilid ng dokumento, gamitin ang Canny edge detection + findContours + approxPolyDP. Pagkatapos ng perspective correction, ang OCR accuracy ay tumataas ng 20–30% para sa mga larawan na may anggulong >30°.
// CLAHE + OpenCV preprocessing
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)
Text detection bago ang OCR — para sa scene text, gamitin ang EAST (Efficient Accurate Scene Text Detector) o CRAFT (Character Region Awareness for Text Detection) bago ipadala sa OCR. Ang EAST ay nakakatuklas ng bounding box ng teksto sa eksena sa loob ng 5–15 ms. Ang CRAFT ay mas tumpak (97%), ngunit mas mabagal (50–100 ms). Ang text detection ay nagbibigay-daan sa pagputol ng mga lugar na walang teksto at pagpapadala lamang ng mga may-katuturang bahagi sa OCR, na nagpapabilis sa pangkalahatang pagproseso.
Pag-scan ng mga dokumento — pinakamalaking paggamit ng OCR. Ang mga scanning app (CamScanner, Adobe Scan, Google Drive) ay gumagamit ng ML Kit o Vision para sa pagkilala ng teksto mula sa mga larawan ng dokumento. Karaniwang pipeline: detection ng mga gilid ng dokumento → perspective correction → CLAHE processing → OCR → pag-format (PDF, DOCX). Pinoproseso ng ML Kit Text Recognition V2 ang isang A4 na pahina sa loob ng 100–200 ms.
Real-time na pagsasalin ng teksto — kombinasyon ng OCR at machine translation. Ang Google Translate, Microsoft Translator, Yandex Translate ay gumagamit ng ML Kit o Vision para sa pagkilala ng teksto mula sa camera at inilalagay ang salin sa itaas ng orihinal na teksto (AR translation). Kinakailangan: latency < 200 ms para sa komportableng UX. Ang ML Kit V2 + NNAPI ay nagbibigay ng 30–80 ms bawat frame, nag-iiwan ng puwang para sa pagsasalin at rendering.
Awtomatikong pagpasok ng data — OCR para sa pag-extract ng data mula sa mga business card, bank card, identification document. Kinikilala ng ML Kit ang teksto, pagkatapos ay ine-parse ng post-processing ang structure: pangalan, telepono, email (business card) o numero ng card, expiry, CVV (payment card). Para sa mga business card, gumamit ng regular expression pagkatapos ng OCR. Para sa mga bank card — mga specialized na ML model (bayad, ~99% accuracy).
// OCR + AR translation (pinasimple)
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
// Translation at AR rendering sa ibabaw ng parihaba
DispatchQueue.main.async {
overlayView.showTranslation(text, at: rect)
}
}
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false
OCR para sa mga taong may kapansanan sa paningin — Assistive Technology: binabasa ng mga app ang teksto mula sa packaging, menu, karatula. Gumagamit sila ng ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Pangunahing kinakailangan — real-time na may mababang latency (< 100 ms). Ang Seeing AI (Microsoft) at Envision AI ay gumagamit ng pamamaraang ito. Para sa mga accessibility app, gamitin ang fast recognition mode at huwag mag-filter ayon sa confidence — bawat teksto ay mahalaga para sa user.
Mga Madalas Itanong
Text Recognition (OCR) — teknolohiya na nagpapahintulot sa app na "magbasa" ng teksto mula sa mga larawan at video. Kinukuha ng camera ng smartphone ang larawan, kinikilala ng neural network sa device ang mga character at nagbabalik ng machine-readable na teksto. Sa mga mobile app, ginagamit ang OCR para sa pag-scan ng dokumento, pagsasalin gamit ang camera, pagpasok ng data mula sa business card, at paglikha ng mga accessible na interface para sa mga taong may kapansanan sa paningin.
ML Kit Text Recognition — pinakamahusay na pagpipilian para sa Android: 96% accuracy, 10–30 ms bilis, 45 wika, GPU acceleration sa pamamagitan ng NNAPI, nakakahanap ng teksto sa anumang oryentasyon. Tesseract — open-source na alternatibo (90% accuracy, 100+ wika, CPU), angkop para sa mga device na walang Google Play o mga bihirang wika. Para sa 95% ng mga proyekto, piliin ang ML Kit — mas mabilis, mas tumpak, at hindi nangangailangan ng preprocessing ng larawan.
Hindi, ang ML Kit Text Recognition, Apple Vision at Tesseract ay gumagana nang buong on-device. Maaaring i-download ng ML Kit ang model sa unang pagtakbo (downloaded mode), pagkatapos nito ay gumagana offline. Ang Apple Vision ay naka-embed sa iOS, hindi nangangailangan ng internet. Ang Tesseract ay ganap na offline. Ang Cloud OCR (Google Cloud Vision, AWS Textract) ay gumagana sa pamamagitan ng internet, ngunit hindi ginagamit sa mga mobile real-time app.
Ang ML Kit Text Recognition V2 ay sumusuporta sa 45+ wika mula sa Latin at Cyrillic group: Ingles, Ruso, Aleman, Pranses, Espanyol, Italyano, Portuges, Polako, Ukranyo, Rumano, Turko at iba pa. Ang V1 (CJK) ay karagdagang sumusuporta sa Chinese, Japanese, Korean. Ang buong listahan ay nasa dokumentasyon ng TextRecognizerOptions. Para sa pagkilala ng Arabic o Hebrew, gamitin ang Tesseract (>100 wika).
Mga pangunahing pamamaraan: pag-align ng dokumento (perspective correction sa pamamagitan ng OpenCV), pagpapabuti ng contrast (CLAHE), pag-alis ng blur (unsharp mask), magandang ilaw (continuous auto-exposure), pag-stabilize ng camera (OIS/EIS). Pinoproseso ng ML Kit ang mga pangunahing distortion mismo, ngunit para sa mga dokumento na may perspective distortion (>30°) ang preprocessing ay nagtataas ng accuracy ng 20–30%. Gamitin ang fast recognition mode para sa video.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din