Ramverket Vision introducerades av Apple 2017 på WWDC som en del av iOS 11. Lanseringen markerade en vändpunkt i utvecklingen av maskinseende och bildanalys, vilket ger utvecklare inbyggda verktyg för att analysera visuellt innehåll och utföra efterföljande bearbetning efter behov. Under 2017 introducerade Vision: Textigenkänning Ansiktsigenkänning Detektering av rektangulära former Streckkod och QR-kodigenkänning Sedan debuten har Apple kontinuerligt förbättrat Vision-ramverket, vilket säkerställer att det utvecklas för att möta moderna krav. I slutet av 2024, med lanseringen av iOS 18, erbjuder Vision nu: Förbättrad textigenkänningsnoggrannhet med stöd för ett stort antal språk Detektering av ansikten och deras egenskaper Förmågan att analysera rörelser Förmågan att känna igen poser, inklusive händernas position och nyckelpunkter i människokroppen Stöd för att spåra objekt i video Förbättrad integration med CoreML för att arbeta med anpassade maskininlärningsmodeller Djup integration med relaterade ramverk, såsom AVKit, ARKit Med tillkomsten av Vision-ramverket fick utvecklare möjligheten att utföra avancerade bild- och videoanalysuppgifter inbyggt, utan att förlita sig på tredjepartslösningar. Dessa funktioner inkluderar att skanna dokument, känna igen text, identifiera ansikten och poser, upptäcka dubbletter av bilder och automatisera olika processer som effektiviserar affärsverksamheten. I den här artikeln kommer vi att titta på huvudscenarierna för att använda Vision med kodexempel som hjälper dig att förstå hur du arbetar med det, förstå att det inte är svårt och börja tillämpa det i praktiken i dina applikationer. VNRequest Vision har en abstrakt klass som definierar strukturer för dataförfrågningar i Vision, och efterkommande klasser implementerar specifika förfrågningar för att utföra specifika uppgifter med en bild. VNRequest Alla underklasser ärver initialiseraren från klassen . VNRequest public init(completionHandler: VNRequestCompletionHandler? = nil) Vilket returnerar resultatet av behandlingen av begäran. Det är viktigt att förtydliga att resultatet av förfrågan kommer att returneras i samma kö som förfrågan skickades i. Där är ett typalias. VNRequestCompletionHandler public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void Vilket returnerar en med resultatet av begäran eller ett Error om begäran inte exekveras på grund av något systemfel, felaktig bild, etc. VNRequest Klassen från den abstrakta klassen är designad för att hantera textigenkänningsförfrågningar i bilder. VNRecognizeTextRequest VNRequest Exempel på implementering av en begäran om textigenkänning: 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 } Skapa en för textigenkänning. VNRecognizeTextRequest Ta emot resultaten av begäran om textigenkänning som arrayer av VNRecognizedTextObservation-objekt. -objektet innehåller: VNRecognizedTextObservation En uppsättning av igenkända texter (V ) NRecognizedText().string Igenkänningsnoggrannhet ( ) VNRecognizedText().confidence Koordinater för den igenkända texten på bilden ( ) VNRecognizedText().boundingBox Skapa en begäran om bildbehandling och skicka en begäran om textigenkänning. Erkännande av skatteregistreringsnummer och passnummer när du utvecklar ditt eget SDK för dokumentigenkänning Exempel: VNDetectFaceRectanglesRequest Den här klassen hittar ansikten i en bild och returnerar deras koordinater. Exempel på implementering av en begäran om ansiktsigenkänning: 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 } Skapa en för ansiktsigenkänning i en bild. VNDetectFaceRectanglesRequest Ta emot resultaten av textigenkänningsbegäran som arrayer av objekt. VNFaceObservation- -objektet innehåller: VNFaceObservation Koordinater för det igenkända ansiktet VNFaceObservation().boundingBox. Skapa en begäran om bildbehandling och skicka en begäran om ansiktsigenkänning. I banker finns det en KYC onboarding där du måste ta ett foto med ditt pass; på så sätt kan du bekräfta att detta är ansiktet på en riktig person. Exempel: VNDetectBarcodesRequest Den här klassen känner igen och läser streckkoder och QR-koder från en bild. Exempel på implementering av en begäran för att känna igen och läsa en streckkod och QR-kod: 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 } Skapa en för erkännande. VNDetectBarcodesRequest Få resultaten av objektmatrisbegäran. VNBarcodeObservation- -objektet innehåller många egenskaper, inklusive: VNBarcodeObservation - strängvärdet för streckkoden eller QR-koden. VNFaceObservation().payloadStringValue Skapa en begäran om bildbehandling och skicka en begäran om ansiktsigenkänning. QR-skanner för att läsa QR-koder för betalning. Exempel: Vi har täckt de tre huvudtyperna av frågor i Vision för att hjälpa dig komma igång med detta kraftfulla verktyg.