Text Recognition (OCR — Optical Character Recognition) — είναι η τεχνολογία εξαγωγής εκτυπωμένου ή χειρόγραφου κειμένου από εικόνες και ροή βίντεο. Στην κινητή ανάπτυξη, το Text Recognition χρησιμοποιείται για ψηφιοποίηση εγγράφων, αναγνώριση πινακίδων κυκλοφορίας, ανάγνωση επαγγελματικών καρτών και μετάφραση κειμένου σε πραγματικό χρόνο. Οι κύριες κινητές λύσεις OCR: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Σύμφωνα με τα δεδομένα του Google ML Kit, 2025, το Text Recognition V2 επεξεργάζεται ένα καρέ σε 10–30 ms με ακρίβεια 96% σε λατινικούς χαρακτήρες και 91% σε κυριλλικούς.
Κύρια σημεία
Text Recognition (OCR) — διαδικασία υπολογιστικής όρασης που μετατρέπει την εικόνα κειμένου σε χαρακτήρες αναγνώσιμους από μηχανή. Το OCR αποτελείται από στάδια: προεπεξεργασία εικόνας (δυαδοποίηση, deskew, διόρθωση κλίσης), κατάτμηση (διαίρεση σε γραμμές, λέξεις, χαρακτήρες), αναγνώριση (ταξινόμηση κάθε χαρακτήρα) και μετα-επεξεργασία (έλεγχος με λεξικό, διόρθωση σφαλμάτων). Τα σύγχρονα συστήματα OCR (ML Kit, Vision) χρησιμοποιούν end-to-end νευρωνικά δίκτυα που συνδυάζουν όλα τα στάδια.
Τύποι OCR: εκτυπωμένο κείμενο (printed text) — αναγνώριση μηχανικού κειμένου από έγγραφα, πινακίδες, οθόνες — ακρίβεια 95–99%; χειρόγραφο κείμενο (handwriting) — αναγνώριση χειρόγραφης εισόδου — ακρίβεια 80–90% σε λατινικούς, 70–80% σε κυριλλικούς χαρακτήρες; κείμενο σκηνής (scene text) — κείμενο σε φυσικές σκηνές: αριθμοί σπιτιών, οδικές πινακίδες, ονόματα καταστημάτων — το πιο δύσκολο λόγω παραμορφώσεων προοπτικής και αντανακλάσεων.
CRNN + CTC Loss — αρχιτεκτονική που χρησιμοποιείται σε σύγχρονα μοντέλα OCR. Το Convolutional Recurrent Neural Network (CNN + LSTM) εξάγει χαρακτηριστικά εικόνας και το Connectionist Temporal Classification αποκωδικοποιεί την ακολουθία χαρακτήρων χωρίς ανάγκη προκαταρκτικής κατάτμησης. Το CRNN λειτουργεί με κείμενα οποιουδήποτε μήκους, είναι ανθεκτικό σε κλίσεις και παραμορφώσεις. Σύμφωνα με το arXiv (2025), τα μοντέλα CRNN δίνουν 97.5% ακρίβεια στο benchmark ICDAR 2019.
| Λύση OCR | Ακρίβεια | Ταχύτητα | Γλώσσες | Πλατφόρμα |
|---|---|---|---|---|
| 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+ | Διακομιστής (API) |
CRNN για κινητές συσκευές — Το ML Kit χρησιμοποιεί το μοντέλο MobileNetV2 + CRNN με κβάντιση INT8. Το μοντέλο καταλαμβάνει 2–5 MB (latent) και εκτελείται σε GPU/NPU μέσω TFLite Delegate. Σε αντίθεση με το Tesseract (κλασικό pipeline), το OCR νευρωνικού δικτύου δεν απαιτεί ξεχωριστή κατάτμηση χαρακτήρων και είναι πιο ανθεκτικό στο θόρυβο. Μειονέκτημα: απαιτεί GPU ή NPU για real-time — σε καθαρό CPU η ταχύτητα πέφτει στα 5–10 FPS.
ML Kit Text Recognition — το κύριο εργαλείο OCR για κινητές εφαρμογές. Διαθέσιμο σε δύο εκδόσεις: V2 (Latin-based — βελτιστοποιημένη για λατινικούς, κυριλλικούς χαρακτήρες, αριθμούς) και V1 (Latin + CJK — Ιαπωνικά, Κινεζικά, Κορεατικά, αλλά πιο αργή). Η V2 χρησιμοποιεί end-to-end μοντέλο CRNN, η V1 — παλαιότερο CNN + LSTM. Η Google συνιστά τη V2 για όλες τις περιπτώσεις, εκτός από την ανάγκη αναγνώρισης CJK.
Δομή αποτελέσματος ML Kit: Text → TextBlock → Line → Element (Word/Symbol). Κάθε επίπεδο έχει bounding box, confidence (0..1) και recognised text. Text — ριζικό αντικείμενο με fullText (όλο το αναγνωρισμένο κείμενο σε μία γραμμή). TextBlock — λογικό μπλοκ κειμένου (παράγραφος, στήλη). Line — γραμμή κειμένου. Element — λέξη ή σύμβολο. Χρησιμοποιήστε το confidence για φιλτράρισμα ανακριβών αναγνωρίσεων.
// 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 μέσω ML Kit: API παρόμοιο με το Android, αλλά χρησιμοποιεί UIImage/CVPixelBuffer αντί για InputImage. Το ML Kit χρησιμοποιεί αυτόματα το Apple Neural Engine σε A12+ μέσω Core ML Delegate. Για iOS, το ML Kit Text Recognition V2 δείχνει ταχύτητα 15–30 ms σε iPhone 15 Pro. Για μέγιστη απόδοση, μετατρέψτε το UIImage σε CVPixelBuffer πριν από την αποστολή — αυτό μειώνει την επιβάρυνση μετατροπής.
Apple Vision Framework παρέχει εγγενές OCR μέσω VNRecognizeTextRequest (iOS 13+). Το Vision OCR χρησιμοποιεί το Apple Neural Engine (ANE) και δεν απαιτεί επιπλέον SDK. Υποστηρίζει 13 γλώσσες (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Το Vision εντοπίζει αυτόματα τη γλώσσα κειμένου (language correction) και υποστηρίζει πολλές γλώσσες σε ένα καρέ. Ταχύτητα — 10–40 ms σε A16+.
Χαρακτηριστικά Vision OCR: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (προσθήκη συγκεκριμένων όρων), υποστήριξη top candidates (πολλαπλές παραλλαγές αναγνώρισης για ασαφές κείμενο). Η γρήγορη λειτουργία δίνει 90% ακρίβεια στα 10–20 ms, η accurate — 95% στα 30–50 ms. Για παραγωγή, χρησιμοποιήστε accurate με φιλτράρισμα κατά 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 σε iOS: Το Vision είναι ταχύτερο σε παλαιότερες συσκευές (iPhone X–13) χάρη στο ενσωματωμένο ANE. Το ML Kit είναι ακριβέστερο σε πολύπλοκες σκηνές (παραμορφώσεις, κλίσεις, αντανακλάσεις) χάρη στο μοντέλο Google που εκπαιδεύτηκε σε εκατομμύρια εικόνες scene text. Το Vision δεν υποστηρίζει confidence για μεμονωμένους χαρακτήρες (μόνο για λέξεις), γεγονός που περιορίζει το φιλτράρισμα. Για έγγραφα — Vision (ταχύτερο), για scene text — ML Kit (ακριβέστερο).
Tesseract OCR — μηχανή αναγνώρισης κειμένου ανοιχτού κώδικα, που αναπτύχθηκε από την HP (1985–1998) και συνεχίστηκε από την Google (2006+). Το Tesseract 5 (LSTM-based) χρησιμοποιεί αρχιτεκτονική νευρωνικού δικτύου CRNN, που δίνει σημαντική αύξηση ακρίβειας σε σύγκριση με το Tesseract 4 (κλασικό + LSTM). Το Tesseract υποστηρίζει 100+ γλώσσες, συμπεριλαμβανομένων των κυριλλικών, αραβικών, εβραϊκών και CJK. Για Android — tess-two (fork), για iOS — swift-tesseract.
Μειονεκτήματα Tesseract: ταχύτητα 50–200 ms ανά καρέ (CPU-only, χωρίς επιτάχυνση GPU), απαιτεί προεπεξεργασία εικόνας (δυαδοποίηση, deskew, προσδιορισμό προσανατολισμού) πριν από την αποστολή στη μηχανή, δεν έχει ενσωματωμένη ανίχνευση κειμένου — πρέπει να σταλεί η περιοχή εικόνας (συχνά σε συνδυασμό με OpenCV Text Detection ή EAST). Το Tesseract δίνει 90% ακρίβεια σε καθαρά έγγραφα και ~70% σε scene text.
Πότε να επιλέξετε Tesseract: αν η εφαρμογή λειτουργεί σε συσκευές χωρίς Google Play (Huawei), απαιτείται υποστήριξη για σπάνιες γλώσσες (σανσκριτικά, εβραϊκά) ή απαιτείται πλήρης προσαρμογή του pipeline OCR (εκπαίδευση σε δικές του γραμματοσειρές). Σε όλες τις άλλες περιπτώσεις, το ML Kit ή το Vision είναι ταχύτερα, ακριβέστερα και απαιτούν λιγότερο κώδικα. Το Tesseract είναι δικαιολογημένη επιλογή μόνο όταν υπάρχουν περιορισμοί σε SDK τρίτων.
// Tesseract OCR μέσω 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) // Δυαδοποίηση + deskew
tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()
Προεπεξεργασία για Tesseract είναι υποχρεωτική: μετατροπή σε grayscale, δυαδοποίηση (Otsu ή Adaptive), διόρθωση κλίσης (deskew), αφαίρεση θορύβου (median blur). Χωρίς προεπεξεργασία, η ακρίβεια του Tesseract πέφτει στο 50–60%. Χρησιμοποιήστε OpenCV για προεπεξεργασία: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Για έγγραφα με ομοιόμορφο φόντο, αρκεί η δυαδοποίηση, για scene text — πλήρες pipeline.
Ποιότητα εικόνας — ο κύριος παράγοντας ακρίβειας OCR. Το ML Kit και το Vision έχουν ενσωματωμένη προεπεξεργασία, αλλά για πολύπλοκες περιπτώσεις (σκοτεινές φωτογραφίες, θόλωση, υπερέκθεση) η πρόσθετη επεξεργασία αυξάνει την ακρίβεια κατά 10–15%. Κύριες τεχνικές: αύξηση αντίθεσης (CLAHE), αφαίρεση θολώματος (unsharp mask), διόρθωση προοπτικής (perspective transform), αφαίρεση σκιών και αντανακλάσεων.
CLAHE (Contrast Limited Adaptive Histogram Equalization) — προσαρμοστική εξίσωση ιστογράμματος περιορισμένης αντίθεσης, που βελτιώνει την αντίθεση τοπικών περιοχών. Το CLAHE είναι αποτελεσματικό για φωτογραφίες εγγράφων με ανομοιόμορφο φωτισμό (μέρος στη σκιά, μέρος στο φως). Το OpenCV Core.createCLAHE με clipLimit=2.0 και tileGridSize=(8,8) δίνει το βέλτιστο αποτέλεσμα για OCR. Μετά το CLAHE, η ακρίβεια του ML Kit σε σκοτεινά έγγραφα αυξάνεται από 70% σε 88%.
Διόρθωση προοπτικής — υποχρεωτική για φωτογραφίες εγγράφων υπό γωνία. Χρησιμοποιήστε OpenCV findHomography + warpPerspective για ευθυγράμμιση του εγγράφου. Για αυτόματη ανίχνευση άκρων εγγράφου, χρησιμοποιήστε Canny edge detection + findContours + approxPolyDP. Μετά τη διόρθωση προοπτικής, η ακρίβεια OCR αυξάνεται κατά 20–30% για λήψεις υπό γωνία >30°.
// CLAHE + προεπεξεργασία 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)
Ανίχνευση κειμένου πριν από OCR — για scene text, χρησιμοποιήστε EAST (Efficient Accurate Scene Text Detector) ή CRAFT (Character Region Awareness for Text Detection) πριν από την αποστολή στο OCR. Το EAST ανιχνεύει το bounding box του κειμένου στη σκηνή σε 5–15 ms. Το CRAFT είναι ακριβέστερο (97%), αλλά πιο αργό (50–100 ms). Η ανίχνευση κειμένου επιτρέπει την αποκοπή περιοχών χωρίς κείμενο και την αποστολή μόνο σχετικών τμημάτων στο OCR, γεγονός που επιταχύνει τη συνολική επεξεργασία.
Σάρωση εγγράφων — η πιο μαζική εφαρμογή OCR. Οι εφαρμογές σάρωσης (CamScanner, Adobe Scan, Google Drive) χρησιμοποιούν ML Kit ή Vision για αναγνώριση κειμένου από φωτογραφίες εγγράφων. Τυπικό pipeline: ανίχνευση άκρων εγγράφου → διόρθωση προοπτικής → επεξεργασία CLAHE → OCR → μορφοποίηση (PDF, DOCX). Το ML Kit Text Recognition V2 επεξεργάζεται μια σελίδα Α4 σε 100–200 ms.
Μετάφραση κειμένου σε πραγματικό χρόνο — συνδυασμός OCR και αυτόματης μετάφρασης. Το Google Translate, Microsoft Translator, Yandex Translate χρησιμοποιούν ML Kit ή Vision για αναγνώριση κειμένου από την κάμερα και τοποθετούν τη μετάφραση πάνω από το πρωτότυπο κείμενο (μετάφραση AR). Απαίτηση: καθυστέρηση < 200 ms για άνετη εμπειρία χρήστη. Το ML Kit V2 + NNAPI δίνει 30–80 ms ανά καρέ, αφήνοντας περιθώριο για μετάφραση και απόδοση.
Αυτόματη εισαγωγή δεδομένων — OCR για εξαγωγή δεδομένων από επαγγελματικές κάρτες, τραπεζικές κάρτες, έγγραφα ταυτότητας. Το ML Kit αναγνωρίζει το κείμενο, στη συνέχεια η μετα-επεξεργασία αναλύει τη δομή: όνομα, τηλέφωνο, email (επαγγελματικές κάρτες) ή αριθμός κάρτας, ημερομηνία λήξης, CVV (κάρτες πληρωμής). Για επαγγελματικές κάρτες, χρησιμοποιήστε κανονικές εκφράσεις μετά το OCR. Για τραπεζικές κάρτες — εξειδικευμένα μοντέλα ML (επί πληρωμή, ~99% ακρίβεια).
// OCR + μετάφραση AR (απλοποιημένη)
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
// Μετάφραση και απόδοση AR πάνω από ορθογώνιο
DispatchQueue.main.async {
overlayView.showTranslation(text, at: rect)
}
}
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false
OCR για άτομα με προβλήματα όρασης — Υποστηρικτική Τεχνολογία: οι εφαρμογές διαβάζουν δυνατά κείμενο από συσκευασίες, μενού, πινακίδες. Χρησιμοποιούν ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Βασική απαίτηση — πραγματικός χρόνος με χαμηλή καθυστέρηση (< 100 ms). Το Seeing AI (Microsoft) και το Envision AI χρησιμοποιούν αυτήν την προσέγγιση. Για εφαρμογές προσβασιμότητας, χρησιμοποιήστε λειτουργία fast recognition και μην φιλτράρετε βάσει confidence — κάθε κείμενο είναι σημαντικό για τον χρήστη.
Συχνές Ερωτήσεις
Text Recognition (OCR) — τεχνολογία που επιτρέπει στην εφαρμογή να "διαβάζει" κείμενο από φωτογραφίες και βίντεο. Η κάμερα του smartphone καταγράφει την εικόνα, το νευρωνικό δίκτυο στη συσκευή αναγνωρίζει τους χαρακτήρες και επιστρέφει αναγνώσιμο από μηχανή κείμενο. Σε κινητές εφαρμογές, το OCR χρησιμοποιείται για σάρωση εγγράφων, μετάφραση με κάμερα, εισαγωγή δεδομένων από επαγγελματικές κάρτες και δημιουργία προσβάσιμων διεπαφών για άτομα με προβλήματα όρασης.
ML Kit Text Recognition — η καλύτερη επιλογή για Android: 96% ακρίβεια, 10–30 ms ταχύτητα, 45 γλώσσες, επιτάχυνση GPU μέσω NNAPI, βρίσκει κείμενο σε οποιονδήποτε προσανατολισμό. Tesseract — εναλλακτική open-source (90% ακρίβεια, 100+ γλώσσες, CPU), κατάλληλο για συσκευές χωρίς Google Play ή σπάνιες γλώσσες. Στο 95% των έργων, επιλέξτε ML Kit — είναι ταχύτερο, ακριβέστερο και δεν απαιτεί προεπεξεργασία εικόνας.
Όχι, το ML Kit Text Recognition, το Apple Vision και το Tesseract λειτουργούν πλήρως on-device. Το ML Kit μπορεί να κατεβάσει το μοντέλο κατά την πρώτη εκτέλεση (downloaded mode), μετά από το οποίο λειτουργεί εκτός σύνδεσης. Το Apple Vision είναι ενσωματωμένο στο iOS, δεν απαιτεί διαδίκτυο. Το Tesseract είναι πλήρως εκτός σύνδεσης. Το Cloud OCR (Google Cloud Vision, AWS Textract) λειτουργεί μέσω διαδικτύου, αλλά δεν χρησιμοποιείται σε κινητές εφαρμογές πραγματικού χρόνου.
Το ML Kit Text Recognition V2 υποστηρίζει 45+ γλώσσες από τις λατινικές και κυριλλικές ομάδες: Αγγλικά, Ρωσικά, Γερμανικά, Γαλλικά, Ισπανικά, Ιταλικά, Πορτογαλικά, Πολωνικά, Ουκρανικά, Ρουμανικά, Τουρκικά και άλλες. Η V1 (CJK) υποστηρίζει επιπλέον Κινεζικά, Ιαπωνικά, Κορεατικά. Η πλήρης λίστα βρίσκεται στην τεκμηρίωση του TextRecognizerOptions. Για αναγνώριση αραβικών ή εβραϊκών, χρησιμοποιήστε Tesseract (>100 γλώσσες).
Κύριες μέθοδοι: ευθυγράμμιση εγγράφου (διόρθωση προοπτικής μέσω OpenCV), βελτίωση αντίθεσης (CLAHE), αφαίρεση θολώματος (unsharp mask), καλός φωτισμός (continuous auto-exposure), σταθεροποίηση κάμερας (OIS/EIS). Το ML Kit επεξεργάζεται μόνο του βασικές παραμορφώσεις, αλλά για έγγραφα με παραμορφώσεις προοπτικής (>30°) η προεπεξεργασία αυξάνει την ακρίβεια κατά 20–30%. Χρησιμοποιήστε λειτουργία fast recognition για βίντεο.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης