Vision: un framework de visión artificial en iOS

Autor: IT Sectr Publicado: 2026-07-19 Tiempo de lectura: 9 min

Vision es un framework de visión artificial de Apple, presentado por primera vez en iOS 11 en 2017. Vision proporciona algoritmos listos para usar para detección de rostros, reconocimiento de texto (OCR), detección de códigos de barras, seguimiento de objetos, clasificación de imágenes y análisis de contornos, todo realizado en el dispositivo utilizando Neural Engine. Según Apple WWDC 2023, Vision se utiliza en la aplicación estándar Fotos para el reconocimiento de rostros y en la aplicación Cámara para la detección de texto en tiempo real en iPhone y iPad.

Puntos clave

  • Vision es el framework de visión artificial de Apple que realiza todo el análisis en el dispositivo.
  • Admite detección de rostros, reconocimiento de texto (OCR), códigos de barras, clasificación y seguimiento de objetos.
  • Funciona mediante el mecanismo unificado VNRequest: solicitudes a una imagen o flujo de video.
  • Se integra con Core ML para modelos personalizados a través de VNCoreMLRequest.
  • El framework está optimizado para Neural Engine en chips A12+ para rendimiento en tiempo real.

¿Qué es Vision en iOS?

Vision es un framework de visión artificial de alto nivel que abstrae algoritmos complejos de aprendizaje automático detrás de una API simple de solicitudes (VNRequest). El desarrollador no necesita entender redes neuronales convolucionales: simplemente crea el tipo de solicitud adecuado, pasa una imagen y obtiene el resultado.

La arquitectura de Vision sigue el principio Solicitud → Manejador → Resultado: VNImageRequestHandler acepta una imagen, ejecuta VNRequest y devuelve un array de VNObservation con los resultados. Esto permite combinar múltiples solicitudes en una sola imagen, por ejemplo, detectar simultáneamente rostros y texto en una foto.

Vision es compatible con iOS 11+ y macOS 10.13+. La aceleración por hardware a través de Neural Engine requiere un chip A12 Bionic o superior. En dispositivos con A17 Pro y la serie M, Vision procesa hasta 60 cuadros por segundo para video en streaming.

Ventaja clave de Vision es la privacidad total: todos los cálculos se realizan en el dispositivo, las imágenes nunca se envían a un servidor. Esto permite utilizar el framework en aplicaciones que manejan datos sensibles, como aplicaciones médicas o bancarias.

Detección y reconocimiento de rostros

VNDetectFaceRectanglesRequest es la solicitud básica de Vision para detectar rostros en una imagen. Devuelve las coordenadas de los rectángulos que delimitan cada rostro, sin identificar a una persona específica.

