Vision: um framework de visão computacional no iOS

Autor: IT Sectr Publicado: 2026-07-19 Tempo de leitura: 9 min

Vision é um framework de visão computacional da Apple, apresentado pela primeira vez no iOS 11 em 2017. O Vision fornece algoritmos prontos para detecção facial, reconhecimento de texto (OCR), detecção de códigos de barras, rastreamento de objetos, classificação de imagens e análise de contornos — tudo executado no dispositivo usando o Neural Engine. De acordo com a Apple WWDC 2023, o Vision é usado no aplicativo Fotos padrão para reconhecimento facial e no aplicativo Câmera para detecção de texto em tempo real no iPhone e iPad.

Pontos-chave

  • Vision é o framework de visão computacional da Apple com ciclo completo de análise no dispositivo.
  • Suporta detecção facial, reconhecimento de texto (OCR), códigos de barras, classificação e rastreamento de objetos.
  • Funciona através do mecanismo unificado VNRequest — requisições para uma imagem ou fluxo de vídeo.
  • Integra-se com Core ML para modelos personalizados via VNCoreMLRequest.
  • O framework é otimizado para Neural Engine em chips A12+ para desempenho em tempo real.

O que é Vision no iOS?

Vision é um framework de visão computacional de alto nível que abstrai algoritmos complexos de aprendizado de máquina por trás de uma API simples de requisições (VNRequest). O desenvolvedor não precisa entender redes neurais convolucionais — basta criar o tipo de requisição apropriado, passar uma imagem e obter o resultado.

A arquitetura do Vision segue o princípio Requisição → Manipulador → Resultado: VNImageRequestHandler aceita uma imagem, executa VNRequest e retorna um array de VNObservation com os resultados. Isso permite combinar múltiplas requisições em uma única imagem — por exemplo, detectar simultaneamente rostos e texto em uma foto.

Vision suporta iOS 11+ e macOS 10.13+. A aceleração por hardware via Neural Engine requer um chip A12 Bionic ou superior. Em dispositivos com A17 Pro e série M, o Vision processa até 60 quadros por segundo para vídeo em streaming.

Principal vantagem do Vision é a privacidade completa: toda a computação é realizada no dispositivo, as imagens nunca são enviadas para um servidor. Isso permite usar o framework em aplicações que lidam com dados sensíveis, como aplicativos médicos ou bancários.

Detecção e reconhecimento facial

VNDetectFaceRectanglesRequest é a requisição básica do Vision para detectar rostos em uma imagem. Ela retorna as coordenadas dos retângulos que delimitam cada rosto, sem identificar uma pessoa específica.

Para análise mais detalhada, use VNDetectFaceLandmarksRequest, que identifica os pontos-chave do rosto: olhos, sobrancelhas, nariz, boca, contorno da mandíbula. Esses dados são usados para sobrepor máscaras, animar emojis e filtros em tempo real (como no FaceTime e Snapchat).

swift
import Vision
import UIKit

guard let image = UIImage(named: "photo") else { return }
let request = VNDetectFaceRectanglesRequest()
let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])

try handler.perform([request])
for observation in request.results ?? [] {
    let bbox = observation.boundingBox
    print("Face at x=\\(bbox.origin.x), y=\\(bbox.origin.y)")
}

VNFaceObservation contém não apenas boundingBox, mas também confidence (confiança de 0 a 1) e landmarks — um array de pontos faciais se a requisição foi VNDetectFaceLandmarksRequest. Confiança abaixo de 0,5 geralmente indica um falso positivo — esses resultados devem ser descartados.

Vision também suporta VNDetectFaceCaptureQualityRequest, que avalia a qualidade da imagem facial: iluminação, nitidez, ângulo de rotação. Isso é útil para selecionar o melhor quadro durante o registro do usuário ou criar um avatar.

Reconhecimento de texto (OCR) com Vision

VNRecognizeTextRequest é o mecanismo OCR integrado da Apple, apresentado no iOS 13. Ele reconhece texto impresso em imagens com suporte para 13 idiomas: inglês, russo, chinês, japonês, coreano, italiano, alemão, espanhol, português, francês, árabe, vietnamita e tailandês.

VNRecognizeTextRequest suporta dois níveis de precisão: .fast (rápido, para texto simples em fundo contrastante) e .accurate (preciso, para cenas complexas com diferentes fontes e ângulos). .fast é 3–5 vezes mais rápido, mas lida com texto manuscrito e fontes não padronizadas de forma menos eficaz.

swift
import Vision

