paint-brush
Introducción al marco de trabajo Vision de Apple: la perspectiva de un desarrolladorpor@threadmaster
Nueva Historia

Introducción al marco de trabajo Vision de Apple: la perspectiva de un desarrollador

por Boris Dobretsov5m2025/02/19
Read on Terminal Reader

Demasiado Largo; Para Leer

El marco Vision de Apple se introdujo en iOS 11. Permite a los desarrolladores analizar contenido visual y realizar el procesamiento posterior según sea necesario. En este artículo, analizaremos los principales escenarios de uso de Vision con ejemplos de código.
featured image - Introducción al marco de trabajo Vision de Apple: la perspectiva de un desarrollador
Boris Dobretsov HackerNoon profile picture
0-item
1-item

El marco Vision fue presentado por Apple en 2017 en la WWDC como parte de iOS 11. Su lanzamiento marcó un punto de inflexión en la evolución de la visión artificial y el análisis de imágenes, proporcionando a los desarrolladores herramientas nativas para analizar contenido visual y realizar el procesamiento posterior según sea necesario.


En 2017, Vision presentó:

  • Reconocimiento de texto
  • Reconocimiento facial
  • Detección de formas rectangulares
  • Reconocimiento de códigos de barras y códigos QR


Desde su debut, Apple ha mejorado continuamente el marco Vision, asegurándose de que evoluciona para cumplir con los requisitos modernos. Para fines de 2024, con el lanzamiento de iOS 18, Vision ahora ofrece:

  • Precisión de reconocimiento de texto mejorada con soporte para una gran cantidad de idiomas
  • Detección de rostros y sus rasgos
  • La capacidad de analizar movimientos.
  • La capacidad de reconocer poses, incluida la posición de las manos y los puntos clave del cuerpo humano.
  • Soporte para seguimiento de objetos en vídeo
  • Integración mejorada con CoreML para trabajar con modelos de aprendizaje automático personalizados
  • Integración profunda con marcos relacionados, como AVKit, ARKit


Con la llegada del marco Vision, los desarrolladores obtuvieron la capacidad de realizar tareas avanzadas de análisis de imágenes y videos de forma nativa, sin depender de soluciones de terceros. Estas capacidades incluyen escanear documentos, reconocer texto, identificar rostros y poses, detectar imágenes duplicadas y automatizar varios procesos que agilizan las operaciones comerciales.


En este artículo, veremos los principales escenarios de uso de Vision con ejemplos de código que te ayudarán a comprender cómo trabajar con él, comprender que no es difícil y comenzar a aplicarlo en la práctica en tus aplicaciones.

Solicitud VN

Vision tiene una clase abstracta VNRequest que define estructuras de solicitud de datos en Vision, y las clases descendientes implementan solicitudes específicas para realizar tareas específicas con una imagen.


Todas las subclases heredan el inicializador de la clase VNRequest .

 public init(completionHandler: VNRequestCompletionHandler? = nil)

Que retorna el resultado del procesamiento de la solicitud. Es importante aclarar que el resultado de la solicitud será retornado en la misma cola en la que se envió la solicitud.


Donde VNRequestCompletionHandler es un alias de tipo.

 public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void

Que devuelve un VNRequest con los resultados de la solicitud o un Error si la solicitud no se ejecutó debido a algún error del sistema, imagen incorrecta, etc.


La clase VNRecognizeTextRequest de la clase abstracta VNRequest está diseñada para manejar solicitudes de reconocimiento de texto en imágenes.


Ejemplo de implementación de una solicitud de reconocimiento de texto:

 import Vision import UIKit func recognizeText(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNRecognizeTextRequest { request, error in // 1 guard let observations = request.results as? [VNRecognizedTextObservation] else { return } // 2 for observation in observations { if let topCandidate = observation.topCandidates(1).first { print("Recognized text: \(topCandidate.string)") print("Text boundingBox: \(observation.boundingBox)") print("Accuracy: \(topCandidate.confidence)") } } } request.recognitionLevel = .accurate request.usesLanguageCorrection = true let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 }


  1. Cree una VNRecognizeTextRequest para el reconocimiento de texto.


  2. Reciba los resultados de la solicitud de reconocimiento de texto como matrices de objetos VNRecognizedTextObservation.


El objeto VNRecognizedTextObservation contiene:

  • Una matriz de textos reconocidos (V NRecognizedText().string )
  • Precisión de reconocimiento ( VNRecognizedText().confidence )
  • Coordenadas del texto reconocido en la imagen ( VNRecognizedText().boundingBox )


  1. Cree una solicitud de procesamiento de imágenes y envíe una solicitud de reconocimiento de texto.


  2. Ejemplo: Reconocimiento del número de identificación fiscal y del número de pasaporte al desarrollar su propio SDK para el reconocimiento de documentos

Solicitud de rectángulos faciales de VNDetect

Esta clase encuentra caras en una imagen y devuelve sus coordenadas.


Ejemplo de implementación de una solicitud de reconocimiento facial:

 import Vision import UIKit func detectFaces(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNDetectFaceRectanglesRequest { request, error in // 1 guard let results = request.results as? [VNFaceObservation] else { return } // 2 for face in results { print("Face detected: \(face.boundingBox)") } } let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 }


  1. Cree una VNDetectFaceRectanglesRequest para el reconocimiento facial en una imagen.


  2. Reciba los resultados de la solicitud de reconocimiento de texto como matrices de objetos VNFaceObservation .


El objeto VNFaceObservation contiene:

  1. Coordenadas de la cara reconocida VNFaceObservation().boundingBox.


  2. Cree una solicitud de procesamiento de imágenes y envíe una solicitud de reconocimiento facial.


  3. Ejemplo: En los bancos existe un onboarding KYC donde debes tomarte una foto con tu pasaporte; de esta manera, puedes confirmar que ese es el rostro de una persona real.


Solicitud de códigos de barras VNDetect

Esta clase reconoce y lee códigos de barras y códigos QR de una imagen.


Ejemplo de implementación de una solicitud de reconocimiento y lectura de un código de barras y un código QR:

 import Vision import UIKit func detectBarcodes(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNDetectBarcodesRequest { request, error in // 1 guard let results = request.results as? [VNBarcodeObservation] else { return } // 2 for qrcode in results { print("qr code was found: \(qrcode.payloadStringValue ?? "not data")") } } let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 }


  1. Cree una VNDetectBarcodesRequest para reconocimiento.


  2. Obtenga los resultados de la solicitud de matriz de objetos VNBarcodeObservation .


El objeto VNBarcodeObservation contiene muchas propiedades, entre ellas:

  1. VNFaceObservation().payloadStringValue : el valor de la cadena del código de barras o código QR.


  2. Cree una solicitud de procesamiento de imágenes y envíe una solicitud de reconocimiento facial.


  3. Ejemplo: escáner QR para leer códigos QR para pago.


Hemos cubierto los tres tipos principales de consultas en Vision para ayudarlo a comenzar a utilizar esta poderosa herramienta.