Para un análisis más detallado, use VNDetectFaceLandmarksRequest, que identifica los puntos clave del rostro: ojos, cejas, nariz, boca, contorno mandibular. Estos datos se utilizan para superponer máscaras, animar emojis y filtros en tiempo real (como en FaceTime y 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 contiene no solo boundingBox, sino también confidence (confianza de 0 a 1) y landmarks, un array de puntos faciales si la solicitud fue VNDetectFaceLandmarksRequest. Una confianza inferior a 0.5 generalmente indica un falso positivo; estos resultados se recomienda descartarlos.

Vision también admite VNDetectFaceCaptureQualityRequest, que evalúa la calidad de la imagen facial: iluminación, nitidez, ángulo de rotación. Esto es útil para seleccionar el mejor cuadro durante el registro de usuario o para crear un avatar.

Reconocimiento de texto (OCR) con Vision

VNRecognizeTextRequest es el motor OCR integrado de Apple, presentado en iOS 13. Reconoce texto impreso en imágenes con soporte para 13 idiomas: inglés, ruso, chino, japonés, coreano, italiano, alemán, español, portugués, francés, árabe, vietnamita y tailandés.

VNRecognizeTextRequest admite dos niveles de precisión: .fast (rápido, para texto simple sobre fondo contrastante) y .accurate (preciso, para escenas complejas con diferentes fuentes y ángulos). .fast es de 3 a 5 veces más rápido, pero maneja menos eficazmente el texto manuscrito y las fuentes no estándar.

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

La propiedad usesLanguageCorrection activa la corrección del texto reconocido mediante un modelo de lenguaje. Esto mejora la precisión para inglés en un 10–15%, pero aumenta el tiempo de procesamiento. La corrección para ruso también está disponible si se especifica el reconocimiento adecuado.

Según Apple ML Research 2022, VNRecognizeTextRequest en nivel .accurate alcanza un 96% de precisión para fotos nítidas de documentos en inglés y aproximadamente un 88% para ruso. Para texto en envases, letreros y pantallas, la precisión disminuye al 75–85%.

Nivel de reconocimientoVelocidadPrecisión (inglés)Soporte ruso
.fast0.1–0.3 s~85%
.accurate0.3–1.0 s~96%

Detección de códigos de barras y QR

VNDetectBarcodesRequest es una solicitud de Vision para detectar y decodificar códigos de barras y códigos QR en imágenes. Se admiten todos los formatos principales: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec y QR.

A diferencia de AVFoundation (AVCaptureMetadataOutput), Vision funciona no solo con flujos de video, sino también con imágenes estáticas, lo que permite escanear códigos desde fotos existentes o capturas de pantalla. Vision también determina el boundingBox del código con precisión de píxel, lo que es conveniente para animar un marco alrededor del 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 contiene payloadStringValue (contenido decodificado), symbology (tipo de código) y confidence. Para códigos QR, el payload puede ser una URL, texto o JSON. Para EAN/UPC, se devuelve un código numérico de producto que se puede usar para buscar el artículo en una base de datos.

Vision puede procesar múltiples códigos de barras en una sola imagen: el array de observations contiene un objeto por cada código detectado. Esto es útil para escanear lotes de productos o documentos con múltiples códigos de barras.

Seguimiento de objetos en flujo de video

VNDetectObjectAtPointRequest y VNSequenceRequestHandler son herramientas de Vision para rastrear objetos en un flujo de video. La primera identifica un objeto por el punto de toque del usuario, la segunda rastrea un objeto entre fotogramas de video.

VNSequenceRequestHandler acepta una secuencia de imágenes (fotogramas de video) y devuelve la posición actualizada del objeto rastreado para cada fotograma. Esto se utiliza en aplicaciones de realidad aumentada, editores de video y sistemas de videovigilancia.

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
    // Actualizar posición del objeto en pantalla
}

VNTrackObjectRequest utiliza un algoritmo de seguimiento basado en flujo óptico: no reentrena el detector en cada fotograma, sino que calcula el desplazamiento del objeto respecto a su posición anterior. Esto permite trabajar en tiempo real incluso en dispositivos sin Neural Engine.

Limitación: el seguimiento puede perder el objeto durante movimientos rápidos, occlusiones o cambios bruscos de iluminación. Apple recomienda reiniciar la detección (VNDetectObjectAtPointRequest) cada 10–15 fotogramas para corregir el seguimiento.

Clasificación de imágenes y análisis de contornos

VNClassifyImageRequest es el modelo integrado de Vision para clasificación de imágenes en 1000 categorías (modelo ResNet-50 entrenado en ImageNet). La solicitud devuelve un array de VNClassificationObservation con el nombre de la categoría y la confianza.

VNDetectContoursRequest realiza análisis de contornos de imágenes: extrae los límites de los objetos, útil para segmentación, delineado y preprocesamiento antes del reconocimiento. La solicitud devuelve un array de puntos que describen cada contorno en la imagen.

swift
import Vision

// Clasificación de imágenes
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 bien para categorías generales (gato, perro, coche, comida), pero no es adecuado para objetos específicos; para estos, se necesita entrenar un modelo Core ML personalizado y usar VNCoreMLRequest. El modelo de Apple está optimizado para dispositivos móviles y ocupa solo 5 MB.

