Text Recognition (OCR — Optical Character Recognition) — ez a technológia nyomtatott vagy kézzel írt szöveg kinyerésére képekből és videófolyamból. Mobilfejlesztésben a Text Recognition-t dokumentumok digitalizálására, rendszámtáblák felismerésére, névjegykártyák olvasására és szöveg valós idejű fordítására használják. A fő mobil OCR-megoldások: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). A Google ML Kit, 2025 adatai szerint a Text Recognition V2 egy képkockát 10–30 ms alatt dolgoz fel 96%-os pontossággal latin írásnál és 91%-os pontossággal cirill írásnál.
Főbb pontok
Text Recognition (OCR) — számítógépes látás folyamata, amely a szöveg képét géppel olvasható karakterekké alakítja. Az OCR szakaszokból áll: kép előfeldolgozása (binarizálás, deskew, dőlés korrigálása), szegmentálás (sorokra, szavakra, karakterekre bontás), felismerés (minden karakter osztályozása) és utófeldolgozás (szótárral való ellenőrzés, hibák javítása). A modern OCR-rendszerek (ML Kit, Vision) end-to-end neurális hálózatokat használnak, amelyek egyesítik az összes szakaszt.
OCR típusai: nyomtatott szöveg (printed text) — gépi szöveg felismerése dokumentumokból, táblákról, képernyőkről — pontosság 95–99%; kézzel írt szöveg (handwriting) — kézírás felismerése — pontosság 80–90% latin, 70–80% cirill írásnál; kontextus szöveg (scene text) — szöveg természetes jelenetekben: házszámok, útjelző táblák, üzletnevek — a legnehezebb a perspektíva torzulások és tükröződések miatt.
CRNN + CTC Loss — a modern OCR-modellekben használt architektúra. A Convolutional Recurrent Neural Network (CNN + LSTM) kinyeri a kép jellemzőit, a Connectionist Temporal Classification pedig dekódolja a karaktersorozatot anélkül, hogy előzetes szegmentálásra lenne szükség. A CRNN bármilyen hosszúságú szöveggel működik, ellenáll a dőléseknek és torzulásoknak. Az arXiv (2025) szerint a CRNN-modellek 97.5%-os pontosságot érnek el az ICDAR 2019 benchmarkon.
| OCR Megoldás | Pontosság | Sebesség | Nyelvek | 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+ | Többplatformos |
| Google Cloud Vision | 98% | 500–1000 ms | 200+ | Szerver (API) |
CRNN mobileszközökhöz — Az ML Kit a MobileNetV2 + CRNN modellt használja INT8 kvantálással. A modell 2–5 MB-ot (latent) foglal, és GPU/NPU-n fut a TFLite Delegate-en keresztül. A Tesseract-tól (klasszikus pipeline) eltérően a neurális hálózatos OCR nem igényel külön karakterszegmentálást, és ellenállóbb a zajjal szemben. Hátrány: GPU-t vagy NPU-t igényel a valós idejű működéshez — tiszta CPU-n a sebesség 5–10 FPS-re csökken.
ML Kit Text Recognition — a fő OCR-eszköz mobilalkalmazásokhoz. Két verzióban érhető el: V2 (Latin-based — latin, cirill, számjegyekre optimalizálva) és V1 (Latin + CJK — japán, kínai, koreai, de lassabb). A V2 end-to-end CRNN modellt használ, a V1 — régebbi CNN + LSTM-et. A Google a V2-t ajánlja minden esetben, kivéve ha CJK-felismerésre van szükség.
Az ML Kit eredményének szerkezete: Text → TextBlock → Line → Element (Word/Symbol). Minden szint rendelkezik bounding box-szal, confidence-szel (0..1) és recognised text-tel. Text — gyökérobjektum fullText-tel (az összes felismert szöveg egy sorban). TextBlock — szöveg logikai blokkja (bekezdés, oszlop). Line — szövegsor. Element — szó vagy szimbólum. Használja a confidence-t a pontatlan felismerések szűrésére.
// 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 iOS-en ML Kitchen keresztül: API hasonló az Androidhoz, de UIImage/CVPixelBuffer-t használ az InputImage helyett. Az ML Kit automatikusan használja az Apple Neural Engine-t A12+ esetén a Core ML Delegate-en keresztül. Az iOS-en az ML Kit Text Recognition V2 15–30 ms sebességet mutat iPhone 15 Pro-n. A maximális teljesítmény érdekében konvertálja a UIImage-t CVPixelBuffer-ré küldés előtt — ez csökkenti a konverziós többletterhelést.
Apple Vision Framework natív OCR-t biztosít a VNRecognizeTextRequest (iOS 13+) segítségével. A Vision OCR az Apple Neural Engine-t (ANE) használja, és nem igényel további SDK-kat. 13 nyelvet támogat (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). A Vision automatikusan meghatározza a szöveg nyelvét (language correction), és több nyelvet is támogat egyetlen képkockában. Sebesség — 10–40 ms A16+-on.
A Vision OCR jellemzői: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (specifikus kifejezések hozzáadása), top candidates támogatás (több felismerési variáns homályos szöveghez). A fast mód 90% pontosságot ad 10–20 ms alatt, az accurate — 95%-ot 30–50 ms alatt. Éles környezetben használja az accurate módot confidence >= 0.5 szűréssel.
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 iOS-en: A Vision gyorsabb régebbi eszközökön (iPhone X–13) a beépített ANE-nek köszönhetően. Az ML Kit pontosabb összetett jelenetekben (torzulások, dőlések, tükröződések) a Google modelljének köszönhetően, amelyet milliónyi scene text képen tanítottak. A Vision nem támogatja a confidence-t egyedi karakterekhez (csak szavakhoz), ami korlátozza a szűrést. Dokumentumokhoz — Vision (gyorsabb), scene text-hez — ML Kit (pontosabb).
Tesseract OCR — open-source szövegfelismerő motor, amelyet a HP fejlesztett (1985–1998) és a Google folytat (2006+). A Tesseract 5 (LSTM-based) a CRNN neurális hálózati architektúrát használja, ami jelentős pontosságnövekedést ad a Tesseract 4-hez (klasszikus + LSTM) képest. A Tesseract 100+ nyelvet támogat, beleértve a cirillt, arabot, héberet és a CJK-t. Androidhoz — tess-two (fork), iOS-hez — swift-tesseract.
A Tesseract hátrányai: sebesség 50–200 ms képkockánként (CPU-only, nincs GPU-gyorsítás), a kép előfeldolgozását igényli (binarizálás, deskew, orientáció meghatározása) a motornak való átadás előtt, nincs beépített szövegdetekció — a képterületet kell átadni (gyakran az OpenCV Text Detection vagy EAST párjában). A Tesseract 90% pontosságot ad tiszta dokumentumokon és ~70%-ot scene text-en.
Mikor válassza a Tesseract-ot: ha az alkalmazás Google Play nélküli eszközökön fut (Huawei), ritka nyelvek (szanszkrit, héber) támogatása szükséges, vagy az OCR pipeline teljes testreszabása (saját betűtípusokon való tanítás) szükséges. Minden más esetben az ML Kit vagy a Vision gyorsabb, pontosabb és kevesebb kódot igényel. A Tesseract csak akkor indokolt választás, ha korlátozások vannak a harmadik féltől származó SDK-kra.
// Tesseract OCR tess-two-n keresztül
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) // Binarizálás + deskew
tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()
Előfeldolgozás a Tesseract-hoz kötelező: konvertálás grayscale-be, binarizálás (Otsu vagy Adaptive), dőlés korrigálása (deskew), zaj eltávolítása (median blur). Előfeldolgozás nélkül a Tesseract pontossága 50–60%-ra csökken. Használja az OpenCV-t az előfeldolgozáshoz: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Egyenletes hátterű dokumentumokhoz a binarizálás elegendő, scene text-hez — teljes pipeline.
Képminőség — az OCR pontosságának fő tényezője. Az ML Kit és a Vision beépített előfeldolgozással rendelkezik, de összetett esetekben (sötét fotók, elmosódás, túlvilágítás) a további feldolgozás 10–15%-kal növeli a pontosságot. Fő technikák: kontraszt növelése (CLAHE), elmosódás eltávolítása (unsharp mask), perspektíva korrekció (perspective transform), árnyékok és tükröződések eltávolítása.
CLAHE (Contrast Limited Adaptive Histogram Equalization) — kontrasztkorlátozott adaptív hisztogram-kiegyenlítés, amely javítja a helyi területek kontrasztját. A CLAHE hatékony egyenetlen megvilágítású dokumentumfotókhoz (egy rész árnyékban, egy rész fényben). Az OpenCV Core.createCLAHE clipLimit=2.0 és tileGridSize=(8,8) paraméterekkel optimális eredményt ad OCR-hez. A CLAHE után az ML Kit pontossága sötét dokumentumokon 70%-ról 88%-ra nő.
Perspektíva korrekció — kötelező a szögben fotózott dokumentumokhoz. Használja az OpenCV findHomography + warpPerspective funkciót a dokumentum igazításához. A dokumentum széleinek automatikus észleléséhez használja a Canny edge detection + findContours + approxPolyDP-t. A perspektíva korrekció után az OCR pontossága 20–30%-kal nő a >30°-os szögben készült felvételeknél.
// CLAHE + OpenCV előfeldolgozás
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)
Szövegdetekció OCR előtt — scene text-hez használja a EAST (Efficient Accurate Scene Text Detector) vagy a CRAFT (Character Region Awareness for Text Detection) eszközt az OCR-nek való átadás előtt. A EAST 5–15 ms alatt érzékeli a szöveg bounding box-át a jelenetben. A CRAFT pontosabb (97%), de lassabb (50–100 ms). A szövegdetekció lehetővé teszi a szöveg nélküli területek levágását és csak a releváns részek OCR-be küldését, ami felgyorsítja a teljes feldolgozást.
Dokumentumok szkennelése — az OCR legelterjedtebb alkalmazása. A szkennelő alkalmazások (CamScanner, Adobe Scan, Google Drive) az ML Kit vagy a Vision segítségével ismerik fel a szöveget dokumentumfotókról. Tipikus pipeline: dokumentum széleinek észlelése → perspektíva korrekció → CLAHE feldolgozás → OCR → formázás (PDF, DOCX). Az ML Kit Text Recognition V2 egy A4-es oldalt 100–200 ms alatt dolgoz fel.
Szöveg valós idejű fordítása — az OCR és a gépi fordítás kombinációja. A Google Translate, Microsoft Translator, Yandex Translate az ML Kit vagy a Vision segítségével ismeri fel a szöveget a kamerából, és a fordítást az eredeti szöveg fölé helyezi (AR fordítás). Követelmény: latency < 200 ms a kényelmes UX-hez. Az ML Kit V2 + NNAPI 30–80 ms-ot ad képkockánként, tartalékot hagyva a fordításra és renderelésre.
Automatikus adatbevitel — OCR adatok kinyerésére névjegykártyákról, bankkártyákról, személyazonosító okmányokról. Az ML Kit felismeri a szöveget, majd az utófeldolgozás elemzi a struktúrát: név, telefon, e-mail (névjegykártyák) vagy kártyaszám, lejárati idő, CVV (fizetési kártyák). Névjegykártyákhoz használjon reguláris kifejezéseket OCR után. Bankkártyákhoz — speciális ML-modellek (fizetős, ~99% pontosság).
// OCR + AR fordítás (egyszerűsített)
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
// Fordítás és AR renderelés téglalap felett
DispatchQueue.main.async {
overlayView.showTranslation(text, at: rect)
}
}
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false
OCR látássérült emberek számára — Segítő Technológia: az alkalmazások felolvassák a szöveget csomagolásokról, menükből, táblákról. ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer) használatával. Kulcskövetelmény — valós idejű működés alacsony késleltetéssel (< 100 ms). A Seeing AI (Microsoft) és az Envision AI ezt a megközelítést használja. Hozzáférhetőségi alkalmazásokhoz használja a fast recognition módot, és ne szűrjön confidence alapján — minden szöveg fontos a felhasználónak.
Gyakran Ismételt Kérdések
Text Recognition (OCR) — technológia, amely lehetővé teszi az alkalmazás számára, hogy „olvassa" a szöveget fényképekről és videókról. Az okostelefon kamerája rögzíti a képet, az eszközön lévő neurális hálózat felismeri a karaktereket, és géppel olvasható szöveget ad vissza. Mobilalkalmazásokban az OCR-t dokumentumok szkennelésére, kamerával történő fordításra, névjegykártyák adatainak bevitelére és látássérült emberek számára elérhető interfészek létrehozására használják.
ML Kit Text Recognition — a legjobb választás Androidra: 96% pontosság, 10–30 ms sebesség, 45 nyelv, GPU-gyorsítás NNAPI-n keresztül, bármilyen tájolású szöveget megtalál. A Tesseract — open-source alternatíva (90% pontosság, 100+ nyelv, CPU), alkalmas Google Play nélküli eszközökhöz vagy ritka nyelvekhez. A projektek 95%-ában válassza az ML Kit-et — gyorsabb, pontosabb, és nem igényel kép-előfeldolgozást.
Nem, az ML Kit Text Recognition, az Apple Vision és a Tesseract teljesen on-device működik. Az ML Kit letöltheti a modellt az első indításkor (downloaded mode), ezután offline működik. Az Apple Vision be van építve az iOS-be, nem igényel internetet. A Tesseract teljesen offline. A Cloud OCR (Google Cloud Vision, AWS Textract) interneten keresztül működik, de nem használják valós idejű mobilalkalmazásokban.
Az ML Kit Text Recognition V2 45+ nyelvet támogat a latin és cirill csoportból: angol, orosz, német, francia, spanyol, olasz, portugál, lengyel, ukrán, román, török és mások. A V1 (CJK) ezen felül támogatja a kínait, japánt, koreait. A teljes lista a TextRecognizerOptions dokumentációjában található. Arab vagy héber felismeréséhez használja a Tesseract-ot (>100 nyelv).
Fő módszerek: a dokumentum igazítása (perspektíva korrekció OpenCV-vel), kontraszt javítása (CLAHE), elmosódás eltávolítása (unsharp mask), jó megvilágítás (continuous auto-exposure), kamera stabilizálása (OIS/EIS). Az ML Kit maga kezeli az alapvető torzulásokat, de a perspektivikus torzulásokkal rendelkező dokumentumoknál (>30°) az előfeldolgozás 20–30%-kal növeli a pontosságot. Videóhoz használja a fast recognition módot.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is