Vision: рамка за компютърно зрение в iOS

Автор: IT Sectr Публикувано: 2026-07-19 Време за четене: 9 мин

Vision „ е рамка за компютърно зрение на Apple, представена за първи път в iOS 11 през 2017 година. Vision предоставя готови алгоритми за откриване на лица, разпознаване на текст (OCR), откриване на баркодове, проследяване на обекти, класификация на изображения и анализ на контури „ всичко се изпълнява на устройството с помощта на Neural Engine. Според данни от Apple WWDC 2023, Vision се използва в стандартното приложение „Снимки" за разпознаване на лица и в „Камера" за откриване на текст в реално време на iPhone и iPad.

Основни точки

  • Vision „ on-device рамка за компютърно зрение на Apple с пълен цикъл на анализ на устройството.
  • Поддържа откриване на лица, разпознаване на текст (OCR), баркодове, класификация и проследяване на обекти.
  • Работи чрез единен механизъм VNRequest „ заявки към изображение или видео поток.
  • Интегрира се с Core ML за персонализирани модели чрез VNCoreMLRequest.
  • Рамката е оптимизирана за Neural Engine на чипове A12+ за реално време.

Какво е Vision в iOS?

Vision „ е високо ниво рамка за компютърно зрение, която абстрахира сложни алгоритми за машинно обучение зад прост API за заявки (VNRequest). Разработчикът не трябва да разбира от конволюционни невронни мрежи „ достатъчно е да създаде заявка от подходящ тип, да предаде изображението и да получи резултата.

Архитектурата на Vision е изградена на принципа Request → Handler → Result: VNImageRequestHandler приема изображение, изпълнява VNRequest и връща масив от VNObservation с резултати. Това позволява комбиниране на няколко заявки към едно изображение „ например едновременно откриване на лица и текст на снимка.

Vision поддържа iOS 11+ и macOS 10.13+. За хардуерно ускорение чрез Neural Engine е необходим чип A12 Bionic или по-нов. На устройства с A17 Pro и M серия, Vision обработва до 60 кадъра в секунда за поточно видео.

Ключово предимство на Vision „ пълна поверителност: всички изчисления се извършват на устройството, изображенията не се изпращат до сървър. Това позволява използването на рамката в приложения, работещи с чувствителни данни, например в медицински или банкови приложения.

Откриване и разпознаване на лица

VNDetectFaceRectanglesRequest „ основната заявка на Vision за откриване на лица в изображение. Връща координатите на правоъгълниците, ограничаващи всяко лице, без идентификация на конкретен човек.

За по-подробен анализ използвайте VNDetectFaceLandmarksRequest, който определя ключовите точки на лицето: очи, вежди, нос, уста, контур на челюстта. Тези данни се използват за налагане на маски, анимация на емоджита и филтри в реално време (както във FaceTime и Snapchat).

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 съдържа не само boundingBox, но и confidence (увереност от 0 до 1) и landmarks „ масив от точки на лицето, ако заявката е била VNDetectFaceLandmarksRequest. Confidence под 0.5 обикновено означава фалшиво откриване „ такива резултати се препоръчва да се отхвърлят.

Vision също поддържа VNDetectFaceCaptureQualityRequest, който оценява качеството на изображението на лицето: осветление, острота, ъгъл на завъртане. Това е полезно за избор на най-добрия кадър при регистрация на потребител или създаване на аватар.

Разпознаване на текст (OCR) с Vision

VNRecognizeTextRequest „ е вграденият OCR двигател на Apple, представен в iOS 13. Той разпознава печатен текст върху изображения с поддръжка на 13 езика: английски, руски, китайски, японски, корейски, италиански, немски, испански, португалски, френски, арабски, виетнамски и тайландски.

VNRecognizeTextRequest поддържа две нива на точност: .fast (бърз, за прост текст на контрастен фон) и .accurate (точен, за сложни сцени с различни шрифтове и ъгли). .fast работи 3–5 пъти по-бързо, но се справя по-зле с ръкописен текст и нестандартни шрифтове.

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

Свойството usesLanguageCorrection включва корекция на разпознатия текст с помощта на езиков модел. Това повишава точността за английски с 10–15%, но удължава времето за обработка. За руски език корекцията също е достъпна, ако е посочено съответното разпознаване.

Според Apple ML Research 2022, точността на VNRecognizeTextRequest на ниво .accurate е 96% за ясни снимки на документи на английски и около 88% за руски. За текст върху опаковки, табели и екрани точността спада до 75–85%.

Recognition LevelСкоростТочност (английски)Поддръжка на руски
.fast0.1–0.3 сек~85%Да
.accurate0.3–1.0 сек~96%Да

Откриване на баркодове и QR кодове

VNDetectBarcodesRequest „ заявка на Vision за откриване и декодиране на баркодове и QR кодове върху изображение. Поддържат се всички основни формати: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, PDF417, Aztec и QR.

За разлика от AVFoundation (AVCaptureMetadataOutput), Vision работи не само с видео поток, но и със статични изображения „ това позволява сканиране на кодове от вече направени снимки или екранни снимки. Vision също определя boundingBox на кода с точност до пиксел, което е удобно за анимиране на рамка около намерения код.

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 съдържа payloadStringValue (декодирано съдържание), symbology (тип код) и confidence. За QR кодове, payload може да бъде URL, текст или JSON. За EAN/UPC се връща цифровият код на продукта, който може да се използва за търсене на артикул в базата данни.

Vision може да обработи няколко баркода на едно изображение „ масивът observations съдържа по един обект за всеки открит код. Това е полезно за сканиране на продуктови пакети или документи с множество баркодове.

Проследяване на обекти във видео поток

