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:
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í:
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.
Vision má abstraktní třídu VNRequest , 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.
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 VNRequestCompletionHandler je typový alias.
public typealias VNRequestCompletionHandler = (VNRequest, (any Error)?) -> Void
Což vrátí VNRequest s výsledky požadavku nebo Error, pokud požadavek nebyl proveden kvůli nějaké systémové chybě, nesprávnému obrazu atd.
Třída VNRecognizeTextRequest z abstraktní třídy VNRequest je navržena pro zpracování požadavků na rozpoznávání textu v obrázcích.
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 VNRecognizeTextRequest pro rozpoznávání textu.
Přijměte výsledky požadavku na rozpoznání textu jako pole objektů VNRecognizedTextObservation.
Objekt VNRecognizedTextObservation obsahuje:
Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání textu.
Příklad: Rozpoznání daňového identifikačního čísla a čísla pasu při vývoji vlastního SDK pro rozpoznávání dokumentů
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 VNDetectFaceRectanglesRequest pro rozpoznání obličeje v obrázku.
Přijměte výsledky požadavku na rozpoznání textu jako pole objektů VNFaceObservation .
Objekt VNFaceObservation obsahuje:
Souřadnice rozpoznané plochy VNFaceObservation().boundingBox.
Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání obličeje.
Příklad: 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.
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 VNDetectBarcodesRequest pro uznání.
Získejte výsledky požadavku na pole objektů VNBarcodeObservation .
Objekt VNBarcodeObservation obsahuje mnoho vlastností, včetně:
VNFaceObservation().payloadStringValue – hodnota řetězce čárového kódu nebo QR kódu.
Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání obličeje.
Příklad: QR skener pro čtení QR kódů pro platbu.
Pokryli jsme 3 hlavní typy dotazů ve Vision, abychom vám pomohli začít s tímto mocným nástrojem.