VNDetectContoursRequest devuelve contornos como un array de puntos con el tipo de contorno (externo, interno, agujero). Esta solicitud se utiliza para preprocesar imágenes antes de OCR (mejorar el contraste del texto), para dibujar efectos (delineado de objetos) y para análisis de formas.

Solicitud VisionPropósitoVersión iOS
VNDetectFaceRectanglesRequestDetección de rostros en imágenesiOS 11
VNRecognizeTextRequestReconocimiento de texto (OCR)iOS 13
VNDetectBarcodesRequestDetección de códigos de barras y QRiOS 11
VNClassifyImageRequestClasificación de imágenesiOS 13
VNDetectContoursRequestAnálisis de contornosiOS 14
VNTrackObjectRequestSeguimiento de objetosiOS 11

Preguntas frecuentes

¿Cuál es la diferencia entre Vision y Core ML para visión artificial?

Vision proporciona algoritmos listos para usar (detección de rostros, OCR, códigos de barras) sin necesidad de entrenar modelos. Core ML es el motor para ejecutar modelos personalizados. Vision + VNCoreMLRequest permiten ejecutar modelos Core ML en el pipeline de Vision, obteniendo lo mejor de ambos mundos: detectores listos de Vision + clasificación personalizada de Core ML.

¿Vision funciona en tiempo real en video?

Sí, Vision admite procesamiento de flujo de video en tiempo real a través de VNSequenceRequestHandler para seguimiento y AVCaptureVideoDataOutput para procesamiento fotograma a fotograma. En dispositivos con A12+ y Neural Engine, Vision procesa hasta 60 fps para detección de rostros. Para tareas pesadas (OCR, clasificación), se recomienda procesar cada 5–10 fotograma.

¿Qué idiomas admite VNRecognizeTextRequest?

VNRecognizeTextRequest admite 13 idiomas: inglés, ruso, chino (simplificado y tradicional), japonés, coreano, italiano, alemán, español, portugués, francés, árabe, vietnamita y tailandés. Para reconocer múltiples idiomas en una sola imagen, especifique un array en la propiedad recognitionLanguages.

¿Se puede usar Vision con un modelo de Core ML?

Sí, a través de VNCoreMLRequest. Crea un modelo Core ML envuelto en VNCoreMLModel y lo pasa a VNCoreMLRequest. Vision maneja automáticamente el preprocesamiento de la imagen (escalado, recorte) y lo alimenta al modelo Core ML. El resultado se devuelve como VNCoreMLFeatureValueObservation con los datos de salida del modelo.

¿Vision envía imágenes al servidor de Apple?

No, Vision realiza todo el análisis completamente en el dispositivo. Las imágenes nunca salen del dispositivo del usuario. Esta es la arquitectura fundamental de Apple: todos los frameworks de ML (Vision, NaturalLanguage, Core ML, Speech) funcionan en el dispositivo para garantizar la privacidad. No se envían datos a los servidores de Apple.

Resumen

  • Vision — framework de visión artificial de Apple con API basada en VNRequest, disponible desde iOS 11 en todos los dispositivos Apple.
  • VNDetectFaceRectanglesRequest y VNDetectFaceLandmarksRequest detectan rostros y puntos clave para filtros, máscaras y animaciones.
  • VNRecognizeTextRequest — OCR integrado para 13 idiomas con niveles .fast y .accurate, con precisión de hasta 96% para documentos.
  • VNDetectBarcodesRequest decodifica todos los formatos populares de códigos de barras y QR tanto en fotos como en flujos de video.
  • VNTrackObjectRequest rastrea objetos entre fotogramas de video mediante flujo óptico sin reentrenar el detector.
  • Integración con Core ML a través de VNCoreMLRequest permite ejecutar modelos personalizados de clasificación y detección dentro del pipeline de Vision.
  • Todos los cálculos se realizan en el dispositivo usando Neural Engine — sin envío de imágenes a servidores y privacidad total de datos.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también