Riconoscimento del testo nelle app — cos'è, OCR e Vision

Autore: IT Sectr Pubblicato: 2026-07-18 Tempo di lettura: 10 min

Riconoscimento del testo (OCR — Riconoscimento Ottico dei Caratteri) è una tecnologia per estrarre testo stampato o scritto a mano da immagini e flussi video. Nello sviluppo mobile, il riconoscimento del testo viene utilizzato per digitalizzare documenti, riconoscere targhe, leggere biglietti da visita e tradurre testo in tempo reale. Le principali soluzioni OCR mobili sono: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Secondo Google ML Kit, 2025, Text Recognition V2 elabora un fotogramma in 10–30 ms con una precisione del 96% in latino e 91% in cirillico.

Punti chiave

  • Riconoscimento del testo — estrazione di testo da immagini e video (OCR)
  • ML Kit Text Recognition — 45+ lingue, precisione 96% (latino), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ lingue, iOS nativo
  • Tesseract — OCR open-source, 100+ lingue, 50–200 ms, CPU
  • Tempo reale — fino a 30 FPS con CameraX/AVFoundation su dispositivi moderni

Cos'è il Riconoscimento del testo: principi OCR

Riconoscimento del testo (OCR) è un processo di visione artificiale che converte immagini di testo in caratteri leggibili dalla macchina. L'OCR comprende fasi: pre-elaborazione dell'immagine (binarizzazione, deskew, correzione dell'inclinazione), segmentazione (divisione in righe, parole, caratteri), riconoscimento (classificazione di ogni carattere) e post-elaborazione (controllo dizionario, correzione errori). I moderni sistemi OCR (ML Kit, Vision) utilizzano reti neurali end-to-end che combinano tutte le fasi.

Tipi di OCR: testo stampato — riconoscimento di testo dattiloscritto da documenti, insegne, schermi — precisione 95–99%; testo scritto a mano — riconoscimento di scrittura manuale — precisione 80–90% in latino, 70–80% in cirillico; testo di scena — testo in scene naturali: numeri civici, segnali stradali, nomi di negozi — il più difficile a causa di distorsioni prospettiche e riflessi.

CRNN + CTC Loss — l'architettura utilizzata nei moderni modelli OCR. La Rete Neurale Convoluzionale Ricorrente (CNN + LSTM) estrae le caratteristiche dell'immagine, mentre la Classificazione Temporale Connessionista decodifica la sequenza di caratteri senza necessità di segmentazione preventiva. CRNN funziona con testi di qualsiasi lunghezza ed è robusta a inclinazioni e distorsioni. Secondo arXiv (2025), i modelli CRNN raggiungono il 97.5% di precisione sul benchmark ICDAR 2019.

Soluzione OCRPrecisioneVelocitàLinguePiattaforma
ML Kit V296%10–30 ms45+Android, iOS
Apple Vision95%10–40 ms13+iOS, macOS
Tesseract 590%50–200 ms100+Multipiattaforma
Google Cloud Vision98%500–1000 ms200+Server (API)

CRNN per dispositivi mobili — ML Kit utilizza un modello MobileNetV2 + CRNN con quantizzazione INT8. Il modello occupa 2–5 MB (latente) e viene eseguito su GPU/NPU tramite TFLite Delegate. A differenza di Tesseract (pipeline classico), l'OCR con reti neurali non richiede segmentazione separata dei caratteri ed è più robusto al rumore. Svantaggio: richiede GPU o NPU per il tempo reale — su CPU pura, la velocità scende a 5–10 FPS.

ML Kit Text Recognition su Android e iOS

ML Kit Text Recognition è lo strumento OCR principale per le applicazioni mobili. È disponibile in due versioni: V2 (basata sul latino — ottimizzata per latino, cirillico, cifre) e V1 (latino + CJK — giapponese, cinese, coreano, ma più lento). V2 utilizza un modello CRNN end-to-end, V1 usa una CNN + LSTM più vecchia. Google raccomanda V2 per tutti i casi tranne quando è necessario il riconoscimento CJK.

Struttura del risultato ML Kit: Text → TextBlock → Line → Element (Word/Symbol). Ogni livello ha un bounding box, confidenza (0..1) e testo riconosciuto. Text è l'oggetto radice con fullText (tutto il testo riconosciuto in una riga). TextBlock è un blocco logico di testo (paragrafo, colonna). Line è una riga di testo. Element è una parola o un simbolo. Usa confidence per filtrare riconoscimenti imprecisi.

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 */ }

Riconoscimento del testo su iOS tramite ML Kit: l'API è simile ad Android ma usa UIImage/CVPixelBuffer invece di InputImage. ML Kit utilizza automaticamente Apple Neural Engine su A12+ tramite Core ML Delegate. Per iOS, ML Kit Text Recognition V2 raggiunge 15–30 ms su iPhone 15 Pro. Per prestazioni massime, converti UIImage in CVPixelBuffer prima di passarlo — questo riduce il sovraccarico di conversione.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework fornisce OCR nativo tramite VNRecognizeTextRequest (iOS 13+). Vision OCR utilizza Apple Neural Engine (ANE) e non richiede SDK aggiuntivi. Supporta 13 lingue (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision rileva automaticamente la lingua del testo (correzione lingua) e supporta più lingue in un singolo fotogramma. Velocità — 10–40 ms su A16+.

Caratteristiche di Vision OCR: recognitionLevel (veloce vs accurato), automaticLanguageDetection, customWords (aggiunta termini specifici), supportsTop candidates (multiple varianti di riconoscimento per testo sfocato). La modalità veloce offre 90% di precisione in 10–20 ms, la modalità accurata 95% in 30–50 ms. Per la produzione, usa la modalità accurata con filtraggio per 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 su iOS: Vision è più veloce sui dispositivi vecchi (iPhone X–13) grazie all'ANE integrato. ML Kit è più preciso su scene complesse (distorsioni, inclinazioni, riflessi) grazie al modello di Google addestrato su milioni di immagini scene text. Vision non supporta la confidenza per caratteri individuali (solo per parole), limitando il filtraggio. Per documenti — Vision (più veloce), per scene text — ML Kit (più preciso).

Tesseract OCR: alternativa open-source

Tesseract OCR è un motore di riconoscimento testo open-source sviluppato da HP (1985–1998) e mantenuto da Google (2006+). Tesseract 5 (basato su LSTM) utilizza l'architettura di rete neurale CRNN, fornendo un aumento significativo di precisione rispetto a Tesseract 4 (classico + LSTM). Tesseract supporta 100+ lingue, inclusi cirillico, arabo, ebraico e CJK. Per Android — tess-two (fork), per iOS — swift-tesseract.

Svantaggi di Tesseract: velocità 50–200 ms per fotogramma (solo CPU, nessuna accelerazione GPU), richiede pre-elaborazione dell'immagine (binarizzazione, deskew, rilevamento orientamento) prima di passare al motore, nessun rilevamento testo integrato — bisogna passare la regione dell'immagine (spesso insieme a OpenCV Text Detection o EAST). Tesseract raggiunge il 90% di precisione su documenti puliti e ~70% su scene text.

Quando scegliere Tesseract: se l'app funziona su dispositivi senza Google Play (Huawei), ha bisogno di supporto per lingue rare (sanscrito, ebraico), o richiede personalizzazione completa del pipeline OCR (addestramento su caratteri personalizzati). Per tutti gli altri casi, ML Kit o Vision sono più veloci, precisi e richiedono meno codice. Tesseract è giustificato solo quando ci sono restrizioni su SDK di terze parti.

kotlin
// Tesseract OCR via 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) // Binarizzazione + deskew

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

Pre-elaborazione per Tesseract è obbligatoria: conversione in scala di grigi, binarizzazione (Otsu o Adaptive), deskew, rimozione rumore (median blur). Senza pre-elaborazione, la precisione di Tesseract scende al 50–60%. Usa OpenCV per la pre-elaborazione: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Per documenti con sfondo uniforme, la binarizzazione è sufficiente; per scene text, è necessario un pipeline completo.

Pre-elaborazione delle immagini per OCR

La qualità dell'immagine è il fattore principale per la precisione dell'OCR. ML Kit e Vision hanno pre-elaborazione integrata, ma per casi difficili (foto scure, sfocate, sovraesposte), l'elaborazione aggiuntiva migliora la precisione del 10–15%. Tecniche principali: miglioramento del contrasto (CLAHE), nitidezza (unsharp mask), correzione prospettica (perspective transform), rimozione di ombre e riflessi.

CLAHE (Equalizzazione dell'istogramma adattativa a contrasto limitato) — equalizzazione adattativa dell'istogramma che migliora il contrasto nelle regioni locali. CLAHE è efficace per foto di documenti con illuminazione non uniforme (parte in ombra, parte illuminata). OpenCV Core.createCLAHE con clipLimit=2.0 e tileGridSize=(8,8) dà risultati ottimali per OCR. Dopo CLAHE, la precisione di ML Kit su documenti scuri migliora dal 70% all'88%.

Correzione prospettica — obbligatoria per foto di documenti scattate ad angolo. Usa OpenCV findHomography + warpPerspective per allineare il documento. Per il rilevamento automatico dei bordi del documento, usa Canny edge detection + findContours + approxPolyDP. Dopo la correzione prospettica, la precisione dell'OCR migliora del 20–30% per scatti con angoli >30°.

kotlin
// CLAHE + pre-elaborazione 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)

Rilevamento testo prima dell'OCR — per scene text, usa EAST (Rilevatore di testo di scena efficiente e accurato) o CRAFT (Consapevolezza della regione dei caratteri per il rilevamento del testo) prima di passare all'OCR. EAST rileva i bounding box del testo in una scena in 5–15 ms. CRAFT è più preciso (97%) ma più lento (50–100 ms). Il rilevamento del testo consente di filtrare le aree senza testo e passare solo le regioni pertinenti all'OCR, accelerando l'elaborazione complessiva.

Applicazioni OCR nelle app mobili

Scansione documenti — l'applicazione più diffusa dell'OCR. Le app di scansione (CamScanner, Adobe Scan, Google Drive) usano ML Kit o Vision per riconoscere il testo da foto di documenti. Pipeline tipico: rilevamento bordi documento → correzione prospettica → elaborazione CLAHE → OCR → formattazione (PDF, DOCX). ML Kit Text Recognition V2 lo gestisce in 100–200 ms per pagina A4.

Traduzione testo in tempo reale — combinazione di OCR e traduzione automatica. Google Traduttore, Microsoft Translator, Yandex Translate usano ML Kit o Vision per riconoscere il testo dalla fotocamera e sovrappongono la traduzione al testo originale (traduzione AR). Requisito: latenza < 200 ms per una UX confortevole. ML Kit V2 + NNAPI offre 30–80 ms per fotogramma, lasciando margine per traduzione e rendering.

Inserimento dati automatico — OCR per estrarre dati da biglietti da visita, carte bancarie, documenti d'identità. ML Kit riconosce il testo, poi il post-elaborazione analizza la struttura: nome, telefono, email (biglietti da visita) o numero carta, scadenza, CVV (carte di pagamento). Per biglietti da visita, usa espressioni regolari dopo l'OCR. Per carte bancarie — modelli ML specializzati (a pagamento, ~99% di precisione).

swift
// OCR + traduzione AR (semplificata)
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
        // Traduzione e rendering AR sul rettangolo
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

OCR per persone con disabilità visiva — Tecnologia assistiva: le app leggono ad alta voce il testo da imballaggi, menu, insegne. Usano ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Requisito chiave — tempo reale con bassa latenza (< 100 ms). Seeing AI (Microsoft) e Envision AI usano questo approccio. Per le app di accessibilità, usa la modalità di riconoscimento rapido e non filtrare per confidenza — qualsiasi testo è prezioso per l'utente.

Domande frequenti

Cos'è il riconoscimento del testo (OCR) nelle applicazioni mobili?

Riconoscimento del testo (OCR) è una tecnologia che permette a un'app di "leggere" il testo da foto e video. La fotocamera dello smartphone cattura un'immagine, la rete neurale sul dispositivo riconosce i caratteri e restituisce testo leggibile dalla macchina. Nelle app mobili, l'OCR viene utilizzato per scansionare documenti, tradurre con la fotocamera, inserire dati da biglietti da visita e creare interfacce accessibili per persone con disabilità visiva.

Quale OCR è migliore per Android: ML Kit o Tesseract?

ML Kit Text Recognition è la scelta migliore per Android: 96% di precisione, velocità 10–30 ms, 45 lingue, accelerazione GPU tramite NNAPI, trova testo in qualsiasi orientamento. Tesseract è un'alternativa open-source (90% di precisione, 100+ lingue, CPU), adatta per dispositivi senza Google Play o lingue rare. Per il 95% dei progetti, scegli ML Kit — è più veloce, preciso e non richiede pre-elaborazione dell'immagine.

È necessaria Internet per l'OCR su un dispositivo mobile?

No, ML Kit Text Recognition, Apple Vision e Tesseract funzionano completamente sul dispositivo. ML Kit può scaricare il modello al primo avvio (modalità scaricata), dopodiché funziona offline. Apple Vision è integrato in iOS e non richiede Internet. Tesseract è completamente offline. L'OCR cloud (Google Cloud Vision, AWS Textract) funziona via Internet ma non viene utilizzato nelle applicazioni mobili in tempo reale.

Quali lingue supporta ML Kit Text Recognition?

ML Kit Text Recognition V2 supporta 45+ lingue dei gruppi latino e cirillico: inglese, russo, tedesco, francese, spagnolo, italiano, portoghese, polacco, ucraino, rumeno, turco e altre. V1 (CJK) supporta inoltre cinese, giapponese, coreano. Elenco completo — nella documentazione di TextRecognizerOptions. Per riconoscere arabo o ebraico, usa Tesseract (>100 lingue).

Come migliorare la precisione dell'OCR sulle foto di documenti?

Metodi principali: allineamento del documento (correzione prospettica tramite OpenCV), miglioramento del contrasto (CLAHE), nitidezza (unsharp mask), buona illuminazione (auto-esposizione continua), stabilizzazione della fotocamera (OIS/EIS). ML Kit gestisce le distorsioni di base da solo, ma per documenti con distorsioni prospettiche (>30°), la pre-elaborazione migliora la precisione del 20–30%. Usa la modalità di riconoscimento rapido per i video.

Riepilogo

  • Riconoscimento del testo — OCR su dispositivi mobili: testo stampato, scritto a mano, di scena
  • ML Kit V2 — 96% precisione, 45+ lingue, 10–30 ms, accelerazione GPU/NPU
  • Apple Vision — OCR nativo iOS (iOS 13+), 13 lingue, tramite ANE
  • Tesseract 5 — open-source, 100+ lingue, 50–200 ms (CPU), alternativa per Huawei
  • Pre-elaborazione — CLAHE, deskew, correzione prospettica migliorano precisione 10–30%
  • Tempo reale — fino a 30 FPS con CameraX/AVFoundation con ML Kit o Vision
  • Sul dispositivo — tutto il calcolo in locale, privacy dei dati garantita

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche