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 моделі в пайплайні 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 автоматично обробляє попередню обробку зображення (масштабування, crop) і передає його в 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 дозволяє запускати кастомні моделі класифікації та виявлення всередині пайплайну Vision.
  • Всі обчислення виконуються на пристрої з використанням Neural Engine — жодної відправки зображень на сервер та повна конфіденційність даних.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також