Vision: framework-ul de viziune computerizată în iOS

Autor: IT Sectr Publicat: 2026-07-19 Timp de citire: 9 min

Vision „ este un framework de viziune computerizată de la Apple, prezentat pentru prima dată în iOS 11 în 2017. Vision oferă algoritmi gata pregătiți pentru detectarea fețelor, recunoașterea textului (OCR), detectarea codurilor de bare, urmărirea obiectelor, clasificarea imaginilor și analiza contururilor „ totul se execută pe dispozitiv folosind Neural Engine. Potrivit Apple WWDC 2023, Vision este utilizat în aplicația standard „Fotografii" pentru recunoașterea fețelor și în „Cameră" pentru detectarea textului în timp real pe iPhone și iPad.

Principalele aspecte

  • Vision „ framework on-device de viziune computerizată Apple cu ciclu complet de analiză pe dispozitiv.
  • Suportă detectarea fețelor, recunoașterea textului (OCR), coduri de bare, clasificare și urmărire a obiectelor.
  • Funcționează prin mecanismul unitar VNRequest „ cereri către imagine sau flux video.
  • Se integrează cu Core ML pentru modele personalizate prin VNCoreMLRequest.
  • Framework optimizat pentru Neural Engine pe cipuri A12+ pentru timp real.

Ce este Vision în iOS?

Vision „ este un framework de nivel înalt de viziune computerizată, care abstractizează algoritmii complecși de învățare automată în spatele unui API simplu de cereri (VNRequest). Dezvoltatorul nu trebuie să cunoască rețele neuronale convoluționale „ este suficient să creeze o cerere de tipul potrivit, să transmită imaginea și să obțină rezultatul.

Arhitectura Vision este construită pe principiul Request → Handler → Result: VNImageRequestHandler primește imaginea, execută VNRequest și returnează un array VNObservation cu rezultate. Acest lucru permite combinarea mai multor cereri la o singură imagine „ de exemplu, detectarea simultană a fețelor și textului într-o fotografie.

Vision suportă iOS 11+ și macOS 10.13+. Pentru accelerare hardware prin Neural Engine este necesar un cip A12 Bionic sau mai nou. Pe dispozitivele cu A17 Pro și seria M, Vision procesează până la 60 de cadre pe secundă pentru video în flux.

Avantajul cheie Vision „ confidențialitate completă: toate calculele sunt efectuate pe dispozitiv, imaginile nu sunt trimise pe server. Acest lucru permite utilizarea framework-ului în aplicații care lucrează cu date sensibile, de exemplu în aplicații medicale sau bancare.

Detectarea și recunoașterea fețelor

VNDetectFaceRectanglesRequest „ cererea de bază Vision pentru detectarea fețelor într-o imagine. Returnează coordonatele dreptunghiurilor care delimitează fiecare față, fără identificarea persoanei concrete.

Pentru o analiză mai detaliată utilizați VNDetectFaceLandmarksRequest, care determină punctele cheie ale feței: ochi, sprâncene, nas, gură, conturul maxilarului. Aceste date sunt utilizate pentru aplicarea măștilor, animarea emoji-urilor și filtrelor în timp real (ca în FaceTime și 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 conține nu doar boundingBox, ci și confidence (încredere de la 0 la 1) și landmarks „ un array de puncte ale feței, dacă cererea a fost VNDetectFaceLandmarksRequest. Confidence sub 0.5 înseamnă de obicei o detectare falsă „ astfel de rezultate se recomandă a fi respinse.

Vision suportă de asemenea VNDetectFaceCaptureQualityRequest, care evaluează calitatea imaginii feței: iluminare, claritate, unghi de rotație. Acest lucru este util pentru selectarea celui mai bun cadru la înregistrarea utilizatorului sau crearea unui avatar.

Recunoașterea textului (OCR) cu Vision

VNRecognizeTextRequest „ este motorul OCR încorporat Apple, prezentat în iOS 13. Recunoaște textul tipărit pe imagini cu suport pentru 13 limbi: engleză, rusă, chineză, japoneză, coreeană, italiană, germană, spaniolă, portugheză, franceză, arabă, vietnameză și thailandeză.

VNRecognizeTextRequest suportă două niveluri de precizie: .fast (rapid, pentru text simplu pe fundal contrastant) și .accurate (precis, pentru scene complexe cu fonturi și unghiuri diferite). .fast funcționează de 3–5 ori mai rapid, dar se descurcă mai prost cu textul de mână și fonturile 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

Proprietatea usesLanguageCorrection activează corectarea textului recunoscut folosind un model lingvistic. Aceasta crește precizia pentru engleză cu 10–15%, dar mărește timpul de procesare. Pentru limba rusă, corectarea este de asemenea disponibilă dacă este specificată recunoașterea corespunzătoare.

Potrivit Apple ML Research 2022, precizia VNRecognizeTextRequest la nivelul .accurate este de 96% pentru fotografii clare ale documentelor în engleză și de aproximativ 88% pentru rusă. Pentru text pe ambalaje, panouri și ecrane, precizia scade la 75–85%.

Recognition LevelVitezăPrecizie (engleză)Suport rusă
.fast0.1–0.3 sec~85%Da
.accurate0.3–1.0 sec~96%Da

Detectarea codurilor de bare și QR

VNDetectBarcodesRequest „ cererea Vision pentru detectarea și decodarea codurilor de bare și QR pe imagine. Sunt suportate toate formatele principale: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec și QR.

Spre deosebire de AVFoundation (AVCaptureMetadataOutput), Vision funcționează nu doar cu flux video, ci și cu imagini statice „ acest lucru permite scanarea codurilor din fotografii deja făcute sau capturi de ecran. Vision determină de asemenea boundingBox-ul codului cu precizie de pixel, ceea ce este convenabil pentru animarea unui cadru în jurul codului găsit.

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 conține payloadStringValue (conținutul decodat), symbology (tipul codului) și confidence. Pentru codurile QR, payload poate fi URL, text sau JSON. Pentru EAN/UPC se returnează codul numeric al produsului, care poate fi folosit pentru căutarea articolului în baza de date.

Vision poate procesa mai multe coduri de bare pe o singură imagine „ array-ul observations conține câte un obiect pentru fiecare cod găsit. Acest lucru este util pentru scanarea pachetelor de produse sau documentelor cu mai multe coduri de bare.

Urmărirea obiectelor în flux video

VNDetectObjectAtPointRequest și VNSequenceRequestHandler „ instrumentele Vision pentru urmărirea obiectelor în flux video. Primul determină obiectul după punctul de atingere al utilizatorului, al doilea urmărește obiectul între cadrele video.

VNSequenceRequestHandler primește o secvență de imagini (cadre video) și pentru fiecare cadru returnează poziția actualizată a obiectului urmărit. Acest lucru este utilizat în aplicații de realitate augmentată, editoare video și sisteme de supraveghere video.

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
    // Actualizează poziția obiectului pe ecran
}

VNTrackObjectRequest folosește un algoritm de urmărire bazat pe flux optic „ nu reantrenează detectorul pe fiecare cadru, ci calculează deplasarea obiectului față de poziția anterioară. Acest lucru permite funcționarea în timp real chiar și pe dispozitive fără Neural Engine.

Limitare: urmărirea poate pierde obiectul la mișcare rapidă, acoperire sau schimbare bruscă a iluminării. Apple recomandă repornirea detectării (VNDetectObjectAtPointRequest) la fiecare 10–15 cadre pentru corectarea urmăririi.

Clasificarea imaginilor și analiza contururilor

VNClassifyImageRequest „ este modelul încorporat Vision pentru clasificarea imaginilor în 1000 de categorii (model ResNet-50, antrenat pe ImageNet). Cererea returnează un array VNClassificationObservation cu numele categoriei și încrederea.

VNDetectContoursRequest efectuează analiza contururilor imaginii „ extrage limitele obiectelor, ceea ce este util pentru segmentare, conturare și preprocesare înainte de recunoaștere. Cererea returnează un array de puncte care descriu fiecare contur pe imagine.

swift
import Vision

// Clasificare imagine
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 funcționează bine pentru categorii generale (pisică, câine, mașină, mâncare), dar nu este potrivit pentru obiecte specifice „ pentru acestea trebuie antrenat un model Core ML personalizat și utilizat VNCoreMLRequest. Modelul Apple este optimizat pentru dispozitive mobile și ocupă doar 5 MB.

