Vision „ je framework počítačového vidění od společnosti Apple, poprvé představený v iOS 11 v roce 2017. Vision poskytuje hotové algoritmy pro detekci obličejů, rozpoznávání textu (OCR), detekci čárových kódů, sledování objektů, klasifikaci obrázků a analýzu kontur „ vše se provádí na zařízení s využitím Neural Engine. Podle Apple WWDC 2023 se Vision používá ve standardní aplikaci „Fotky" pro rozpoznávání obličejů a v „Kameře" pro detekci textu v reálném čase na iPhone a iPad.
Hlavní body
Vision „ je framework počítačového vidění na vysoké úrovni, který abstrahuje složité algoritmy strojového učení za jednoduché API dotazů (VNRequest). Vývojář nemusí rozumět konvolučním neuronovým sítím „ stačí vytvořit dotaz správného typu, předat obrázek a získat výsledek.
Architektura Vision je postavena na principu Request → Handler → Result: VNImageRequestHandler přijme obrázek, provede VNRequest a vrátí pole VNObservation s výsledky. To umožňuje kombinovat více dotazů na jeden obrázek „ například současně detekovat obličeje a text na fotografii.
Vision podporuje iOS 11+ a macOS 10.13+. Pro hardwarovou akceleraci přes Neural Engine je vyžadován čip A12 Bionic nebo novější. Na zařízeních s A17 Pro a řadou M Vision zpracovává až 60 snímků za sekundu pro streamované video.
Klíčová výhoda Vision „ naprosté soukromí: všechny výpočty probíhají na zařízení, obrázky nejsou odesílány na server. To umožňuje používat framework v aplikacích pracujících s citlivými údaji, například v lékařských nebo bankovních aplikacích.
VNDetectFaceRectanglesRequest „ základní dotaz Vision pro detekci obličejů na obrázku. Vrací souřadnice obdélníků ohraničujících každý obličej bez identifikace konkrétní osoby.
Pro podrobnější analýzu použijte VNDetectFaceLandmarksRequest, který určuje klíčové body obličeje: oči, obočí, nos, ústa, konturu čelisti. Tato data se používají pro nanášení masek, animaci emotikon a filtrů v reálném čase (jako ve FaceTime a Snapchatu).
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 obsahuje nejen boundingBox, ale také confidence (spolehlivost od 0 do 1) a landmarks „ pole bodů obličeje, pokud byl dotaz VNDetectFaceLandmarksRequest. Confidence pod 0.5 obvykle znamená falešný zásah „ takové výsledky se doporučuje zahodit.
Vision také podporuje VNDetectFaceCaptureQualityRequest, který hodnotí kvalitu obrazu obličeje: osvětlení, ostrost, úhel natočení. To je užitečné pro výběr nejlepšího snímku při registraci uživatele nebo vytváření avataru.
VNRecognizeTextRequest „ je vestavěný OCR engine Apple, představený v iOS 13. Rozpoznává tištěný text na obrázcích s podporou 13 jazyků: angličtiny, ruštiny, čínštiny, japonštiny, korejštiny, italštiny, němčiny, španělštiny, portugalštiny, francouzštiny, arabštiny, vietnamštiny a thajštiny.
VNRecognizeTextRequest podporuje dvě úrovně přesnosti: .fast (rychlý, pro jednoduchý text na kontrastním pozadí) a .accurate (přesný, pro složité scény s různými fonty a úhly). .fast pracuje 3–5krát rychleji, ale hůře si poradí s rukopisným textem a nestandardními fonty.
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
Vlastnost usesLanguageCorrection zapíná korekci rozpoznaného textu pomocí jazykového modelu. To zvyšuje přesnost pro angličtinu o 10–15%, ale prodlužuje dobu zpracování. Pro ruštinu je korekce také dostupná, pokud je uvedeno odpovídající rozpoznávání.
Podle Apple ML Research 2022 je přesnost VNRecognizeTextRequest na úrovni .accurate 96% pro jasné fotografie dokumentů v angličtině a přibližně 88% pro ruštinu. Pro text na obalech, cedulích a obrazovkách přesnost klesá na 75–85%.
| Recognition Level | Rychlost | Přesnost (angličtina) | Podpora ruštiny |
|---|---|---|---|
| .fast | 0.1–0.3 s | ~85% | Ano |
| .accurate | 0.3–1.0 s | ~96% | Ano |
VNDetectBarcodesRequest „ dotaz Vision pro detekci a dekódování čárových kódů a QR kódů na obrázku. Všechny hlavní formáty jsou podporovány: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec a QR.
Na rozdíl od AVFoundation (AVCaptureMetadataOutput) Vision nepracuje pouze s video streamem, ale také se statickými obrázky „ to umožňuje skenovat kódy z již pořízených fotografií nebo screenshotů. Vision také určuje boundingBox kódu s přesností na pixel, což je vhodné pro animaci rámečku kolem nalezeného kódu.
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 obsahuje payloadStringValue (dekódovaný obsah), symbology (typ kódu) a confidence. Pro QR kódy může být payload URL, text nebo JSON. Pro EAN/UPC se vrací číselný kód produktu, který lze použít pro vyhledání položky v databázi.
Vision může zpracovat více čárových kódů na jednom obrázku „ pole observations obsahuje jeden objekt pro každý nalezený kód. To je užitečné pro skenování balíků produktů nebo dokumentů s více čárovými kódy.
VNDetectObjectAtPointRequest a VNSequenceRequestHandler „ nástroje Vision pro sledování objektů ve video streamu. První určuje objekt podle bodu doteku uživatele, druhý sleduje objekt mezi snímky videa.
VNSequenceRequestHandler přijímá sekvenci obrázků (snímky videa) a pro každý snímek vrací aktualizovanou pozici sledovaného objektu. To se používá v aplikacích rozšířené reality, video editorech a systémech video dohledu.
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
// Aktualizovat pozici objektu na obrazovce
}
VNTrackObjectRequest používá algoritmus sledování založený na optickém toku „ nepřetrénovává detektor na každém snímku, ale počítá posun objektu vůči předchozí poloze. To umožňuje práci v reálném čase i na zařízeních bez Neural Engine.
Omezení: sledování může ztratit objekt při rychlém pohybu, zakrytí nebo náhlé změně osvětlení. Apple doporučuje restartovat detekci (VNDetectObjectAtPointRequest) každých 10–15 snímků pro korekci sledování.
VNClassifyImageRequest „ je vestavěný model Vision pro klasifikaci obrázků do 1000 kategorií (model ResNet-50, trénovaný na ImageNet). Dotaz vrací pole VNClassificationObservation s názvem kategorie a spolehlivostí.
VNDetectContoursRequest provádí analýzu kontur obrázku „ extrahuje hranice objektů, což je užitečné pro segmentaci, obrysování a předzpracování před rozpoznáváním. Dotaz vrací pole bodů popisujících každou konturu na obrázku.
import Vision
// Klasifikace obrázku
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 funguje dobře pro obecné kategorie (kočka, pes, auto, jídlo), ale není vhodný pro specifické objekty „ pro ně je třeba natrénovat vlastní model Core ML a použít VNCoreMLRequest. Model od Apple je optimalizován pro mobilní zařízení a zabírá pouze 5 MB.
VNDetectContoursRequest vrací kontury jako pole bodů s uvedením typu kontury (vnější, vnitřní, díra). Tento dotaz se používá pro předzpracování obrázků před OCR (zlepšení kontrastu textu), pro kreslení efektů (obkreslování objektů) a pro analýzu tvarů.
| Dotaz Vision | Účel | Verze iOS |
|---|---|---|
| VNDetectFaceRectanglesRequest | Vyhledávání obličejů na obrázku | iOS 11 |
| VNRecognizeTextRequest | Rozpoznávání textu (OCR) | iOS 13 |
| VNDetectBarcodesRequest | Detekce čárových kódů a QR | iOS 11 |
| VNClassifyImageRequest | Klasifikace obrázků | iOS 13 |
| VNDetectContoursRequest | Analýza kontur | iOS 14 |
| VNTrackObjectRequest | Sledování objektů | iOS 11 |
Často kladené otázky
Vision poskytuje hotové algoritmy (detekce obličejů, OCR, čárové kódy) bez trénování modelu. Core ML „ je engine pro provádění vlastních modelů. Vision + VNCoreMLRequest umožňují spouštět Core ML modely v pipeline Vision, kombinující to nejlepší z obou světů: hotové detektory Vision + vlastní klasifikace Core ML.
Ano, Vision podporuje zpracování video streamu v reálném čase prostřednictvím VNSequenceRequestHandler pro sledování a prostřednictvím AVCaptureVideoDataOutput pro zpracování snímek po snímku. Na zařízeních s A12+ a Neural Engine Vision zpracovává až 60 snímků za sekundu pro detekci obličejů. Pro náročné úkoly (OCR, klasifikace) se doporučuje zpracovávat každý 5–10. snímek.
VNRecognizeTextRequest podporuje 13 jazyků: angličtinu, ruštinu, čínštinu (zjednodušenou a tradiční), japonštinu, korejštinu, italštinu, němčinu, španělštinu, portugalštinu, francouzštinu, arabštinu, vietnamštinu a thajštinu. Pro rozpoznávání více jazyků na jednom obrázku uveďte pole ve vlastnosti recognitionLanguages.
Ano, prostřednictvím VNCoreMLRequest. Vytvoříte model Core ML, zabalený do VNCoreMLModel, a předáte jej VNCoreMLRequest. Vision automaticky zpracovává předzpracování obrázku (škálování, oříznutí) a předává jej modelu Core ML. Výsledek je vrácen jako VNCoreMLFeatureValueObservation s výstupními daty modelu.
Ne, Vision provádí celou analýzu zcela na zařízení. Obrázky neopouštějí zařízení uživatele. To je základní architektura Apple: všechny ML frameworky (Vision, NaturalLanguage, Core ML, Speech) pracují on-device pro zajištění soukromí. Žádná data nejsou odesílána na servery Apple.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také