Vision : un framework de vision par ordinateur sur iOS

Auteur : IT Sectr Publié le : 2026-07-19 Temps de lecture : 9 min

Vision est un framework de vision par ordinateur d’Apple, présenté pour la première fois dans iOS 11 en 2017. Vision fournit des algorithmes prêts à l’emploi pour la détection des visages, la reconnaissance de texte (OCR), la détection de codes-barres, le suivi d’objets, la classification d’images et l’analyse de contours — le tout exécuté sur l’appareil à l’aide du Neural Engine. Selon Apple WWDC 2023, Vision est utilisé dans l’application Photos standard pour la reconnaissance des visages et dans l’appareil photo pour la détection de texte en temps réel sur iPhone et iPad.

Points clés

  • Vision — le framework de vision par ordinateur sur appareil d’Apple avec un cycle d’analyse complet sur l’appareil.
  • Prend en charge la détection des visages, la reconnaissance de texte (OCR), les codes-barres, la classification et le suivi d’objets.
  • Fonctionne via un mécanisme unifié VNRequest — des requêtes vers une image ou un flux vidéo.
  • S’intègre avec Core ML pour des modèles personnalisés via VNCoreMLRequest.
  • Le framework est optimisé pour Neural Engine sur les puces A12+ pour des performances en temps réel.

Qu’est-ce que Vision sur iOS ?

Vision est un framework de vision par ordinateur de haut niveau qui abstrait les algorithmes complexes d’apprentissage automatique derrière une API de requête simple (VNRequest). Le développeur n’a pas besoin de comprendre les réseaux de neurones convolutifs — il suffit de créer le type de requête approprié, de passer une image et d’obtenir le résultat.

L’architecture de Vision suit le principe Requête → Gestionnaire → Résultat : VNImageRequestHandler accepte une image, exécute VNRequest et renvoie un tableau d’VNObservation avec les résultats. Cela permet de combiner plusieurs requêtes sur une seule image — par exemple, détecter simultanément des visages et du texte dans une photo.

Vision prend en charge iOS 11+ et macOS 10.13+. L’accélération matérielle via Neural Engine nécessite une puce A12 Bionic ou plus récente. Sur les appareils avec A17 Pro et série M, Vision traite jusqu’à 60 images par seconde pour la vidéo en streaming.

Avantage clé de Vision : la confidentialité totale : tous les calculs sont effectués sur l’appareil, les images ne sont jamais envoyées à un serveur. Cela permet d’utiliser le framework dans des applications traitant des données sensibles, comme des applications médicales ou bancaires.

Détection et reconnaissance des visages

VNDetectFaceRectanglesRequest est la requête de base de Vision pour détecter les visages dans une image. Elle renvoie les coordonnées des rectangles englobant chaque visage, sans identifier une personne spécifique.

Pour une analyse plus détaillée, utilisez VNDetectFaceLandmarksRequest, qui identifie les points clés du visage : yeux, sourcils, nez, bouche, contour de la mâchoire. Ces données sont utilisées pour superposer des masques, animer des émojis et des filtres en temps réel (comme dans FaceTime et 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 contient non seulement boundingBox, mais aussi confidence (confiance de 0 à 1) et landmarks — un tableau de points du visage si la requête était VNDetectFaceLandmarksRequest. Une confiance inférieure à 0,5 indique généralement un faux positif — ces résultats doivent être rejetés.

Vision prend également en charge VNDetectFaceCaptureQualityRequest, qui évalue la qualité de l’image du visage : éclairage, netteté, angle de rotation. C’est utile pour sélectionner la meilleure image lors de l’inscription d’un utilisateur ou pour créer un avatar.

Reconnaissance de texte (OCR) avec Vision

VNRecognizeTextRequest est le moteur OCR intégré d’Apple, présenté dans iOS 13. Il reconnaît le texte imprimé dans les images avec la prise en charge de 13 langues : anglais, russe, chinois, japonais, coréen, italien, allemand, espagnol, portugais, français, arabe, vietnamien et thaï.

VNRecognizeTextRequest prend en charge deux niveaux de précision : .fast (rapide, pour du texte simple sur fond contrasté) et .accurate (précis, pour des scènes complexes avec différentes polices et angles). .fast est 3 à 5 fois plus rapide, mais traite moins efficacement le texte manuscrit et les polices non standard.

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 propriété usesLanguageCorrection active la correction du texte reconnu à l’aide d’un modèle de langue. Cela améliore la précision de l’anglais de 10 à 15% mais augmente le temps de traitement. La correction pour le russe est également disponible lorsque la reconnaissance appropriée est spécifiée.

Selon Apple ML Research 2022, VNRecognizeTextRequest au niveau .accurate atteint une précision de 96% pour les photos nettes de documents en anglais et d’environ 88% pour le russe. Pour le texte sur les emballages, les enseignes et les écrans, la précision tombe à 75–85%.

Niveau de reconnaissanceVitessePrécision (anglais)Support russe
.fast0,1–0,3 s~85%Oui
.accurate0,3–1,0 s~96%Oui

Détection de codes-barres et QR

VNDetectBarcodesRequest — une requête Vision pour détecter et décoder les codes-barres et QR codes dans les images. Tous les formats principaux sont pris en charge : EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec et QR.

Contrairement à AVFoundation (AVCaptureMetadataOutput), Vision fonctionne non seulement avec les flux vidéo mais aussi avec les images statiques — permettant de scanner des codes à partir de photos existantes ou de captures d’écran. Vision détermine également le boundingBox du code avec une précision au pixel près, ce qui est pratique pour animer un cadre autour du code détecté.

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 contient payloadStringValue (contenu décodé), symbology (type de code) et confidence. Pour les QR codes, le contenu peut être une URL, du texte ou du JSON. Pour EAN/UPC, un code produit numérique est renvoyé, qui peut être utilisé pour rechercher l’article dans une base de données.

Vision peut traiter plusieurs codes-barres sur une seule image — le tableau observations contient un objet pour chaque code détecté. Ceci est utile pour scanner des lots de produits ou des documents avec plusieurs codes-barres.

Suivi d’objets dans un flux vidéo

VNDetectObjectAtPointRequest et VNSequenceRequestHandler sont des outils Vision pour suivre des objets dans un flux vidéo. Le premier identifie un objet par le point de toucher de l’utilisateur, le second suit un objet entre les images vidéo.

VNSequenceRequestHandler accepte une séquence d’images (images vidéo) et renvoie la position mise à jour de l’objet suivi pour chaque image. Ceci est utilisé dans les applications de réalité augmentée, les éditeurs vidéo et les systèmes de surveillance.

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
    // Mettre à jour la position de l’objet à l’écran
}

VNTrackObjectRequest utilise un algorithme de suivi basé sur le flux optique — il ne réentraîne pas le détecteur sur chaque image mais calcule le déplacement de l’objet par rapport à sa position précédente. Cela permet un fonctionnement en temps réel même sur les appareils sans Neural Engine.

Limitation : le suivi peut perdre l’objet lors de mouvements rapides, d’occlusion ou de changements brusques d’éclairage. Apple recommande de redémarrer la détection (VNDetectObjectAtPointRequest) toutes les 10 à 15 images pour corriger le suivi.

Classification d’images et analyse de contours

VNClassifyImageRequest est le modèle intégré de Vision pour la classification d’images en 1 000 catégories (modèle ResNet-50 entraîné sur ImageNet). La requête renvoie un tableau de VNClassificationObservation avec le nom de la catégorie et la confiance.

VNDetectContoursRequest effectue une analyse des contours de l’image — extrait les limites des objets, utile pour la segmentation, le contouring et le prétraitement avant reconnaissance. La requête renvoie un tableau de points décrivant chaque contour dans l’image.

swift
import Vision

// Classification d’images
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 fonctionne bien pour les catégories générales (chat, chien, voiture, nourriture) mais n’est pas adapté aux objets spécifiques — pour ceux-ci, vous devez entraîner un modèle Core ML personnalisé et utiliser VNCoreMLRequest. Le modèle d’Apple est optimisé pour les appareils mobiles et ne prend que 5 Mo.

