Rámec Vision představil Apple v roce 2017 na WWDC jako součást iOS 11. Jeho uvedení znamenalo zlom ve vývoji strojového vidění a analýzy obrazu, protože vývojářům poskytuje nativní nástroje pro analýzu vizuálního obsahu a následné zpracování podle potřeby. V roce 2017 společnost Vision představila: Rozpoznávání textu Rozpoznávání obličeje Detekce pravoúhlých tvarů Rozpoznávání čárových a QR kódů Od svého debutu Apple neustále vylepšuje rámec Vision a zajišťuje, že se vyvíjí tak, aby vyhovoval moderním požadavkům. Do konce roku 2024, s vydáním iOS 18, Vision nyní nabízí: Vylepšená přesnost rozpoznávání textu s podporou velkého počtu jazyků Detekce tváří a jejich rysů Schopnost analyzovat pohyby Schopnost rozpoznávat pozice, včetně polohy rukou a klíčových bodů lidského těla Podpora pro sledování objektů ve videu Vylepšená integrace s CoreML pro práci s vlastními modely strojového učení Hluboká integrace se souvisejícími frameworky, jako je AVKit, ARKit S příchodem rámce Vision získali vývojáři možnost provádět pokročilé úlohy analýzy obrazu a videa nativně, aniž by se spoléhali na řešení třetích stran. Mezi tyto funkce patří skenování dokumentů, rozpoznávání textu, identifikace tváří a pozic, detekce duplicitních obrázků a automatizace různých procesů, které zefektivňují obchodní operace. V tomto článku se podíváme na hlavní scénáře používání Vision s příklady kódu, které vám pomohou pochopit, jak s ním pracovat, pochopit, že to není těžké, a začít ho aplikovat v praxi ve vašich aplikacích. Žádost o VNR Vision má abstraktní třídu , která definuje struktury požadavků na data ve Vision, a podřízené třídy implementují specifické požadavky na provedení konkrétních úkolů s obrázkem. VNRequest Všechny podtřídy dědí inicializátor od třídy . VNRequest public init(completionHandler: VNRequestCompletionHandler? = nil) Což vrací výsledek zpracování požadavku. Je důležité objasnit, že výsledek požadavku bude vrácen ve stejné frontě, ve které byl požadavek odeslán. Kde je typový alias. VNRequestCompletionHandler public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void Což vrátí s výsledky požadavku nebo Error, pokud požadavek nebyl proveden kvůli nějaké systémové chybě, nesprávnému obrazu atd. VNRequest Třída z abstraktní třídy je navržena pro zpracování požadavků na rozpoznávání textu v obrázcích. VNRecognizeTextRequest VNRequest Příklad implementace požadavku na rozpoznání textu: import Vision import UIKit func recognizeText(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNRecognizeTextRequest { request, error in // 1 guard let observations = request.results as? [VNRecognizedTextObservation] else { return } // 2 for observation in observations { if let topCandidate = observation.topCandidates(1).first { print("Recognized text: \(topCandidate.string)") print("Text boundingBox: \(observation.boundingBox)") print("Accuracy: \(topCandidate.confidence)") } } } request.recognitionLevel = .accurate request.usesLanguageCorrection = true let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 } Vytvořte požadavek pro rozpoznávání textu. VNRecognizeTextRequest Přijměte výsledky požadavku na rozpoznání textu jako pole objektů VNRecognizedTextObservation. Objekt obsahuje: VNRecognizedTextObservation Pole rozpoznaných textů (V ) NRecognizedText().string Přesnost rozpoznávání ( ) VNRecognizedText().důvěra Souřadnice rozpoznaného textu na obrázku ( ) VNRecognizedText().boundingBox Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání textu. Rozpoznání daňového identifikačního čísla a čísla pasu při vývoji vlastního SDK pro rozpoznávání dokumentů Příklad: VNDetectFaceRectanglesRequest Tato třída najde tváře v obrázku a vrátí jejich souřadnice. Příklad implementace požadavku na rozpoznání obličeje: import Vision import UIKit func detectFaces(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNDetectFaceRectanglesRequest { request, error in // 1 guard let results = request.results as? [VNFaceObservation] else { return } // 2 for face in results { print("Face detected: \(face.boundingBox)") } } let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 } Vytvořte požadavek pro rozpoznání obličeje v obrázku. VNDetectFaceRectanglesRequest Přijměte výsledky požadavku na rozpoznání textu jako pole objektů . VNFaceObservation Objekt obsahuje: VNFaceObservation Souřadnice rozpoznané plochy VNFaceObservation().boundingBox. Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání obličeje. V bankách existuje onboarding KYC, kde se musíte vyfotit s pasem; tímto způsobem můžete potvrdit, že se jedná o tvář skutečné osoby. Příklad: VNDetectBarcodesRequest Tato třída rozpoznává a čte čárové kódy a QR kódy z obrázku. Příklad implementace požadavku na rozpoznání a načtení čárového a QR kódu: import Vision import UIKit func detectBarcodes(from image: UIImage) { guard let cgImage = image.cgImage else { return } let request = VNDetectBarcodesRequest { request, error in // 1 guard let results = request.results as? [VNBarcodeObservation] else { return } // 2 for qrcode in results { print("qr code was found: \(qrcode.payloadStringValue ?? "not data")") } } let handler = VNImageRequestHandler(cgImage: cgImage, options: [:]) // 3 try? handler.perform([request]) // 3 } Vytvořte požadavek pro uznání. VNDetectBarcodesRequest Získejte výsledky požadavku na pole objektů . VNBarcodeObservation Objekt obsahuje mnoho vlastností, včetně: VNBarcodeObservation – hodnota řetězce čárového kódu nebo QR kódu. VNFaceObservation().payloadStringValue Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání obličeje. QR skener pro čtení QR kódů pro platbu. Příklad: Pokryli jsme 3 hlavní typy dotazů ve Vision, abychom vám pomohli začít s tímto mocným nástrojem.