Распознавание объектов с использованием Vision

ML - алгоритм, позволяющий конвертировать входные различных типов в нужные нам выходные данные. Основной сложностью при работе с ML является обучение модели. Например, конвертация изображений в описание того, что отображается на изображении.

Vision - фреймворк от Apple, позволяющий производить различные операции с изображениями и видео, распознавание лица, текста, объектов. Также, используя свою ML модель, можно производить классификацию или распознавание объектов. В данной статье мы рассмотрим классификацию объектов по обученной ML модели.
Для распознавания объектов, используя Vision, нужно добавить ML модель: можно использовать готовую или обучить свою собственную. Обучение можем производить прямо в Playground. Для обучения нужно подать в модель папки с объектами, которые будут распознаваться. После обучения создается файл с расширением .mlmodel. В итоге получается модель с входными и выходными данными: входными данными являются изображения, выходными произвольные текстовые данные - в большинстве случаев это наиболее подходящее описание изображения, либо позиция распознанного изображения во входном.
Далее мы будем использовать этот файл в нашем приложении. Для упрощения работы с моделью импортируем CoreKit фреймворк, позволяющий инициализировать модель по названию файла, вместо компилирования модели по ссылке:


import CoreML				

let model = try MLModel(contentsOf: urlToModel)
var model: YourModelName!
model = YourModelName()
Для распознавания нужно преобразовать изображение в CVPixelBuffer
В большинстве случаев нужно преобразовывать входное изображение до конкретных размеров (в нашем случае 224x224).
После преобразования производим распознавание командой YourModelName.predict(data: pixelBuffer) и получаем выходные данные нашей модели.
Для работы с моделями, где выходными данными является позиция объекта в изображении, используется Vision. Для Vision создается отдельная переменная модели с типом VNCoreMLModel. После этого, производим запрос на выходные данные с модели и, например, отрисовываем объект в кадре.
Спасибо за внимание!