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 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. VNRequest 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 es un alias de tipo. VNRequestCompletionHandler public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void Que devuelve un 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. VNRequest La clase de la clase abstracta está diseñada para manejar solicitudes de reconocimiento de texto en imágenes. VNRecognizeTextRequest VNRequest 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 } Cree una para el reconocimiento de texto. VNRecognizeTextRequest Reciba los resultados de la solicitud de reconocimiento de texto como matrices de objetos VNRecognizedTextObservation. El objeto contiene: VNRecognizedTextObservation Una matriz de textos reconocidos (V ) NRecognizedText().string Precisión de reconocimiento ( ) VNRecognizedText().confidence Coordenadas del texto reconocido en la imagen ( ) VNRecognizedText().boundingBox Cree una solicitud de procesamiento de imágenes y envíe una solicitud de reconocimiento de texto. Reconocimiento del número de identificación fiscal y del número de pasaporte al desarrollar su propio SDK para el reconocimiento de documentos Ejemplo: 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 } Cree una para el reconocimiento facial en una imagen. VNDetectFaceRectanglesRequest Reciba los resultados de la solicitud de reconocimiento de texto como matrices de objetos . VNFaceObservation El objeto contiene: VNFaceObservation Coordenadas de la cara reconocida VNFaceObservation().boundingBox. Cree una solicitud de procesamiento de imágenes y envíe una solicitud de reconocimiento facial. 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. Ejemplo: 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 } Cree una para reconocimiento. VNDetectBarcodesRequest Obtenga los resultados de la solicitud de matriz de objetos . VNBarcodeObservation El objeto contiene muchas propiedades, entre ellas: VNBarcodeObservation : el valor de la cadena del código de barras o código QR. VNFaceObservation().payloadStringValue Cree una solicitud de procesamiento de imágenes y envíe una solicitud de reconocimiento facial. escáner QR para leer códigos QR para pago. Ejemplo: Hemos cubierto los tres tipos principales de consultas en Vision para ayudarlo a comenzar a utilizar esta poderosa herramienta.