let textRequest = VNRecognizeTextRequest { request, _ in
    guard let observations = request.results as? [VNRecognizedTextObservation]
    else { return }
    for observation in observations {
        let topCandidate = observation.topCandidates(1).first
        print(topCandidate?.string ?? "")
    }
}
textRequest.recognitionLevel = .accurate
textRequest.usesLanguageCorrection = true

A propriedade usesLanguageCorrection ativa a correção do texto reconhecido usando um modelo de idioma. Isso melhora a precisão para inglês em 10–15%, mas aumenta o tempo de processamento. A correção para russo também está disponível quando o reconhecimento apropriado é especificado.

De acordo com Apple ML Research 2022, o VNRecognizeTextRequest no nível .accurate atinge 96% de precisão para fotos nítidas de documentos em inglês e cerca de 88% para russo. Para texto em embalagens, letreiros e telas, a precisão cai para 75–85%.

Nível de reconhecimentoVelocidadePrecisão (inglês)Suporte russo
.fast0,1–0,3 s~85%Sim
.accurate0,3–1,0 s~96%Sim

Detecção de códigos de barras e QR

VNDetectBarcodesRequest é uma requisição do Vision para detectar e decodificar códigos de barras e QR codes em imagens. Todos os formatos principais são suportados: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec e QR.

Ao contrário do AVFoundation (AVCaptureMetadataOutput), o Vision funciona não apenas com fluxos de vídeo, mas também com imagens estáticas — permitindo escanear códigos de fotos existentes ou capturas de tela. O Vision também determina o boundingBox do código com precisão de pixel, o que é conveniente para animar um quadro ao redor do código detectado.

swift
import Vision

