Vision è un framework di visione artificiale di Apple, integrato in iOS, macOS e iPadOS, che fornisce API pronte per analizzare immagini, video e dati in tempo reale. Copre il rilevamento dei volti, il riconoscimento del testo, i codici a barre, i contorni degli oggetti e il tracciamento del movimento — tutto sul dispositivo senza inviare dati a un server. Secondo la Apple Vision Documentation (2026), il framework elabora fino a 60 fotogrammi al secondo su dispositivi con chip A14 e successivi.
Punti chiave
Vision è un framework di alto livello per la visione artificiale presentato da Apple al WWDC 2017. Fornisce agli sviluppatori un’interfaccia unificata per eseguire varie attività di analisi di immagini e video senza dover approfondire la matematica della visione artificiale o ottimizzare per processori neurali specifici. Vision utilizza automaticamente il Neural Engine di Apple sui dispositivi con chip A12+.
A differenza di librerie di basso livello come OpenCV, Vision astrae la complessità: lo sviluppatore crea un oggetto VNRequest, configura i parametri ed esegue l’elaborazione tramite VNImageRequestHandler. Il framework decide quale unità di calcolo utilizzare — CPU, GPU o ANE — e restituisce risultati strutturati. Secondo Apple (WWDC 2025), Vision è utilizzato nel 40% delle applicazioni dell’App Store che lavorano con le immagini.
Vision include API per il rilevamento di volti e punti di riferimento (fino a 68 punti), riconoscimento testo (OCR) con supporto per oltre 30 lingue, scansione di codici a barre QR e EAN, tracciamento di oggetti tra fotogrammi, rilevamento di rettangoli e contorni, classificazione di immagini tramite Core ML, stima del movimento e flusso ottico, e rilevamento di persone con segmentazione. Ogni operazione è rappresentata da una sottoclasse separata di VNRequest.
Vision è costruito sull’architettura Request → Handler → Results, dove ogni richiesta è un compito specifico: trovare volti, riconoscere testo, tracciare un oggetto. Diamo un’occhiata alle API più utilizzate.
VNRequest è una classe base astratta da cui ereditano tutte le richieste concrete di Vision. Ogni richiesta ha un completionHandler, parametri di configurazione e un regionOfInterest per elaborare parte di un’immagine. Dopo aver creato una richiesta, viene passata a VNImageRequestHandler (per immagini statiche) o VNSequenceRequestHandler (per flussi video). I risultati vengono restituiti come array di osservazioni — sottoclassi di VNObservation.
VNDetectFaceRectanglesRequest trova tutti i volti in un’immagine e restituisce i loro rettangoli delimitatore. VNDetectFaceLandmarksRequest identifica inoltre 68 punti di riferimento chiave: contorni degli occhi, sopracciglia, naso, labbra e mascella. VNDetectFaceCaptureQualityRequest valuta la qualità della cattura del volto — da 0 a 1 — utile per la biometria. Secondo Apple, la precisione del rilevamento facciale sui dispositivi con Neural Engine raggiunge il 99% ad angolazioni frontali.
VNRecognizeTextRequest è l’API per il riconoscimento ottico dei caratteri (OCR) sulle immagini. Supporta testo stampato in latino, cirillico, cinese, giapponese, coreano e altre lingue. Il risultato è un array di oggetti VNRecognizedTextObservation, ciascuno contenente una stringa di testo, un rettangolo delimitatore e un livello di confidenza. Sono disponibili due modalità: Veloce (Fast) per la scansione di documenti e Precisa (Accurate) per caratteri complessi.
Per utilizzare Vision, importa semplicemente il framework, crea un oggetto VNRequest e passalo a VNImageRequestHandler. Vediamo un esempio di riconoscimento del testo su un’immagine.
Il codice crea un VNRecognizeTextRequest con modalità di riconoscimento precisa, lo esegue su un’immagine e restituisce il testo riconosciuto nella console. Questo semplice esempio dimostra l’integrazione minima di Vision in un progetto Swift utilizzando VNImageRequestHandler in poche righe di codice.
import Vision
// 1. Creare una richiesta di riconoscimento testo
let request = VNRecognizeTextRequest { request, error in
guard let observations = request.results
as? [VNRecognizedTextObservation]
else { return }
for observation in observations {
let topCandidate = observation
.topCandidates(1)
.first
print("Testo: \(topCandidate?.string ?? "")")
}
}
// 2. Abilitare la modalità precisa
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true
// 3. Eseguire il handler
let handler = VNImageRequestHandler(
url: imageURL, options: [:]
)
try? handler.perform([request])
Il codice Swift configura un VNRecognizeTextRequest con livello di riconoscimento preciso e correzione linguistica abilitata. VNImageRequestHandler carica l’immagine da un URL ed esegue la richiesta. I risultati contengono stringhe di testo riconosciute con rettangoli delimitatori e punteggi di confidenza per ogni token. L’array VNRecognizedTextObservation può essere comodamente visualizzato sullo schermo.
Per l’elaborazione video in tempo reale, utilizza VNSequenceRequestHandler invece di VNImageRequestHandler. Accetta un array di immagini (fotogrammi) ed esegue la stessa richiesta sequenzialmente, mantenendo lo stato tra i fotogrammi — essenziale per il tracciamento degli oggetti. VNSequenceRequestHandler gestisce automaticamente la memoria: le osservazioni vecchie vengono rimosse quando un oggetto lascia il fotogramma. Le prestazioni in tempo reale dipendono dalla complessità della richiesta: il rilevamento dei volti funziona a 60 FPS, mentre il riconoscimento del testo funziona a 15–30 FPS su dispositivi con chip A16.
Vision e Core Image sono due framework Apple per lavorare con le immagini, ma risolvono compiti fondamentalmente diversi. Core Image è un framework per filtrare e trasformare le immagini (applicazione di filtri, correzione colore, sfocatura). Vision è un framework per comprendere il contenuto dell’immagine: cosa vi è rappresentato.
| Caratteristica | Vision | Core Image |
|---|---|---|
| Compito | Analisi e riconoscimento | Filtraggio ed elaborazione |
| Rilevamento volti | Sì, con punti di riferimento | Solo CIDetector |
| Riconoscimento testo | Sì (OCR) | No |
| Filtri | No | Oltre 200 filtri |
| Integrazione Core ML | Sì (VNCoreMLRequest) | No |
| Tracciamento oggetti | Sì (VNTrackObjectRequest) | No |
| Prestazioni | Ottimizzato per ANE | GPU (Metal) |
Utilizza Vision quando devi comprendere cosa c’è in un’immagine: volti, testo, codici QR, oggetti. Utilizza Core Image quando devi modificare un’immagine: applicare un filtro, regolare i colori, ritagliare. Spesso questi due framework vengono combinati: prima Core Image migliora la qualità dell’immagine, poi Vision riconosce il testo su di essa.
In pratica, Vision e Core Image vengono utilizzati insieme nelle applicazioni di scansione documenti. Core Image aumenta automaticamente il contrasto e rimuove le ombre (CIFilter con CIPhotoEffectNoir), mentre Vision riconosce il testo sull’immagine migliorata. Secondo Apple (WWDC 2025), la precisione dell’OCR aumenta del 15–20% preelaborando le immagini tramite Core Image rispetto ai fotogrammi grezzi della fotocamera.
Un altro importante caso d’uso per l’utilizzo combinato è l’analisi facciale in tempo reale per applicazioni di realtà aumentata. Vision rileva il volto e identifica 68 punti di riferimento, mentre Core Image applica filtri alle regioni rilevate. ARKit utilizza Vision per il tracciamento del volto e Core Image per il rendering degli effetti, con una latenza totale inferiore a 16 ms su dispositivi con chip A15+.
Durante lo sviluppo in SwiftUI per l’integrazione di Vision, viene utilizzato il protocollo Representable, che incapsula AVCaptureSession e VNImageRequestHandler in UIViewRepresentable. La fotocamera viene visualizzata tramite PreviewView, ogni fotogramma viene passato a VisionRequestHandler tramite AVCaptureVideoDataOutputSampleBufferDelegate. Questo approccio architetturale preserva la reattività di SwiftUI e fornisce i risultati dell’analisi di Vision come proprietà @Published per aggiornamenti immediati dell’interfaccia.
Vision viene utilizzato in un’ampia gamma di applicazioni iOS: dagli scanner di documenti alle app di realtà aumentata. Esaminiamo tre scenari tipici.
VNDetectDocumentSegmentationRequest (disponibile da iOS 17+) rileva automaticamente i bordi del documento in un’immagine, corregge la prospettiva e restituisce un’immagine raddrizzata. Combinato con VNRecognizeTextRequest, crea uno scanner OCR completo in grado di riconoscere fatture, biglietti da visita e pagine di libri. Secondo Apple, la segmentazione dei documenti richiede 30–80 ms su un dispositivo con chip A15.
VNTrackObjectRequest traccia il movimento di un oggetto selezionato tra i fotogrammi video in tempo reale. Lo sviluppatore specifica il rettangolo delimitatore dell’oggetto sul primo fotogramma, e Vision calcola automaticamente la sua nuova posizione nei fotogrammi successivi. Il tracciamento viene utilizzato in applicazioni di videoanalitica, giochi AR e sistemi di sorveglianza. La precisione del tracciamento sui chip A16 è del 95% a velocità di movimento dell’oggetto fino a 30 pixel per fotogramma.
VNDetectRectanglesRequest trova aree rettangolari in un’immagine: schermi, fogli di carta, insegne, documenti. L’API restituisce coordinate degli angoli con correzione della prospettiva. Combinando i rettangoli con VNDetectContoursRequest, è possibile estrarre contorni precisi degli oggetti — utile per applicazioni di realtà aumentata e editor grafici. VNDetectContoursRequest restituisce un array di punti di controllo del contorno che possono essere convertiti in UIBezierPath per il rendering.
Domande frequenti
iOS 11+ per le API di base, iOS 13+ per il riconoscimento del testo (VNRecognizeTextRequest), iOS 17+ per la segmentazione dei documenti. Vision è disponibile anche su macOS 10.13+ e iPadOS 13+.
Sì, Vision elabora flussi video tramite VNSequenceRequestHandler e AVFoundation. Il framework supporta fino a 60 FPS su dispositivi con chip A14+ quando si utilizzano richieste rapide.
Vision — framework nativo Apple con ottimizzazione automatica per ANE e GPU. OpenCV — libreria multipiattaforma con capacità più ampie, ma richiede ottimizzazione manuale e non supporta Neural Engine.
Tramite VNCoreMLRequest: crea un modello Core ML, inizializza VNCoreMLModel, passalo a VNCoreMLRequest ed eseguilo tramite VNImageRequestHandler. Xcode genererà automaticamente una classe Swift per il modello.
Indirettamente — VNDetectFaceLandmarksRequest determina la posizione dei punti chiave del volto, e VNDetectFaceExpressionsRequest (iOS 17+) valuta sorrisi e ammiccamenti attraverso gli occhi chiusi.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche