Vision „ е рамка за компютърно зрение на Apple, представена за първи път в iOS 11 през 2017 година. Vision предоставя готови алгоритми за откриване на лица, разпознаване на текст (OCR), откриване на баркодове, проследяване на обекти, класификация на изображения и анализ на контури „ всичко се изпълнява на устройството с помощта на Neural Engine. Според данни от Apple WWDC 2023, Vision се използва в стандартното приложение „Снимки" за разпознаване на лица и в „Камера" за откриване на текст в реално време на iPhone и iPad.
Основни точки
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).
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, който оценява качеството на изображението на лицето: осветление, острота, ъгъл на завъртане. Това е полезно за избор на най-добрия кадър при регистрация на потребител или създаване на аватар.
VNRecognizeTextRequest „ е вграденият OCR двигател на Apple, представен в iOS 13. Той разпознава печатен текст върху изображения с поддръжка на 13 езика: английски, руски, китайски, японски, корейски, италиански, немски, испански, португалски, френски, арабски, виетнамски и тайландски.
VNRecognizeTextRequest поддържа две нива на точност: .fast (бърз, за прост текст на контрастен фон) и .accurate (точен, за сложни сцени с различни шрифтове и ъгли). .fast работи 3–5 пъти по-бързо, но се справя по-зле с ръкописен текст и нестандартни шрифтове.
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 | Скорост | Точност (английски) | Поддръжка на руски |
|---|---|---|---|
| .fast | 0.1–0.3 сек | ~85% | Да |
| .accurate | 0.3–1.0 сек | ~96% | Да |
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 на кода с точност до пиксел, което е удобно за анимиране на рамка около намерения код.
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 приема последователност от изображения (видео кадри) и за всеки кадър връща актуализирана позиция на проследявания обект. Това се използва в приложения с добавена реалност, видео редактори и системи за видеонаблюдение.
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 извършва анализ на контурите на изображението „ извлича границите на обектите, което е полезно за сегментация, очертаване и предварителна обработка преди разпознаване. Заявката връща масив от точки, описващи всеки контур в изображението.
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 | Откриване на баркодове и QR | iOS 11 |
| VNClassifyImageRequest | Класификация на изображения | iOS 13 |
| VNDetectContoursRequest | Анализ на контури | iOS 14 |
| VNTrackObjectRequest | Проследяване на обекти | iOS 11 |
Често задавани въпроси
Vision предоставя готови алгоритми (откриване на лица, OCR, баркодове) без обучение на модел. Core ML „ е двигателят за изпълнение на персонализирани модели. Vision + VNCoreMLRequest позволяват стартиране на Core ML модели в pipeline-а на Vision, комбинирайки най-доброто от двата свята: готовите детектори на Vision + персонализираната класификация на Core ML.
Да, Vision поддържа обработка на видео поток в реално време чрез VNSequenceRequestHandler за проследяване и чрез AVCaptureVideoDataOutput за покадрова обработка. На устройства с A12+ и Neural Engine, Vision обработва до 60 кадъра в секунда за откриване на лица. За тежки задачи (OCR, класификация) се препоръчва обработка на всеки 5–10 кадър.
VNRecognizeTextRequest поддържа 13 езика: английски, руски, китайски (опростен и традиционен), японски, корейски, италиански, немски, испански, португалски, френски, арабски, виетнамски и тайландски. За разпознаване на няколко езика на едно изображение, посочете масив в свойството recognitionLanguages.
Да, чрез VNCoreMLRequest. Създавате модел Core ML, обвит в VNCoreMLModel, и го предавате на VNCoreMLRequest. Vision автоматично управлява предварителната обработка на изображението (мащабиране, изрязване) и го предава на модела Core ML. Резултатът се връща като VNCoreMLFeatureValueObservation с изходните данни на модела.
Не, Vision извършва целия анализ изцяло на устройството. Изображенията не напускат устройството на потребителя. Това е основната архитектура на Apple: всички ML рамки (Vision, NaturalLanguage, Core ML, Speech) работят on-device за осигуряване на поверителност. Никакви данни не се изпращат до сървърите на Apple.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също