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 „ 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.
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).
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.
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.
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 Level | Viteză | Precizie (engleză) | Suport rusă |
|---|---|---|---|
| .fast | 0.1–0.3 sec | ~85% | Da |
| .accurate | 0.3–1.0 sec | ~96% | Da |
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.
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.
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.
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.
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.
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 Vision | Destinație | Versiune iOS |
|---|---|---|
| VNDetectFaceRectanglesRequest | Căutarea fețelor în imagine | iOS 11 |
| VNRecognizeTextRequest | Recunoașterea textului (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Detectarea codurilor de bare și QR | iOS 11 |
| VNClassifyImageRequest | Clasificarea imaginilor | iOS 13 |
| VNDetectContoursRequest | Analiza contururilor | iOS 14 |
| VNTrackObjectRequest | Urmărirea obiectelor | iOS 11 |
Întrebări frecvente
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.
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.
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.
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.
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
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.
Citiți și