Как создать свое iOS-приложение для классификации животных в SwiftUI

Цель этой статьи — помочь разработчикам, которые впервые взаимодействуют с машинным обучением, с помощью простого руководства. Готовы начать работу с CoreML?

В этой статье я проведу вас через эти шаги:

  1. Создайте проект Xcode
  2. Импорт модели машинного обучения
  3. Сделайте простое представление с помощью SwiftUI

Давайте начнем!

Создайте проект Xcode

Прежде всего, я использовал Xcode для создания нового проекта Xcode.

Среди различных вариантов я выбрал приложение для iOS.

Для создания моего проекта необходимо ввести название проекта, группу и идентификатор продукта.

Импорт модели машинного обучения

Для работы с машинным обучением необходима обученная модель. Я использовал модель классификации изображений SqueezeNet. Его можно загрузить со страницы Developer Apple Core ML.



После загрузки мне нужно импортировать файл в проект Xcode.

Также можно открыть файл в Xcode, чтобы получить дополнительные сведения, такие как метка класса, распределение слоев и метаданные.

В модели также есть функция предварительного просмотра, чтобы убедиться, что модель подходит и правильно работает.

Чтобы проверить это, я вставил изображение и стал ждать результата.

Результат для 97 % — зонтик

Простой просмотр с SwiftUI

Теперь мне нужно сделать настоящее приложение. Прежде всего, мне нужно добавить несколько тестовых изображений в активы нашего проекта. Вы можете добавить нужные изображения, потому что позже мы конвертируем их в нужный формат. В этом случае я хочу создать классификатор животных, поэтому я добавляю изображения животных.

Я создал массив для хранения изображений и переменную состояния для ссылки на индекс массива.

let animals = ["tiger","flamingo", "horse"]

@State private var num_element : Int = 0

Я создал VStack с эталонным изображением, несколькими кнопками для навигации по массиву и кнопкой для классификации животных.

Импорт Core ML

Теперь мне нужно импортировать фреймворк CoreML

import CoreML

Затем добавьте новое свойство для ссылки на модель машинного обучения, которую я использую, в данном случае SqueezeNet. Мне также нужен элемент состояния, в котором будут храниться выходные данные модели ML.

let model = SqueezeNet()

@State private var classification: String = ""

Поскольку я импортировал изображения, не беспокоясь о формате и размере, я должен их преобразовать. Для этой модели мне нужно изображение CVPixelBuffer размером 227x227.

Чтобы преобразовать свое изображение, я буду использовать расширение изображения как это:

После этого я могу написать нашу функцию для идентификации животных. В первую очередь мне нужно взять изображение из ассетов. Потом конвертирую в нужный формат. Используя модель SqueezeNet, можно сделать прогноз для выбранного изображения. Результатом будет отсортированный массив от самого надежного до наименее надежного из всех возможных прогнозов. Затем я беру три первых результата и сохраняю их в переменной.

Окончательный результат:

В заключение, это метод создания простого классификатора животных с использованием машинного обучения и SwiftUI.

Весь проект доступен на моем GitHub: