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
    // Update object position on screen
}

VNTrackObjectRequest использует алгоритм трекинга на основе оптического потока — он не переобучает детектор на каждом кадре, а вычисляет смещение объекта относительно предыдущего положения. Это позволяет работать в реальном времени даже на устройствах без Neural Engine.

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

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

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

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

swift
import Vision

// Image classification
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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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