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:
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:
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.
Vision har en abstrakt klass VNRequest 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.
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 VNRequestCompletionHandler är ett typalias.
public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void
Vilket returnerar en VNRequest med resultatet av begäran eller ett Error om begäran inte exekveras på grund av något systemfel, felaktig bild, etc.
Klassen VNRecognizeTextRequest från den abstrakta klassen VNRequest är designad för att hantera textigenkänningsförfrågningar i bilder.
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 VNRecognizeTextRequest för textigenkänning.
Ta emot resultaten av begäran om textigenkänning som arrayer av VNRecognizedTextObservation-objekt.
VNRecognizedTextObservation -objektet innehåller:
Skapa en begäran om bildbehandling och skicka en begäran om textigenkänning.
Exempel: Erkännande av skatteregistreringsnummer och passnummer när du utvecklar ditt eget SDK för dokumentigenkänning
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 VNDetectFaceRectanglesRequest för ansiktsigenkänning i en bild.
Ta emot resultaten av textigenkänningsbegäran som arrayer av VNFaceObservation- objekt.
VNFaceObservation -objektet innehåller:
Koordinater för det igenkända ansiktet VNFaceObservation().boundingBox.
Skapa en begäran om bildbehandling och skicka en begäran om ansiktsigenkänning.
Exempel: 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.
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 VNDetectBarcodesRequest för erkännande.
Få resultaten av VNBarcodeObservation- objektmatrisbegäran.
VNBarcodeObservation -objektet innehåller många egenskaper, inklusive:
VNFaceObservation().payloadStringValue - strängvärdet för streckkoden eller QR-koden.
Skapa en begäran om bildbehandling och skicka en begäran om ansiktsigenkänning.
Exempel: QR-skanner för att läsa QR-koder för betalning.
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.