El marc Vision va ser introduït per Apple el 2017 a la WWDC com a part d'iOS 11. El seu llançament va marcar un punt d'inflexió en l'evolució de la visió artificial i l'anàlisi d'imatges, proporcionant als desenvolupadors eines natives per analitzar el contingut visual i realitzar el processament posterior segons sigui necessari. El 2017, Vision va presentar: Reconeixement de textos Reconeixement facial Detecció de formes rectangulars Reconeixement de codis de barres i codis QR Des del seu debut, Apple ha millorat contínuament el marc de Vision, assegurant-se que evoluciona per satisfer els requisits moderns. A finals de 2024, amb el llançament d'iOS 18, Vision ara ofereix: Precisió de reconeixement de text millorada amb suport per a un gran nombre d'idiomes Detecció de cares i els seus trets Capacitat d'anàlisi dels moviments La capacitat de reconèixer posicions, inclosa la posició de les mans i els punts clau del cos humà Suport per al seguiment d'objectes en vídeo Integració millorada amb CoreML per treballar amb models d'aprenentatge automàtic personalitzats Integració profunda amb marcs relacionats, com AVKit, ARKit Amb l'arribada del marc Vision, els desenvolupadors van obtenir la capacitat de realitzar tasques avançades d'anàlisi d'imatges i vídeos de manera nativa, sense dependre de solucions de tercers. Aquestes capacitats inclouen escanejar documents, reconèixer text, identificar cares i postures, detectar imatges duplicades i automatitzar diversos processos que agilitzen les operacions empresarials. En aquest article, veurem els principals escenaris d'ús de Vision amb exemples de codi que us ajudaran a entendre com treballar-hi, entendre que no és difícil i començar a aplicar-lo a la pràctica a les vostres aplicacions. VNRequest Vision té una classe abstracta que defineix estructures de sol·licitud de dades a Vision, i les classes descendents implementen peticions específiques per realitzar tasques específiques amb una imatge. VNRequest Totes les subclasses hereten l'inicialitzador de la classe . VNRequest public init(completionHandler: VNRequestCompletionHandler? = nil) Que retorna el resultat de la tramitació de la sol·licitud. És important aclarir que el resultat de la sol·licitud es retornarà a la mateixa cua en què es va enviar la sol·licitud. On és un àlies de tipus. VNRequestCompletionHandler public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void Que retorna una amb els resultats de la sol·licitud o un Error si la sol·licitud no s'ha executat a causa d'algun error del sistema, imatge incorrecta, etc. VNRequest La classe de la classe abstracta està dissenyada per gestionar sol·licituds de reconeixement de text en imatges. VNRecognizeTextRequest VNRequest Exemple d'implementació d'una sol·licitud de reconeixement de text: 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 } Creeu una per al reconeixement de text. VNRecognizeTextRequest Rebeu els resultats de la sol·licitud de reconeixement de text com a matrius d'objectes VNRecognizedTextObservation. L'objecte conté: VNRecognizedTextObservation Una matriu de textos reconeguts (V ) NRecognizedText().string Precisió de reconeixement ( ) VNRecognizedText().confidence Coordenades del text reconegut a la imatge ( ) VNRecognizedText().boundingBox Creeu una sol·licitud de processament d'imatges i envieu una sol·licitud de reconeixement de text. reconeixement del número d'identificació fiscal i del número de passaport en desenvolupar el vostre propi SDK per al reconeixement de documents Exemple: VNDetectFaceRectanglesRequest Aquesta classe troba cares en una imatge i en retorna les coordenades. Exemple d'implementació d'una sol·licitud de reconeixement 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 } Creeu una sol·licitud per al reconeixement facial en una imatge. VNDetectFaceRectangles Rebeu els resultats de la sol·licitud de reconeixement de text com a matrius d'objectes . VNFaceObservation L'objecte conté: VNFaceObservation Coordenades de la cara reconeguda VNFaceObservation().boundingBox. Creeu una sol·licitud de processament d'imatges i envieu una sol·licitud de reconeixement facial. Als bancs, hi ha un KYC onboarding on cal fer una foto amb el passaport; d'aquesta manera, pots confirmar que aquesta és la cara d'una persona real. Exemple: VNDectBarcodesRequest Aquesta classe reconeix i llegeix codis de barres i codis QR d'una imatge. Exemple d'implementació d'una sol·licitud per reconèixer i llegir un codi de barres i un codi 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 } Creeu una sol·licitud de reconeixement . VNDetectBarcodes Obteniu els resultats de la sol·licitud de matriu d'objectes . VNBarcodeObservation L'objecte conté moltes propietats, com ara: VNBarcodeObservation : el valor de cadena del codi de barres o QR. VNFaceObservation().payloadStringValue Creeu una sol·licitud de processament d'imatges i envieu una sol·licitud de reconeixement facial. escàner QR per llegir codis QR per pagar. Exemple: Hem cobert els 3 tipus principals de consultes a Vision per ajudar-vos a començar amb aquesta potent eina.