Reconhecimento de texto em aplicativos — o que é, OCR e Vision

Autor: IT Sectr Publicado: 2026-07-18 Tempo de leitura: 10 min

Reconhecimento de Texto (OCR — Reconhecimento Óptico de Caracteres) é uma tecnologia para extrair texto impresso ou manuscrito de imagens e fluxos de vídeo. No desenvolvimento móvel, o Reconhecimento de Texto é usado para digitalizar documentos, reconhecer placas de veículos, ler cartões de visita e traduzir texto em tempo real. As principais soluções de OCR móvel são: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). De acordo com Google ML Kit, 2025, o Text Recognition V2 processa um quadro em 10–30 ms com 96% de precisão em latim e 91% em cirílico.

Principais pontos

  • Reconhecimento de Texto — extração de texto de imagens e vídeo (OCR)
  • ML Kit Text Recognition — 45+ idiomas, precisão 96% (latim), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ idiomas, iOS nativo
  • Tesseract — OCR open-source, 100+ idiomas, 50–200 ms, CPU
  • Tempo real — até 30 FPS com CameraX/AVFoundation em dispositivos modernos

O que é Reconhecimento de Texto: princípios de OCR

Reconhecimento de Texto (OCR) é um processo de visão computacional que converte imagens de texto em caracteres legíveis por máquina. O OCR consiste em etapas: pré-processamento de imagem (binarização, deskew, correção de inclinação), segmentação (divisão em linhas, palavras, caracteres), reconhecimento (classificação de cada caractere) e pós-processamento (verificação com dicionário, correção de erros). Sistemas OCR modernos (ML Kit, Vision) usam redes neurais de ponta a ponta que combinam todas as etapas.

Tipos de OCR: texto impresso (printed text) — reconhecimento de texto datilografado de documentos, letreiros, telas — precisão 95–99%; texto manuscrito (handwriting) — reconhecimento de escrita à mão — precisão 80–90% em latim, 70–80% em cirílico; texto de cena (scene text) — texto em cenas naturais: números de casas, placas de trânsito, nomes de lojas — o mais desafiador devido a distorções de perspectiva e reflexos.

CRNN + CTC Loss — a arquitetura usada em modelos OCR modernos. A Rede Neural Convolucional Recorrente (CNN + LSTM) extrai características da imagem, enquanto a Classificação Temporal Conexionista decodifica a sequência de caracteres sem necessidade de segmentação prévia. A CRNN funciona com textos de qualquer comprimento e é robusta a inclinações e distorções. De acordo com o arXiv (2025), modelos CRNN alcançam 97.5% de precisão no benchmark ICDAR 2019.

Solução OCRPrecisãoVelocidadeIdiomasPlataforma
ML Kit V296%10–30 ms45+Android, iOS
Apple Vision95%10–40 ms13+iOS, macOS
Tesseract 590%50–200 ms100+Multiplataforma
Google Cloud Vision98%500–1000 ms200+Servidor (API)

CRNN para dispositivos móveis — o ML Kit usa um modelo MobileNetV2 + CRNN com quantização INT8. O modelo ocupa 2–5 MB (latente) e é executado em GPU/NPU via TFLite Delegate. Ao contrário do Tesseract (pipeline clássico), o OCR com redes neurais não requer segmentação de caracteres separada e é mais robusto a ruídos. Desvantagem: requer GPU ou NPU para tempo real — em CPU puro, a velocidade cai para 5–10 FPS.

ML Kit Text Recognition no Android e iOS

ML Kit Text Recognition é a principal ferramenta OCR para aplicativos móveis. Está disponível em duas versões: V2 (baseada em latim — otimizada para latim, cirílico, dígitos) e V1 (latim + CJK — japonês, chinês, coreano, mas mais lenta). A V2 usa um modelo CRNN de ponta a ponta, a V1 usa uma CNN + LSTM mais antiga. O Google recomenda a V2 para todos os casos, exceto quando o reconhecimento CJK é necessário.

Estrutura do resultado do ML Kit: Text → TextBlock → Line → Element (Word/Symbol). Cada nível tem um bounding box, confiança (0..1) e texto reconhecido. Text é o objeto raiz com fullText (todo o texto reconhecido em uma linha). TextBlock é um bloco lógico de texto (parágrafo, coluna). Line é uma linha de texto. Element é uma palavra ou símbolo. Use confidence para filtrar reconhecimentos imprecisos.

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

Reconhecimento de Texto no iOS via ML Kit: a API é semelhante ao Android, mas usa UIImage/CVPixelBuffer em vez de InputImage. O ML Kit usa automaticamente o Apple Neural Engine em A12+ via Core ML Delegate. Para iOS, o ML Kit Text Recognition V2 atinge 15–30 ms no iPhone 15 Pro. Para máximo desempenho, converta UIImage para CVPixelBuffer antes de passar — isso reduz a sobrecarga de conversão.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework fornece OCR nativo através de VNRecognizeTextRequest (iOS 13+). O Vision OCR usa o Apple Neural Engine (ANE) e não requer SDKs adicionais. Suporta 13 idiomas (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). O Vision detecta automaticamente o idioma do texto (correção de idioma) e suporta vários idiomas em um único quadro. Velocidade — 10–40 ms em A16+.

Recursos do Vision OCR: recognitionLevel (rápido vs preciso), automaticLanguageDetection, customWords (adicionar termos específicos), supportsTop candidates (múltiplas variantes de reconhecimento para texto borrado). O modo rápido oferece 90% de precisão em 10–20 ms, o modo preciso 95% em 30–50 ms. Para produção, use o modo preciso com filtragem por 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 no iOS: o Vision é mais rápido em dispositivos antigos (iPhone X–13) graças ao ANE integrado. O ML Kit é mais preciso em cenas complexas (distorções, inclinações, reflexos) graças ao modelo do Google treinado com milhões de imagens de scene text. O Vision não suporta confidence para caracteres individuais (apenas para palavras), o que limita a filtragem. Para documentos — Vision (mais rápido), para scene text — ML Kit (mais preciso).

Tesseract OCR: alternativa open-source

Tesseract OCR é um mecanismo de reconhecimento de texto open-source desenvolvido pela HP (1985–1998) e mantido pelo Google (2006+). O Tesseract 5 (baseado em LSTM) usa a arquitetura de rede neural CRNN, proporcionando um aumento significativo de precisão em relação ao Tesseract 4 (clássico + LSTM). O Tesseract suporta 100+ idiomas, incluindo cirílico, árabe, hebraico e CJK. Para Android — tess-two (fork), para iOS — swift-tesseract.

Desvantagens do Tesseract: velocidade 50–200 ms por quadro (apenas CPU, sem aceleração GPU), requer pré-processamento de imagem (binarização, deskew, detecção de orientação) antes de passar ao mecanismo, não tem detecção de texto embutida — é necessário passar a região da imagem (frequentemente com OpenCV Text Detection ou EAST). O Tesseract atinge 90% de precisão em documentos limpos e ~70% em scene text.

Quando escolher o Tesseract: se o aplicativo funciona em dispositivos sem Google Play (Huawei), precisa de suporte para idiomas raros (sânscrito, hebraico) ou requer personalização completa do pipeline OCR (treinamento com fontes próprias). Para todos os outros casos, o ML Kit ou o Vision são mais rápidos, precisos e exigem menos código. O Tesseract só se justifica quando há restrições em SDKs de terceiros.

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) // Binarização + deskew

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

Pré-processamento para Tesseract é obrigatório: converter para escala de cinza, binarização (Otsu ou Adaptive), deskew, remoção de ruído (median blur). Sem pré-processamento, a precisão do Tesseract cai para 50–60%. Use OpenCV para pré-processamento: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Para documentos com fundo uniforme, a binarização é suficiente; para scene text, é necessário um pipeline completo.

Pré-processamento de imagens para OCR

A qualidade da imagem é o principal fator para a precisão do OCR. O ML Kit e o Vision têm pré-processamento embutido, mas para casos difíceis (fotos escuras, desfoque, superexposição), o processamento adicional melhora a precisão em 10–15%. Técnicas principais: melhoria de contraste (CLAHE), nitidez (unsharp mask), correção de perspectiva (perspective transform), remoção de sombras e reflexos.

CLAHE (Equalização de Histograma Adaptativa Limitada de Contraste) — equalização adaptativa de histograma que melhora o contraste em regiões locais. O CLAHE é eficaz para fotos de documentos com iluminação irregular (parte na sombra, parte iluminada). O OpenCV Core.createCLAHE com clipLimit=2.0 e tileGridSize=(8,8) dá resultados ótimos para OCR. Após o CLAHE, a precisão do ML Kit em documentos escuros melhora de 70% para 88%.

Correção de perspectiva — obrigatória para fotos de documentos tiradas em ângulo. Use OpenCV findHomography + warpPerspective para alinhar o documento. Para deteção automática de bordas do documento, use Canny edge detection + findContours + approxPolyDP. Após a correção de perspectiva, a precisão do OCR melhora em 20–30% para fotos com ângulos >30°.

kotlin
// CLAHE + pré-processamento 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)

Deteção de texto antes do OCR — para scene text, use EAST (Detector de Texto de Cena Eficiente e Preciso) ou CRAFT (Consciência de Região de Caracteres para Deteção de Texto) antes de passar ao OCR. O EAST deteta bounding boxes de texto numa cena em 5–15 ms. O CRAFT é mais preciso (97%) mas mais lento (50–100 ms). A deteção de texto permite filtrar áreas sem texto e passar apenas regiões relevantes ao OCR, acelerando o processamento geral.

Aplicações de OCR em apps móveis

Digitalização de documentos — a aplicação mais difundida de OCR. As apps de digitalização (CamScanner, Adobe Scan, Google Drive) usam ML Kit ou Vision para reconhecer texto de fotos de documentos. Pipeline típico: deteção de bordas do documento → correção de perspectiva → processamento CLAHE → OCR → formatação (PDF, DOCX). O ML Kit Text Recognition V2 lida com isso em 100–200 ms por página A4.

Tradução de texto em tempo real — combinação de OCR e tradução automática. Google Translate, Microsoft Translator, Yandex Translate usam ML Kit ou Vision para reconhecer texto da câmara e sobrepõem a tradução sobre o texto original (tradução AR). Requisito: latência < 200 ms para uma UX confortável. O ML Kit V2 + NNAPI oferece 30–80 ms por quadro, deixando margem para tradução e renderização.

Introdução automática de dados — OCR para extrair dados de cartões de visita, cartões bancários, identificações. O ML Kit reconhece o texto, depois o pós-processamento analisa a estrutura: nome, telefone, email (cartões de visita) ou número do cartão, validade, CVV (cartões de pagamento). Para cartões de visita, use expressões regulares após o OCR. Para cartões bancários — modelos ML especializados (pagos, ~99% de precisão).

swift
// OCR + tradução AR (simplificado)
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
        // Tradução e renderização AR sobre o retângulo
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

OCR para pessoas com deficiência visual — Tecnologia Assistiva: as apps leem texto de embalagens, menus, letreiros em voz alta. Usam ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Requisito chave — tempo real com baixa latência (< 100 ms). O Seeing AI (Microsoft) e o Envision AI usam esta abordagem. Para apps de acessibilidade, use o modo de reconhecimento rápido e não filtre por confidence — qualquer texto é valioso para o utilizador.

Perguntas frequentes

O que é o reconhecimento de texto (OCR) em aplicações móveis?

Reconhecimento de Texto (OCR) é uma tecnologia que permite a uma aplicação "ler" texto de fotos e vídeo. A câmara do smartphone captura uma imagem, a rede neural no dispositivo reconhece os caracteres e devolve texto legível por máquina. Em aplicações móveis, o OCR é usado para digitalizar documentos, traduzir com a câmara, inserir dados de cartões de visita e criar interfaces acessíveis para pessoas com deficiência visual.

Qual OCR é melhor para Android: ML Kit ou Tesseract?

ML Kit Text Recognition é a melhor escolha para Android: 96% de precisão, velocidade de 10–30 ms, 45 idiomas, aceleração GPU via NNAPI, encontra texto em qualquer orientação. O Tesseract é uma alternativa open-source (90% de precisão, 100+ idiomas, CPU), adequada para dispositivos sem Google Play ou idiomas raros. Para 95% dos projetos, escolha o ML Kit — é mais rápido, preciso e não requer pré-processamento de imagem.

É necessária internet para OCR num dispositivo móvel?

Não, o ML Kit Text Recognition, o Apple Vision e o Tesseract funcionam completamente no dispositivo. O ML Kit pode descarregar o modelo no primeiro arranque (modo descarregado), depois funciona offline. O Apple Vision está integrado no iOS e não requer internet. O Tesseract é completamente offline. O OCR na nuvem (Google Cloud Vision, AWS Textract) funciona através da internet mas não é usado em aplicações móveis em tempo real.

Que idiomas o ML Kit Text Recognition suporta?

O ML Kit Text Recognition V2 suporta 45+ idiomas dos grupos latino e cirílico: inglês, russo, alemão, francês, espanhol, italiano, português, polaco, ucraniano, romeno, turco e outros. O V1 (CJK) suporta adicionalmente chinês, japonês, coreano. Lista completa — na documentação do TextRecognizerOptions. Para reconhecer árabe ou hebraico, use o Tesseract (>100 idiomas).

Como melhorar a precisão do OCR em fotos de documentos?

Métodos principais: alinhamento do documento (correção de perspetiva via OpenCV), melhoria de contraste (CLAHE), nitidez (unsharp mask), boa iluminação (auto-exposição contínua), estabilização da câmara (OIS/EIS). O ML Kit lida com distorções básicas por si só, mas para documentos com distorções de perspetiva (>30°), o pré-processamento melhora a precisão em 20–30%. Use o modo de reconhecimento rápido para vídeo.

Resumo

  • Reconhecimento de Texto — OCR em dispositivos móveis: texto impresso, manuscrito, de cena
  • ML Kit V2 — 96% precisão, 45+ idiomas, 10–30 ms, aceleração GPU/NPU
  • Apple Vision — OCR nativo do iOS (iOS 13+), 13 idiomas, via ANE
  • Tesseract 5 — open-source, 100+ idiomas, 50–200 ms (CPU), alternativa para Huawei
  • Pré-processamento — CLAHE, deskew, correção de perspetiva melhoram precisão 10–30%
  • Tempo real — até 30 FPS com CameraX/AVFoundation com ML Kit ou Vision
  • No dispositivo — toda a computação é local, privacidade de dados garantida

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também