let barcodeRequest = VNDetectBarcodesRequest { request, _ in
    guard let observations = request.results as? [VNBarcodeObservation]
    else { return }
    for observation in observations {
        let payload = observation.payloadStringValue ?? ""
        print("Barcode: \\(payload), Symbology: \\(observation.symbology.rawValue)"
    }
}

VNBarcodeObservation contém payloadStringValue (conteúdo decodificado), symbology (tipo de código) e confidence. Para QR codes, o payload pode ser uma URL, texto ou JSON. Para EAN/UPC, um código numérico de produto é retornado, que pode ser usado para pesquisar o item em um banco de dados.

Vision pode processar múltiplos códigos de barras em uma única imagem — o array de observations contém um objeto para cada código detectado. Isso é útil para escanear lotes de produtos ou documentos com vários códigos de barras.

Rastreamento de objetos em fluxo de vídeo

VNDetectObjectAtPointRequest e VNSequenceRequestHandler são ferramentas do Vision para rastrear objetos em um fluxo de vídeo. O primeiro identifica um objeto pelo ponto de toque do usuário, o segundo rastreia um objeto entre quadros de vídeo.

VNSequenceRequestHandler aceita uma sequência de imagens (quadros de vídeo) e retorna a posição atualizada do objeto rastreado para cada quadro. Isso é usado em aplicativos de realidade aumentada, editores de vídeo e sistemas de vigilância.

swift
import Vision

let trackingRequest = VNTrackObjectRequest(detectedObjectObservation: initialObservation)
let sequenceHandler = VNSequenceRequestHandler()

for frame in videoFrames {
    try sequenceHandler.perform([trackingRequest],
        on: frame.cgImage!)
    let newBBox = trackingRequest.results?.first?.boundingBox
    // Atualizar posição do objeto na tela
}

VNTrackObjectRequest usa um algoritmo de rastreamento baseado em fluxo óptico — ele não retreina o detector em cada quadro, mas calcula o deslocamento do objeto em relação à sua posição anterior. Isso permite operação em tempo real mesmo em dispositivos sem Neural Engine.

Limitação: o rastreamento pode perder o objeto durante movimento rápido, oclusão ou mudanças bruscas de iluminação. A Apple recomenda reiniciar a detecção (VNDetectObjectAtPointRequest) a cada 10–15 quadros para correção do rastreamento.

Classificação de imagens e análise de contornos

VNClassifyImageRequest é o modelo integrado do Vision para classificação de imagens em 1000 categorias (modelo ResNet-50 treinado no ImageNet). A requisição retorna um array de VNClassificationObservation com o nome da categoria e a confiança.

VNDetectContoursRequest realiza análise de contornos de imagem — extrai os limites dos objetos, útil para segmentação, delineamento e pré-processamento antes do reconhecimento. A requisição retorna um array de pontos descrevendo cada contorno na imagem.

swift
import Vision

// Classificação de imagens
let classificationRequest = VNClassifyImageRequest { request, _ in
    guard let results = request.results as? [VNClassificationObservation]
    else { return }
    let topMatch = results.prefix(3).filter { $0.confidence > 0.3 }
    for match in topMatch {
        print("\\(match.identifier): \\(match.confidence)"
    }
}

VNClassifyImageRequest funciona bem para categorias gerais (gato, cachorro, carro, comida), mas não é adequado para objetos específicos — para estes, você precisa treinar um modelo Core ML personalizado e usar VNCoreMLRequest. O modelo da Apple é otimizado para dispositivos móveis e ocupa apenas 5 MB.

VNDetectContoursRequest retorna contornos como um array de pontos com o tipo de contorno (externo, interno, furo). Esta requisição é usada para pré-processamento de imagens antes de OCR (melhorar contraste do texto), para desenhar efeitos (delineamento de objetos) e para análise de formas.

Requisição VisionPropósitoVersão iOS
VNDetectFaceRectanglesRequestDetecção de rostos em imagensiOS 11
VNRecognizeTextRequestReconhecimento de texto (OCR)iOS 13
VNDetectBarcodesRequestDetecção de códigos de barras e QRiOS 11
VNClassifyImageRequestClassificação de imagensiOS 13
VNDetectContoursRequestAnálise de contornosiOS 14
VNTrackObjectRequestRastreamento de objetosiOS 11

Perguntas frequentes

Qual é a diferença entre Vision e Core ML para visão computacional?

Vision fornece algoritmos prontos (detecção facial, OCR, códigos de barras) sem treinamento de modelo. Core ML é o motor para executar modelos personalizados. Vision + VNCoreMLRequest permitem executar modelos Core ML no pipeline do Vision, obtendo o melhor dos dois mundos: detectores prontos do Vision + classificação personalizada do Core ML.

O Vision funciona em tempo real em vídeo?

Sim, Vision suporta processamento de fluxo de vídeo em tempo real através de VNSequenceRequestHandler para rastreamento e AVCaptureVideoDataOutput para processamento quadro a quadro. Em dispositivos com A12+ e Neural Engine, o Vision processa até 60 fps para detecção facial. Para tarefas pesadas (OCR, classificação), recomenda-se processar cada 5–10º quadro.

Quais idiomas o VNRecognizeTextRequest suporta?

VNRecognizeTextRequest suporta 13 idiomas: inglês, russo, chinês (simplificado e tradicional), japonês, coreano, italiano, alemão, espanhol, português, francês, árabe, vietnamita e tailandês. Para reconhecer vários idiomas em uma única imagem, especifique um array na propriedade recognitionLanguages.

Vision pode ser usado com um modelo Core ML?

Sim, através de VNCoreMLRequest. Você cria um modelo Core ML envolto em VNCoreMLModel e o passa para VNCoreMLRequest. O Vision lida automaticamente com o pré-processamento da imagem (dimensionamento, corte) e a alimenta para o modelo Core ML. O resultado é retornado como VNCoreMLFeatureValueObservation com os dados de saída do modelo.

Vision envia imagens para o servidor da Apple?

Não, Vision realiza toda a análise completamente no dispositivo. As imagens nunca saem do dispositivo do usuário. Esta é a arquitetura fundamental da Apple: todos os frameworks de ML (Vision, NaturalLanguage, Core ML, Speech) funcionam no dispositivo para garantir privacidade. Nenhum dado é enviado para os servidores da Apple.

Resumo

  • Vision — framework de visão computacional da Apple com API baseada em VNRequest, disponível desde iOS 11 em todos os dispositivos Apple.
  • VNDetectFaceRectanglesRequest e VNDetectFaceLandmarksRequest detectam rostos e pontos-chave para filtros, máscaras e animações.
  • VNRecognizeTextRequest — OCR integrado para 13 idiomas com níveis .fast e .accurate, com precisão de até 96% para documentos.
  • VNDetectBarcodesRequest decodifica todos os formatos populares de códigos de barras e QR tanto em fotos quanto em fluxos de vídeo.
  • VNTrackObjectRequest rastreia objetos entre quadros de vídeo através de fluxo óptico sem retreinar o detector.
  • Integração com Core ML através de VNCoreMLRequest permite executar modelos personalizados de classificação e detecção dentro do pipeline do Vision.
  • Todos os cálculos são realizados no dispositivo usando Neural Engine — sem envio de imagens para servidores e privacidade total de dados.

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