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:
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:
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.
Vision té una classe abstracta VNRequest 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.
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 VNRequestCompletionHandler és un àlies de tipus.
public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void
Que retorna una VNRequest 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.
La classe VNRecognizeTextRequest de la classe abstracta VNRequest està dissenyada per gestionar sol·licituds de reconeixement de text en imatges.
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 VNRecognizeTextRequest per al reconeixement de text.
Rebeu els resultats de la sol·licitud de reconeixement de text com a matrius d'objectes VNRecognizedTextObservation.
L'objecte VNRecognizedTextObservation conté:
Creeu una sol·licitud de processament d'imatges i envieu una sol·licitud de reconeixement de text.
Exemple: reconeixement del número d'identificació fiscal i del número de passaport en desenvolupar el vostre propi SDK per al reconeixement de documents
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 VNDetectFaceRectangles per al reconeixement facial en una imatge.
Rebeu els resultats de la sol·licitud de reconeixement de text com a matrius d'objectes VNFaceObservation .
L'objecte VNFaceObservation conté:
Coordenades de la cara reconeguda VNFaceObservation().boundingBox.
Creeu una sol·licitud de processament d'imatges i envieu una sol·licitud de reconeixement facial.
Exemple: 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.
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 VNBarcodeObservation conté moltes propietats, com ara:
VNFaceObservation().payloadStringValue : el valor de cadena del codi de barres o QR.
Creeu una sol·licitud de processament d'imatges i envieu una sol·licitud de reconeixement facial.
Exemple: escàner QR per llegir codis QR per pagar.
Hem cobert els 3 tipus principals de consultes a Vision per ajudar-vos a començar amb aquesta potent eina.