01/03/2023
Introduktion til Apples Vision Framework
I en verden, hvor mobilapplikationer i stigende grad udnytter avancerede teknologier til at tilbyde innovative brugeroplevelser, står computervision som en af de mest spændende og hurtigst voksende grene. Apple anerkendte dette potentiale tidligt og har investeret betydeligt i at bringe kraftfulde computervisionsværktøjer direkte til udvikleres hænder via deres iOS-platform. Kernen i denne indsats er Apples Vision Framework, en banebrydende teknologi designet til at forenkle og optimere implementeringen af computervisionsopgaver i iOS, macOS, watchOS og tvOS-apps. Dette framework giver udviklere adgang til et bredt spektrum af avancerede algoritmer, der spænder fra simpel billedanalyse til kompleks objektgenkendelse og ansigtssporing, alt sammen optimeret til at køre effektivt på enheden.

Med Vision Framework kan udviklere nu nemt integrere funktioner, der tidligere krævede dybtgående viden om maskinlæring og computer vision, samt betydelige ressourcer til serverbaseret behandling. Apples tilgang fokuserer på at levere høj ydeevne, bevare brugerens privatliv ved at behandle data lokalt på enheden og tilbyde en brugervenlig API, der minimerer den nødvendige kode og kompleksitet. Dette gør det muligt for selv mindre teams eller individuelle udviklere at skabe applikationer med avancerede visuelle intelligensfunktioner, der kan konkurrere med de bedste på markedet.
Denne artikel vil dykke ned i, hvad Vision Framework er, dets kernefunktioner, og hvordan det kan bruges til at implementere avancerede computervisionsfunktioner i dine iOS-apps. Vi vil udforske, hvordan man opsætter et projekt, integrerer kamerafunktioner, anvender Vision Framework til realtidsdetektion, bygger en intuitiv brugergrænseflade med SwiftUI og optimerer ydeevnen for en problemfri brugeroplevelse. Gør dig klar til at tage dine iOS-apps til det næste niveau med kraften fra Apple's Vision Framework.
Hvad er Apples Vision Framework?
Apples Vision Framework er en omfattende og højtydende billedanalyse-API, der giver udviklere mulighed for at integrere en bred vifte af computervisionsfunktioner i deres applikationer. Frameworket er bygget oven på Apples Core ML-teknologi, hvilket muliggør effektiv brug af maskinlæringsmodeller på enheden, men tilbyder også en række præ-trænede modeller og algoritmer, der kan bruges direkte uden behov for at træne egne modeller. Vision Framework abstraherer kompleksiteten ved at arbejde med billeddata og maskinlæringsmodeller, hvilket gør det lettere for udviklere at fokusere på at skabe innovative brugeroplevelser.
Før Vision Framework blev introduceret, var mange avancerede computervisionsopgaver, såsom ansigtsgenkendelse og objektsporing, enten begrænset til specifikke platforme (som Core Image's CIDetector) eller krævede omfattende brug af cloud-baserede API'er, hvilket rejste bekymringer om privatlivets fred og øgede latens. Apples vision var at bringe disse avancerede funktioner direkte til enheden, hvilket sikrer hurtigere behandlingstider, lavere omkostninger og vigtigst af alt, bevarer brugerens data privat. Dette er især vigtigt i en tid, hvor databeskyttelse er en topprioritet for forbrugere.
Vision Framework er designet til at være fleksibelt og alsidigt. Det kan arbejde med forskellige billedkilder, herunder billeder fra kameraet, videofiler eller statiske billeder gemt på enheden. Det understøtter også en bred vifte af billedformater og farverum, og frameworket håndterer automatisk de nødvendige konverteringer og optimeringer, så udviklere ikke behøver at bekymre sig om disse detaljer. Dette gør det muligt at opnå state-of-the-art nøjagtighed og ydeevne på tværs af en bred vifte af enheder.

Kernefunktioner i Vision Framework
Vision Framework tilbyder en imponerende række af funktioner, der dækker de mest almindelige og efterspurgte computervisionsopgaver. Disse funktioner er organiseret i forskellige typer af anmodninger (requests), som udviklere kan instantiere og udføre på billeddata. Nogle af de mest fremtrædende funktioner inkluderer:
- Objektdetektion og -sporing: Vision Framework kan identificere og lokalisere objekter i et billede. Dette inkluderer genkendelse af almindelige objekter som biler, dyr, møbler og meget mere ved hjælp af præ-trænede modeller. Det understøtter også sporing af objekter over flere billedframes i en videostrøm.
- Ansigtsdetektion og -genkendelse: Frameworket kan finde ansigter i billeder, identificere ansigtslandemærker (som øjne, næse, mund) og endda genkende specifikke individer, hvis der er tilgængelige referencemodeller. Dette er en væsentlig forbedring i forhold til tidligere API'er, da det udnytter avancerede deep learning-modeller.
- Tekstgenkendelse (OCR): Vision kan udtrække tekst fra billeder, hvilket er yderst nyttigt til applikationer som scanning af dokumenter, genkendelse af nummerplader eller oversættelse af skilte i realtid.
- Stregekodegendkendelse: Frameworket kan detektere og afkode forskellige typer af stregkoder, herunder QR-koder, hvilket er ideelt til e-handel, logistik eller informationshentning.
- Billedregistrering (Image Registration): Dette muliggør sammenligning og justering af billeder, hvilket er nyttigt for opgaver som at skabe panoramer eller stabilisere video.
- Ansigtslandemærkedetektion: Ud over blot at finde et ansigt kan Vision Framework identificere nøglepunkter på ansigtet, såsom placeringen af øjne, næse, mund og kæbelinje. Dette kan bruges til at animere ansigter, anvende filtre eller analysere udtryk.
Disse funktioner er implementeret som VNRequest-objekter, der kan konfigureres og sendes til en VNImageRequestHandler for behandling. Udviklere kan også oprette brugerdefinerede anmodninger baseret på deres egne Core ML-modeller, hvilket giver en enorm fleksibilitet til at tackle specifikke behov.
Implementering af Realtidsdetektion med Vision og SwiftUI
Lad os se på, hvordan man kan implementere en realtids objektdetektionsapplikation ved hjælp af Vision Framework og SwiftUI, som demonstreret i den medfølgende artikel. Denne proces involverer flere nøglekomponenter:
1. Projektopsætning
Først oprettes et nyt SwiftUI-projekt. Det er essentielt at tilføje de nødvendige privatlivsbeskrivelser i appens Info.plist fil for at få adgang til kameraet. Specifikt skal nøglen NSCameraUsageDescription med en forklarende streng tilføjes, f.eks. "Vi har brug for kameratilladelse til realtids objektdetektion".
2. Kameraopsætning med AVFoundation
For at få adgang til kameraets videostrøm bruges AVFoundation-frameworket. En CameraManager klasse, der er en ObservableObject, kan håndtere opsætning af AVCaptureSession, tilføjelse af input (kamera) og output (video data). En AVCaptureVideoDataOutput bruges til at modtage billedframes, og en AVCaptureVideoPreviewLayer viser kameraets feed. En dedikeret kø (DispatchQueue) bruges til at behandle kameraets output asynkront for at undgå at blokere hovedtråden.
Det er vigtigt at implementere AVCaptureVideoDataOutputSampleBufferDelegate protokollen for at modtage billedframes. I metoden captureOutput(_:didOutput:from:) konverteres den modtagne CMSampleBuffer til en CVPixelBuffer, som derefter sendes til Vision Framework for analyse.
3. Implementering af Vision Framework
En ObjectDetector klasse kan håndtere Vision Framework-anmodninger. Den initialiseres med en VNCoreMLModel, der indlæses fra en Core ML-model fil (f.eks. "YOLOv3.mlmodelc"). En VNCoreMLRequest oprettes for objektdetektion. Når en detektion er fuldført, behandles resultaterne (typisk VNRecognizedObjectObservation objekter), der indeholder information om detekterede objekters labels, konfidensscorer og bounding boxes.
Disse resultater kan derefter postes via NotificationCenter eller andre state management-mekanismer til SwiftUI-viewet for at blive vist på skærmen. For at udføre detektionen på en CVPixelBuffer bruges en VNImageRequestHandler.

4. Bygning af SwiftUI-interface
I ContentView bruges @StateObject til at initialisere CameraManager. En ZStack bruges til at overlappe kameraets preview med detekterede objekters visuelle repræsentationer. En CameraPreviewView (en UIViewRepresentable) bruges til at vise AVCaptureVideoPreviewLayer.
De detekterede objekter vises ved hjælp af en ForEach-løkke, der itererer over en liste af DetectedObject (en brugerdefineret struct med label, konfidens og bounding box). Hvert objekt vises med en BoundingBoxView, der tegner en rektangel omkring objektet og viser dets label og konfidensscore. Det er vigtigt at mappe Vision Frameworks bounding box-koordinater (normaliseret til billedets dimensioner) til SwiftUI's coordinate system og den faktiske visningsstørrelse.
5. Håndtering af Realtidsdetektion
CameraManager modtager billedframes fra kameraet og sender dem til ObjectDetector. Når ObjectDetector returnerer resultaterne, opdateres en `@State` variabel i ContentView, der indeholder listen over detekterede objekter. Dette udløser en genoptegning af SwiftUI-viewet, der viser de nye bounding boxes.
Performanceoptimering
For at sikre en flydende realtidsoplevelse er performanceoptimering afgørende. Nogle strategier inkluderer:
- Buffer Processing: Ved at sætte
sessionPresettil en medium kvalitet og aktiverealwaysDiscardsLateVideoFramespåAVCaptureVideoDataOutput, kan man reducere behandlingsbyrden. - Batch Processing: Brug af en dedikeret kø (
processingQueue) til at udføre detektionsanmodninger asynkront forhindrer blokering af hovedtråden. - Frame Dropping: Implementer logik til at droppe frames, hvis behandlingen ikke kan følge med, for at opretholde en responsiv brugergrænseflade.
- Modeloptimering: Vælg eller træn Core ML-modeller, der er optimeret til mobilbrug, med fokus på balance mellem nøjagtighed og ydeevne.
Bedste Praksis og Tips
Ved udvikling med Vision Framework er det godt at følge disse retningslinjer:
- Hukommelseshåndtering: Frigør kameraressourcer, når appen går i baggrunden, og implementer korrekt oprydning i
deinit. - Fejlhåndtering: Implementer robust fejlhåndtering for scenarier som kameraopsætningsfejl, fejl ved indlæsning af modeller eller detektionsfejl. Brug enums til at definere specifikke fejltyper.
- UI-opdateringer: Brug SwiftUI's state management til at sikre glatte UI-opdateringer. Vis loading states og fejlmeddelelser for at forbedre brugeroplevelsen.
- Farverums-matching: Vision Framework håndterer automatisk farverums-matching, hvilket letter udviklingsprocessen betydeligt, da man ikke behøver at bekymre sig om manuel konvertering.
- Effektiv billedbehandling: Udnyt teknikker som delvis subsampling og automatisk tiling til at behandle store billeder effektivt, især for kamerafeeds eller store billedfiler.
Sammenfatning
Apples Vision Framework er et kraftfuldt værktøj, der demokratiserer adgangen til avancerede computervisionsfunktioner for iOS-udviklere. Ved at kombinere Vision Framework med SwiftUI kan man nemt bygge applikationer, der kan analysere billeder og video i realtid, identificere objekter, ansigter og tekst, alt sammen med fokus på ydeevne og privatlivets fred. Frameworkets fleksibilitet, de indbyggede optimeringer og den relativt enkle API gør det til et uundværligt værktøj for enhver iOS-udvikler, der ønsker at integrere visuel intelligens i deres applikationer.
Udforskning af Vision Framework åbner døren til et væld af muligheder, fra at skabe mere interaktive augmented reality-oplevelser til at forbedre tilgængeligheden for brugere med synshandicap. Med muligheden for at integrere brugerdefinerede Core ML-modeller kan grænserne for, hvad der er muligt, udvides yderligere. Vision Framework er ikke bare et bibliotek; det er en invitation til at innovere og skabe fremtidens intelligente applikationer.

Ofte Stillede Spørgsmål (FAQ)
Hvad er forskellen mellem Vision Framework og Core ML?
Core ML er Apples framework til at integrere maskinlæringsmodeller i apps, herunder modeller trænet med forskellige frameworks som TensorFlow eller PyTorch. Vision Framework bygger oven på Core ML og leverer en højt optimeret pipeline til specifikke computer vision-opgaver, som objektdetektion, ansigtsgenkendelse osv., ofte ved hjælp af Core ML-modeller i baggrunden. Vision abstraherer mange af de lavere niveurs detaljer, der er involveret i billedanalyse.
Kan Vision Framework bruges med video?
Ja, Vision Framework er designet til at arbejde effektivt med videostreams. Du kan behandle individuelle frames fra et kamera eller en videofil ved hjælp af VNImageRequestHandler, hvilket muliggør realtidsanalyse af videoindhold.
Kræver Vision Framework en internetforbindelse?
Nej, en af de primære fordele ved Vision Framework er, at det er designet til at køre on-device. Dette betyder, at billedanalyse og maskinlæringsinferens sker lokalt på brugerens enhed, hvilket forbedrer hastigheden, reducerer omkostningerne og beskytter brugerens privatliv, da data ikke sendes til en server.
Hvilke typer objekter kan Vision Framework detektere?
Vision Framework kan detektere en bred vifte af objekter ved hjælp af dets præ-trænede modeller, herunder personer, ansigter, dyr, køretøjer, møbler og meget mere. Ud over de præ-trænede modeller kan udviklere også integrere deres egne Core ML-modeller til at detektere specifikke, brugerdefinerede objekter.
Hvordan håndterer Vision Framework forskellige billedformater og opløsninger?
Vision Framework er designet til at være robust over for forskellige billedformater, filtyper og opløsninger. Det håndterer automatisk nødvendige billedkonverteringer, farverums-matching og reskalering for at sikre, at anmodninger kan udføres effektivt, uanset inputbilledets karakteristika.
Hvis du vil læse andre artikler, der ligner Forbedr din iOS-app med Apples Vision Framework, kan du besøge kategorien Teknologi.