VNDetectObjectAtPointRequest и VNSequenceRequestHandler „ инструменти на Vision за проследяване на обекти във видео поток. Първият определя обекта чрез точката на докосване на потребителя, вторият проследява обекта между кадрите на видеото.

VNSequenceRequestHandler приема последователност от изображения (видео кадри) и за всеки кадър връща актуализирана позиция на проследявания обект. Това се използва в приложения с добавена реалност, видео редактори и системи за видеонаблюдение.

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
    // Актуализирай позицията на обекта на екрана
}

VNTrackObjectRequest използва алгоритъм за проследяване, базиран на оптичен поток „ не преобучава детектора на всеки кадър, а изчислява преместването на обекта спрямо предишната позиция. Това позволява работа в реално време дори на устройства без Neural Engine.

Ограничение: проследяването може да загуби обекта при бързо движение, покриване или внезапна промяна на осветлението. Apple препоръчва рестартиране на откриването (VNDetectObjectAtPointRequest) на всеки 10–15 кадъра за корекция на проследяването.

Класификация на изображения и анализ на контури

VNClassifyImageRequest „ вграденият модел на Vision за класификация на изображения в 1000 категории (модел ResNet-50, обучен върху ImageNet). Заявката връща масив VNClassificationObservation с име на категория и увереност.

VNDetectContoursRequest извършва анализ на контурите на изображението „ извлича границите на обектите, което е полезно за сегментация, очертаване и предварителна обработка преди разпознаване. Заявката връща масив от точки, описващи всеки контур в изображението.

swift
import Vision

// Класификация на изображение
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 работи добре за общи категории (котка, куче, кола, храна), но не е подходящ за специфични обекти „ за тях трябва да се обучи персонализиран модел Core ML и да се използва VNCoreMLRequest. Моделът на Apple е оптимизиран за мобилни устройства и заема само 5 MB.

VNDetectContoursRequest връща контури под формата на масив от точки с посочване на типа контур (външен, вътрешен, дупка). Тази заявка се използва за предварителна обработка на изображения преди OCR (подобряване на контраста на текста), за рисуване на ефекти (очертаване на обекти) и за анализ на форми.

Vision заявкаПредназначениеiOS версия
VNDetectFaceRectanglesRequestТърсене на лица в изображениеiOS 11
VNRecognizeTextRequestРазпознаване на текст (OCR)iOS 13
VNDetectBarcodesRequestОткриване на баркодове и QRiOS 11
VNClassifyImageRequestКласификация на изображенияiOS 13
VNDetectContoursRequestАнализ на контуриiOS 14
VNTrackObjectRequestПроследяване на обектиiOS 11

Често задавани въпроси

Каква е разликата между Vision и Core ML за компютърно зрение?

Vision предоставя готови алгоритми (откриване на лица, OCR, баркодове) без обучение на модел. Core ML „ е двигателят за изпълнение на персонализирани модели. Vision + VNCoreMLRequest позволяват стартиране на Core ML модели в pipeline-а на Vision, комбинирайки най-доброто от двата свята: готовите детектори на Vision + персонализираната класификация на Core ML.

Работи ли Vision в реално време на видео?

Да, Vision поддържа обработка на видео поток в реално време чрез VNSequenceRequestHandler за проследяване и чрез AVCaptureVideoDataOutput за покадрова обработка. На устройства с A12+ и Neural Engine, Vision обработва до 60 кадъра в секунда за откриване на лица. За тежки задачи (OCR, класификация) се препоръчва обработка на всеки 5–10 кадър.

Кои езици поддържа VNRecognizeTextRequest?

VNRecognizeTextRequest поддържа 13 езика: английски, руски, китайски (опростен и традиционен), японски, корейски, италиански, немски, испански, португалски, френски, арабски, виетнамски и тайландски. За разпознаване на няколко езика на едно изображение, посочете масив в свойството recognitionLanguages.

Може ли Vision да се използва с модел Core ML?

Да, чрез VNCoreMLRequest. Създавате модел Core ML, обвит в VNCoreMLModel, и го предавате на VNCoreMLRequest. Vision автоматично управлява предварителната обработка на изображението (мащабиране, изрязване) и го предава на модела Core ML. Резултатът се връща като VNCoreMLFeatureValueObservation с изходните данни на модела.

Изпраща ли Vision изображения до сървъра на Apple?

Не, Vision извършва целия анализ изцяло на устройството. Изображенията не напускат устройството на потребителя. Това е основната архитектура на Apple: всички ML рамки (Vision, NaturalLanguage, Core ML, Speech) работят on-device за осигуряване на поверителност. Никакви данни не се изпращат до сървърите на Apple.

Резюме

  • Vision „ on-device рамка за компютърно зрение на Apple с API, базиран на VNRequest, достъпна от iOS 11 на всички устройства на Apple.
  • VNDetectFaceRectanglesRequest и VNDetectFaceLandmarksRequest откриват лица и ключови точки за филтри, маски и анимации.
  • VNRecognizeTextRequest „ вграден OCR за 13 езика с нива .fast и .accurate и точност до 96% за документи.
  • VNDetectBarcodesRequest декодира всички популярни формати на баркодове и QR кодове както на снимки, така и във видео поток.
  • VNTrackObjectRequest проследява обекти между видео кадри чрез оптичен поток без преобучване на детектора.
  • Интеграция с Core ML чрез VNCoreMLRequest позволява стартиране на персонализирани модели за класификация и откриване в pipeline-а на Vision.
  • Всички изчисления се извършват на устройството с помощта на Neural Engine „ никакви изображения не се изпращат до сървър, осигурена е пълна поверителност на данните.

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също