Vision: un framework di visione artificiale in iOS

Autore: IT Sectr Pubblicato: 2026-07-19 Tempo di lettura: 9 min

Vision è un framework di visione artificiale di Apple, presentato per la prima volta in iOS 11 nel 2017. Vision fornisce algoritmi pronti per il rilevamento dei volti, il riconoscimento del testo (OCR), il rilevamento di codici a barre, il tracciamento di oggetti, la classificazione delle immagini e l'analisi dei contorni — tutto eseguito sul dispositivo utilizzando il Neural Engine. Secondo Apple WWDC 2023, Vision viene utilizzato nell'app Foto standard per il riconoscimento facciale e nell'app Fotocamera per il rilevamento del testo in tempo reale su iPhone e iPad.

Punti chiave

  • Vision — il framework di visione artificiale on-device di Apple con ciclo di analisi completo sul dispositivo.
  • Supporta rilevamento dei volti, riconoscimento del testo (OCR), codici a barre, classificazione e tracciamento di oggetti.
  • Funziona attraverso il meccanismo unificato VNRequest — richieste a un'immagine o a un flusso video.
  • Si integra con Core ML per modelli personalizzati tramite VNCoreMLRequest.
  • Il framework è ottimizzato per Neural Engine sui chip A12+ per prestazioni in tempo reale.

Cos'è Vision in iOS?

Vision è un framework di visione artificiale di alto livello che astrae algoritmi complessi di apprendimento automatico dietro una semplice API di richieste (VNRequest). Lo sviluppatore non ha bisogno di capire le reti neurali convolutive — basta creare il tipo di richiesta appropriato, passare un'immagine e ottenere il risultato.

L'architettura di Vision segue il principio Richiesta → Gestore → Risultato: VNImageRequestHandler accetta un'immagine, esegue VNRequest e restituisce un array di VNObservation con i risultati. Ciò consente di combinare più richieste su una singola immagine — ad esempio, rilevare simultaneamente volti e testo in una foto.

Vision supporta iOS 11+ e macOS 10.13+. L'accelerazione hardware tramite Neural Engine richiede un chip A12 Bionic o successivo. Su dispositivi con A17 Pro e serie M, Vision elabora fino a 60 fotogrammi al secondo per video in streaming.

Vantaggio principale di Vision è la privacy completa: tutti i calcoli vengono eseguiti sul dispositivo, le immagini non vengono mai inviate a un server. Ciò consente di utilizzare il framework in applicazioni che gestiscono dati sensibili, come app mediche o bancarie.

Rilevamento e riconoscimento dei volti

VNDetectFaceRectanglesRequest è la richiesta base di Vision per rilevare volti in un'immagine. Restituisce le coordinate dei rettangoli che delimitano ogni volto, senza identificare una persona specifica.

Per un'analisi più dettagliata, utilizzare VNDetectFaceLandmarksRequest, che identifica i punti chiave del volto: occhi, sopracciglia, naso, bocca, contorno della mascella. Questi dati vengono utilizzati per applicare maschere, animare emoji e filtri in tempo reale (come in FaceTime e Snapchat).

swift
import Vision
import UIKit

guard let image = UIImage(named: "photo") else { return }
let request = VNDetectFaceRectanglesRequest()
let handler = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])

try handler.perform([request])
for observation in request.results ?? [] {
    let bbox = observation.boundingBox
    print("Face at x=\\(bbox.origin.x), y=\\(bbox.origin.y)")
}

VNFaceObservation contiene non solo boundingBox, ma anche confidence (fiducia da 0 a 1) e landmarks — un array di punti del volto se la richiesta era VNDetectFaceLandmarksRequest. Una confidence inferiore a 0,5 indica generalmente un falso positivo — tali risultati dovrebbero essere scartati.

Vision supporta anche VNDetectFaceCaptureQualityRequest, che valuta la qualità dell'immagine del volto: illuminazione, nitidezza, angolo di rotazione. Ciò è utile per selezionare il fotogramma migliore durante la registrazione dell'utente o per creare un avatar.

Riconoscimento del testo (OCR) con Vision

VNRecognizeTextRequest è il motore OCR integrato di Apple, introdotto in iOS 13. Riconosce il testo stampato nelle immagini con supporto per 13 lingue: inglese, russo, cinese, giapponese, coreano, italiano, tedesco, spagnolo, portoghese, francese, arabo, vietnamita e tailandese.

VNRecognizeTextRequest supporta due livelli di precisione: .fast (veloce, per testo semplice su sfondo contrastante) e .accurate (preciso, per scene complesse con caratteri e angoli diversi). .fast è 3–5 volte più veloce, ma gestisce il testo scritto a mano e i caratteri non standard in modo meno efficace.

swift
import Vision

let textRequest = VNRecognizeTextRequest { request, _ in
    guard let observations = request.results as? [VNRecognizedTextObservation]
    else { return }
    for observation in observations {
        let topCandidate = observation.topCandidates(1).first
        print(topCandidate?.string ?? "")
    }
}
textRequest.recognitionLevel = .accurate
textRequest.usesLanguageCorrection = true

La proprietà usesLanguageCorrection attiva la correzione del testo riconosciuto utilizzando un modello linguistico. Ciò migliora la precisione per l'inglese del 10–15% ma aumenta il tempo di elaborazione. La correzione per il russo è disponibile anche quando viene specificato il riconoscimento appropriato.

Secondo Apple ML Research 2022, VNRecognizeTextRequest al livello .accurate raggiunge una precisione del 96% per foto nitide di documenti in inglese e circa l'88% per il russo. Per il testo su imballaggi, insegne e schermi, la precisione scende al 75–85%.

Livello di riconoscimentoVelocitàPrecisione (inglese)Supporto russo
.fast0,1–0,3 s~85%
.accurate0,3–1,0 s~96%

Rilevamento di codici a barre e QR

VNDetectBarcodesRequest — una richiesta Vision per rilevare e decodificare codici a barre e QR code nelle immagini. Tutti i formati principali sono supportati: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec e QR.

A differenza di AVFoundation (AVCaptureMetadataOutput), Vision funziona non solo con flussi video ma anche con immagini statiche — consentendo di scansionare codici da foto esistenti o screenshot. Vision determina anche il boundingBox del codice con precisione al pixel, comodo per animare una cornice attorno al codice rilevato.

swift
import Vision

let barcodeRequest = VNDetectBarcodesRequest { request, _ in
    guard let observations = request.results as? [VNBarcodeObservation]
    else { return }
    for observation in observations {
        let payload = observation.payloadStringValue ?? ""
        print("Barcode: \\(payload), Symbology: \\(observation.symbology.rawValue)"
    }
}

VNBarcodeObservation contiene payloadStringValue (contenuto decodificato), symbology (tipo di codice) e confidence. Per i QR code, il payload può essere un URL, testo o JSON. Per EAN/UPC, viene restituito un codice prodotto numerico che può essere utilizzato per cercare l'articolo in un database.

Vision può elaborare più codici a barre in una singola immagine — l'array observations contiene un oggetto per ogni codice rilevato. Ciò è utile per scansionare lotti di prodotti o documenti con più codici a barre.

Tracciamento di oggetti in flusso video

VNDetectObjectAtPointRequest e VNSequenceRequestHandler — strumenti di Vision per tracciare oggetti in un flusso video. Il primo identifica un oggetto dal punto di tocco dell'utente, il secondo traccia un oggetto tra i fotogrammi video.

VNSequenceRequestHandler accetta una sequenza di immagini (fotogrammi video) e restituisce la posizione aggiornata dell'oggetto tracciato per ogni fotogramma. Ciò viene utilizzato in app di realtà aumentata, editor video e sistemi di sorveglianza.

swift
import Vision

let trackingRequest = VNTrackObjectRequest(detectedObjectObservation: initialObservation)
let sequenceHandler = VNSequenceRequestHandler()

for frame in videoFrames {
    try sequenceHandler.perform([trackingRequest],
        on: frame.cgImage!)
    let newBBox = trackingRequest.results?.first?.boundingBox
    // Aggiorna posizione oggetto sullo schermo
}

VNTrackObjectRequest utilizza un algoritmo di tracciamento basato su flusso ottico — non riaddestra il rilevatore su ogni fotogramma ma calcola lo spostamento dell'oggetto rispetto alla sua posizione precedente. Ciò consente prestazioni in tempo reale anche su dispositivi senza Neural Engine.

Limitazione: il tracciamento può perdere l'oggetto durante movimenti rapidi, occlusioni o cambiamenti improvvisi di illuminazione. Apple consiglia di riavviare il rilevamento (VNDetectObjectAtPointRequest) ogni 10–15 fotogrammi per la correzione del tracciamento.

Classificazione delle immagini e analisi dei contorni

VNClassifyImageRequest è il modello integrato di Vision per la classificazione delle immagini in 1.000 categorie (modello ResNet-50 addestrato su ImageNet). La richiesta restituisce un array di VNClassificationObservation con il nome della categoria e la confidenza.

VNDetectContoursRequest esegue l'analisi dei contorni dell'immagine — estrae i confini degli oggetti, utile per segmentazione, delineamento e pre-elaborazione prima del riconoscimento. La richiesta restituisce un array di punti che descrivono ogni contorno nell'immagine.

swift
import Vision

// Classificazione immagini
let classificationRequest = VNClassifyImageRequest { request, _ in
    guard let results = request.results as? [VNClassificationObservation]
    else { return }
    let topMatch = results.prefix(3).filter { $0.confidence > 0.3 }
    for match in topMatch {
        print("\\(match.identifier): \\(match.confidence)"
    }
}

VNClassifyImageRequest funziona bene per categorie generali (gatto, cane, macchina, cibo) ma non è adatto per oggetti specifici — per questi, è necessario addestrare un modello Core ML personalizzato e utilizzare VNCoreMLRequest. Il modello di Apple è ottimizzato per dispositivi mobili e occupa solo 5 MB.

VNDetectContoursRequest restituisce i contorni come array di punti con il tipo di contorno (esterno, interno, foro). Questa richiesta viene utilizzata per la pre-elaborazione delle immagini prima dell'OCR (miglioramento del contrasto del testo), per disegnare effetti (delineamento di oggetti) e per l'analisi delle forme.

Richiesta VisionScopoVersione iOS
VNDetectFaceRectanglesRequestRicerca volti nelle immaginiiOS 11
VNRecognizeTextRequestRiconoscimento testo (OCR)iOS 13
VNDetectBarcodesRequestRilevamento codici a barre e QRiOS 11
VNClassifyImageRequestClassificazione immaginiiOS 13
VNDetectContoursRequestAnalisi contorniiOS 14
VNTrackObjectRequestTracciamento oggettiiOS 11

Domande frequenti

Qual è la differenza tra Vision e Core ML per la visione artificiale?

Vision fornisce algoritmi pronti (rilevamento volti, OCR, codici a barre) senza addestramento del modello. Core ML è il motore per eseguire modelli personalizzati. Vision + VNCoreMLRequest consentono di eseguire modelli Core ML nella pipeline di Vision, ottenendo il meglio di entrambi i mondi: rilevatori pronti di Vision + classificazione personalizzata di Core ML.

Vision funziona in tempo reale sul video?

Sì, Vision supporta l'elaborazione del flusso video in tempo reale tramite VNSequenceRequestHandler per il tracciamento e AVCaptureVideoDataOutput per l'elaborazione fotogramma per fotogramma. Su dispositivi con A12+ e Neural Engine, Vision elabora fino a 60 fps per il rilevamento dei volti. Per attività pesanti (OCR, classificazione), si consiglia di elaborare ogni 5–10 fotogramma.

Quali lingue supporta VNRecognizeTextRequest?

VNRecognizeTextRequest supporta 13 lingue: inglese, russo, cinese (semplificato e tradizionale), giapponese, coreano, italiano, tedesco, spagnolo, portoghese, francese, arabo, vietnamita e tailandese. Per riconoscere più lingue in una singola immagine, specificare un array nella proprietà recognitionLanguages.

Si può usare Vision con un modello Core ML?

Sì, tramite VNCoreMLRequest. Si crea un modello Core ML avvolto in VNCoreMLModel e lo si passa a VNCoreMLRequest. Vision gestisce automaticamente la pre-elaborazione dell'immagine (ridimensionamento, ritaglio) e la inserisce nel modello Core ML. Il risultato viene restituito come VNCoreMLFeatureValueObservation con i dati di output del modello.

Vision invia immagini al server di Apple?

No, Vision esegue tutta l'analisi interamente sul dispositivo. Le immagini non lasciano mai il dispositivo dell'utente. Questa è l'architettura fondamentale di Apple: tutti i framework ML (Vision, NaturalLanguage, Core ML, Speech) funzionano on-device per garantire la privacy. Nessun dato viene inviato ai server Apple.

Riepilogo

  • Vision — framework di visione artificiale on-device di Apple con API basata su VNRequest, disponibile da iOS 11 su tutti i dispositivi Apple.
  • VNDetectFaceRectanglesRequest e VNDetectFaceLandmarksRequest rilevano volti e punti chiave per filtri, maschere e animazioni.
  • VNRecognizeTextRequest — OCR integrato per 13 lingue con livelli .fast e .accurate, precisione fino al 96% per documenti.
  • VNDetectBarcodesRequest decodifica tutti i formati popolari di codici a barre e QR sia in foto che in flussi video.
  • VNTrackObjectRequest traccia oggetti tra fotogrammi video tramite flusso ottico senza riaddestrare il rilevatore.
  • Integrazione con Core ML tramite VNCoreMLRequest consente di eseguire modelli personalizzati di classificazione e rilevamento all'interno della pipeline Vision.
  • Tutti i calcoli vengono eseguiti sul dispositivo utilizzando Neural Engine — nessuna immagine inviata a server e privacy completa dei dati.

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.

Discuti il progetto

Leggi anche