VNDetectContoursRequest renvoie les contours sous forme de tableau de points avec le type de contour (externe, interne, trou). Cette requête est utilisée pour le prétraitement d’images avant OCR (amélioration du contraste du texte), pour dessiner des effets (contourage d’objets) et pour l’analyse de formes.

Requête VisionObjectifVersion iOS
VNDetectFaceRectanglesRequestDétection de visages dans les imagesiOS 11
VNRecognizeTextRequestReconnaissance de texte (OCR)iOS 13
VNDetectBarcodesRequestDétection de codes-barres et QRiOS 11
VNClassifyImageRequestClassification d’imagesiOS 13
VNDetectContoursRequestAnalyse de contoursiOS 14
VNTrackObjectRequestSuivi d’objetsiOS 11

Questions fréquentes

Quelle est la différence entre Vision et Core ML pour la vision par ordinateur ?

Vision fournit des algorithmes prêts à l’emploi (détection de visages, OCR, codes-barres) sans entraînement de modèle. Core ML est le moteur d’exécution de modèles personnalisés. Vision + VNCoreMLRequest permettent d’exécuter des modèles Core ML dans le pipeline Vision, obtenant le meilleur des deux mondes : les détecteurs prêts de Vision + la classification personnalisée de Core ML.

Vision fonctionne-t-il en temps réel sur la vidéo ?

Oui, Vision prend en charge le traitement de flux vidéo en temps réel via VNSequenceRequestHandler pour le suivi et AVCaptureVideoDataOutput pour le traitement image par image. Sur les appareils avec A12+ et Neural Engine, Vision traite jusqu’à 60 ips pour la détection des visages. Pour les tâches lourdes (OCR, classification), il est recommandé de traiter une image toutes les 5 à 10 images.

Quelles langues prend en charge VNRecognizeTextRequest ?

VNRecognizeTextRequest prend en charge 13 langues : anglais, russe, chinois (simplifié et traditionnel), japonais, coréen, italien, allemand, espagnol, portugais, français, arabe, vietnamien et thaï. Pour reconnaître plusieurs langues dans une seule image, spécifiez un tableau dans la propriété recognitionLanguages.

Peut-on utiliser Vision avec un modèle Core ML ?

Oui, via VNCoreMLRequest. Vous créez un modèle Core ML encapsulé dans VNCoreMLModel et le transmettez à VNCoreMLRequest. Vision gère automatiquement le prétraitement de l’image (mise à l’échelle, recadrage) et l’alimente dans le modèle Core ML. Le résultat est renvoyé sous forme de VNCoreMLFeatureValueObservation avec les données de sortie du modèle.

Vision envoie-t-il les images au serveur d’Apple ?

Non, Vision effectue toute l’analyse entièrement sur l’appareil. Les images ne quittent jamais l’appareil de l’utilisateur. C’est l’architecture fondamentale d’Apple : tous les frameworks ML (Vision, NaturalLanguage, Core ML, Speech) fonctionnent sur l’appareil pour garantir la confidentialité. Aucune donnée n’est envoyée aux serveurs d’Apple.

Résumé

  • Vision — le framework de vision par ordinateur sur appareil d’Apple avec API basée sur VNRequest, disponible depuis iOS 11 sur tous les appareils Apple.
  • VNDetectFaceRectanglesRequest et VNDetectFaceLandmarksRequest détectent les visages et les points clés pour les filtres, masques et animations.
  • VNRecognizeTextRequest — OCR intégré pour 13 langues avec niveaux .fast et .accurate, précision jusqu’à 96% pour les documents.
  • VNDetectBarcodesRequest décode tous les formats populaires de codes-barres et QR codes, aussi bien dans les photos que dans les flux vidéo.
  • VNTrackObjectRequest suit les objets entre les images vidéo via le flux optique sans réentraîner le détecteur.
  • L’intégration avec Core ML via VNCoreMLRequest permet d’exécuter des modèles personnalisés de classification et de détection dans le pipeline Vision.
  • Tous les calculs sont effectués sur l’appareil à l’aide du Neural Engine — aucune image n’est envoyée aux serveurs et confidentialité totale des données.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi