Vision: framework počítačového vidění v iOS

Autor: IT Sectr Publikováno: 2026-07-19 Doba čtení: 9 min

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 „ on-device framework počítačového vidění Apple s plným cyklem analýzy na zařízení.
  • Podporuje detekci obličejů, rozpoznávání textu (OCR), čárové kódy, klasifikaci a sledování objektů.
  • Funguje prostřednictvím jednotného mechanismu VNRequest „ dotazy na obrázek nebo video stream.
  • Integruje se s Core ML pro vlastní modely přes VNCoreMLRequest.
  • Framework optimalizovaný pro Neural Engine na čipech A12+ pro reálný čas.

Co je Vision v iOS?

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.

Detekce a rozpoznávání obličejů

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).

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 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.

Rozpoznávání textu (OCR) s Vision

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.

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

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 LevelRychlostPřesnost (angličtina)Podpora ruštiny
.fast0.1–0.3 s~85%Ano
.accurate0.3–1.0 s~96%Ano

Detekce čárových kódů a QR

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.

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 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.

Sledování objektů ve video streamu

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.

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
    // 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í.

Klasifikace obrázků a analýza kontur

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.

swift
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ÚčelVerze iOS
VNDetectFaceRectanglesRequestVyhledávání obličejů na obrázkuiOS 11
VNRecognizeTextRequestRozpoznávání textu (OCR)iOS 13
VNDetectBarcodesRequestDetekce čárových kódů a QRiOS 11
VNClassifyImageRequestKlasifikace obrázkůiOS 13
VNDetectContoursRequestAnalýza konturiOS 14
VNTrackObjectRequestSledování objektůiOS 11

Často kladené otázky

Jaký je rozdíl mezi Vision a Core ML pro počítačové vidění?

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.

Funguje Vision v reálném čase na videu?

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.

Jaké jazyky podporuje VNRecognizeTextRequest?

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.

Lze použít Vision s modelem Core ML?

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.

Odesílá Vision obrázky na server Apple?

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í

  • Vision „ on-device framework počítačového vidění Apple s API založeným na VNRequest, dostupný od iOS 11 na všech zařízeních Apple.
  • VNDetectFaceRectanglesRequest a VNDetectFaceLandmarksRequest detekují obličeje a klíčové body pro filtry, masky a animace.
  • VNRecognizeTextRequest „ vestavěný OCR pro 13 jazyků s úrovněmi .fast a .accurate a přesností až 96% pro dokumenty.
  • VNDetectBarcodesRequest dekóduje všechny populární formáty čárových kódů a QR jak na fotografiích, tak ve video streamu.
  • VNTrackObjectRequest sleduje objekty mezi snímky videa pomocí optického toku bez přetrénování detektoru.
  • Integrace s Core ML přes VNCoreMLRequest umožňuje spouštět vlastní modely klasifikace a detekce v pipeline Vision.
  • Všechny výpočty probíhají na zařízení s využitím Neural Engine „ žádné obrázky nejsou odesílány na server, je zajištěno úplné soukromí dat.

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í.

Prodiskutovat projekt

Přečtěte si také