VNDetectContoursRequest returnează contururile sub formă de array de puncte cu indicarea tipului de contur (extern, intern, gaură). Această cerere este utilizată pentru preprocesarea imaginilor înainte de OCR (îmbunătățirea contrastului textului), pentru desenarea efectelor (conturarea obiectelor) și pentru analiza formelor.

Cerere VisionDestinațieVersiune iOS
VNDetectFaceRectanglesRequestCăutarea fețelor în imagineiOS 11
VNRecognizeTextRequestRecunoașterea textului (OCR)iOS 13
VNDetectBarcodesRequestDetectarea codurilor de bare și QRiOS 11
VNClassifyImageRequestClasificarea imaginiloriOS 13
VNDetectContoursRequestAnaliza contururiloriOS 14
VNTrackObjectRequestUrmărirea obiecteloriOS 11

Întrebări frecvente

Care este diferența dintre Vision și Core ML pentru viziunea computerizată?

Vision oferă algoritmi gata pregătiți (detectarea fețelor, OCR, coduri de bare) fără antrenarea modelului. Core ML „ este motorul pentru executarea modelelor personalizate. Vision + VNCoreMLRequest permit rularea modelelor Core ML în pipeline-ul Vision, combinând ce e mai bun din ambele lumi: detectorii gata pregătiți Vision + clasificarea personalizată Core ML.

Funcționează Vision în timp real pe video?

Da, Vision suportă procesarea fluxului video în timp real prin VNSequenceRequestHandler pentru urmărire și prin AVCaptureVideoDataOutput pentru procesare cadru cu cadru. Pe dispozitivele cu A12+ și Neural Engine, Vision procesează până la 60 de cadre pe secundă pentru detectarea fețelor. Pentru sarcini grele (OCR, clasificare) se recomandă procesarea fiecărui al 5–10-lea cadru.

Ce limbi suportă VNRecognizeTextRequest?

VNRecognizeTextRequest suportă 13 limbi: engleză, rusă, chineză (simplificată și tradițională), japoneză, coreeană, italiană, germană, spaniolă, portugheză, franceză, arabă, vietnameză și thailandeză. Pentru recunoașterea mai multor limbi pe o singură imagine, specificați un array în proprietatea recognitionLanguages.

Pot folosi Vision cu un model Core ML?

Da, prin VNCoreMLRequest. Creați un model Core ML, împachetat în VNCoreMLModel, și îl transmiteți către VNCoreMLRequest. Vision gestionează automat preprocesarea imaginii (scalare, decupare) și o transmite modelului Core ML. Rezultatul este returnat ca VNCoreMLFeatureValueObservation cu datele de ieșire ale modelului.

Trimite Vision imaginile pe serverul Apple?

Nu, Vision efectuează întreaga analiză complet pe dispozitiv. Imaginile nu părăsesc dispozitivul utilizatorului. Aceasta este arhitectura fundamentală Apple: toate framework-urile ML (Vision, NaturalLanguage, Core ML, Speech) funcționează on-device pentru a asigura confidențialitatea. Niciun fel de date nu sunt trimise pe serverele Apple.

Concluzii

  • Vision „ framework on-device de viziune computerizată Apple cu API bazat pe VNRequest, disponibil din iOS 11 pe toate dispozitivele Apple.
  • VNDetectFaceRectanglesRequest și VNDetectFaceLandmarksRequest detectează fețe și puncte cheie pentru filtre, măști și animații.
  • VNRecognizeTextRequest „ OCR încorporat pentru 13 limbi cu nivele .fast și .accurate și precizie de până la 96% pentru documente.
  • VNDetectBarcodesRequest decodifică toate formatele populare de coduri de bare și QR atât pe fotografii, cât și în flux video.
  • VNTrackObjectRequest urmărește obiectele între cadrele video prin flux optic fără reantrenarea detectorului.
  • Integrarea cu Core ML prin VNCoreMLRequest permite rularea modelelor personalizate de clasificare și detectare în pipeline-ul Vision.
  • Toate calculele sunt efectuate pe dispozitiv folosind Neural Engine „ nicio imagine nu este trimisă pe server, asigurând confidențialitatea completă a datelor.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și