paint-brush
Začínáme s platformou Apple Vision Framework: perspektiva vývojáře podle@threadmaster
Nová historie

Začínáme s platformou Apple Vision Framework: perspektiva vývojáře

podle Boris Dobretsov5m2025/02/19
Read on Terminal Reader

Příliš dlouho; Číst

Rámec Vision společnosti Apple byl představen v iOS 11. Umožňuje vývojářům analyzovat vizuální obsah a provádět následné zpracování podle potřeby. V tomto článku se podíváme na hlavní scénáře použití Vision s příklady kódu.
featured image - Začínáme s platformou Apple Vision Framework: perspektiva vývojáře
Boris Dobretsov HackerNoon profile picture
0-item
1-item

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


  1. Vytvořte požadavek VNRecognizeTextRequest pro rozpoznávání textu.


  2. Přijměte výsledky požadavku na rozpoznání textu jako pole objektů VNRecognizedTextObservation.


Objekt VNRecognizedTextObservation obsahuje:

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


  1. Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání textu.


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

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 }


  1. Vytvořte požadavek VNDetectFaceRectanglesRequest pro rozpoznání obličeje v obrázku.


  2. Přijměte výsledky požadavku na rozpoznání textu jako pole objektů VNFaceObservation .


Objekt VNFaceObservation obsahuje:

  1. Souřadnice rozpoznané plochy VNFaceObservation().boundingBox.


  2. Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání obličeje.


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


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 }


  1. Vytvořte požadavek VNDetectBarcodesRequest pro uznání.


  2. Získejte výsledky požadavku na pole objektů VNBarcodeObservation .


Objekt VNBarcodeObservation obsahuje mnoho vlastností, včetně:

  1. VNFaceObservation().payloadStringValue – hodnota řetězce čárového kódu nebo QR kódu.


  2. Vytvořte požadavek na zpracování obrazu a odešlete požadavek na rozpoznání obličeje.


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