paint-brush
Komma igång med Apples Vision Framework: A Developer's Perspective förbi@threadmaster
Ny historia

Komma igång med Apples Vision Framework: A Developer's Perspective

förbi Boris Dobretsov5m2025/02/19
Read on Terminal Reader

För länge; Att läsa

Apples Vision-ramverk introducerades i iOS 11. Det låter utvecklare analysera visuellt innehåll och utföra efterföljande bearbetning efter behov. I den här artikeln kommer vi att titta på huvudscenarierna för att använda Vision med kodexempel.
featured image - Komma igång med Apples Vision Framework: A Developer's Perspective
Boris Dobretsov HackerNoon profile picture
0-item
1-item

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 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 }


  1. Skapa en VNRecognizeTextRequest för textigenkänning.


  2. Ta emot resultaten av begäran om textigenkänning som arrayer av VNRecognizedTextObservation-objekt.


VNRecognizedTextObservation -objektet innehåller:

  • 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 )


  1. Skapa en begäran om bildbehandling och skicka en begäran om textigenkänning.


  2. Exempel: Erkännande av skatteregistreringsnummer och passnummer när du utvecklar ditt eget SDK för dokumentigenkänning

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 }


  1. Skapa en VNDetectFaceRectanglesRequest för ansiktsigenkänning i en bild.


  2. Ta emot resultaten av textigenkänningsbegäran som arrayer av VNFaceObservation- objekt.


VNFaceObservation -objektet innehåller:

  1. Koordinater för det igenkända ansiktet VNFaceObservation().boundingBox.


  2. Skapa en begäran om bildbehandling och skicka en begäran om ansiktsigenkänning.


  3. 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.


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 }


  1. Skapa en VNDetectBarcodesRequest för erkännande.


  2. Få resultaten av VNBarcodeObservation- objektmatrisbegäran.


VNBarcodeObservation -objektet innehåller många egenskaper, inklusive:

  1. VNFaceObservation().payloadStringValue - strängvärdet för streckkoden eller QR-koden.


  2. Skapa en begäran om bildbehandling och skicka en begäran om ansiktsigenkänning.


  3. 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.