Делаем мир компьютерного зрения простым

Зачем использовать Amazon Rekognition?

Есть много способов интегрировать машинное обучение в приложение для iOS. Apple даже предлагает Core ML для обучения наших собственных моделей и получения прогнозов, которые выполняются на устройстве iOS. Однако вместо того, чтобы беспокоиться об обучении наших собственных моделей и множестве факторов, существуют облачные сервисы, к которым мы можем легко получить доступ, чтобы получить желаемые прогнозы. Amazon Rekognition - один из тех облачных сервисов, которые, среди прочего, упрощают идентификацию объектов, текста и людей.

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

Настройка вашего проекта

Если вы никогда раньше не использовали AWS Amplify CLI, вы можете следовать Руководству по началу работы. Если у вас нет учетной записи AWS, вам необходимо зарегистрировать ее, а затем установить и настроить интерфейс командной строки.

После настройки CLI давайте создадим новый проект в Xcode. Выберите «Приложение для одного просмотра». Выберите Swift в качестве языка и SwiftUI в качестве пользовательского интерфейса. Вы можете оставить жизненный цикл как «Приложение SwiftUI». Дайте ему название продукта и название организации, которые вы хотите.

Настройка Amplify

Учитывая, что вы уже настроили интерфейс командной строки AWS и Amplify на своем компьютере, выполните следующую команду в папке проекта:

$ amplify init

Это создаст новый проект Amplify на AWS. Здесь вы можете ввести имя проекта и среды. Выберите редактор по умолчанию, выберите приложение iOS в качестве типа и выберите профиль AWS, который хотите использовать.

После того, как вы увидите сообщение «Установка Amplify успешно завершена», вы можете запустить следующую команду, чтобы добавить плагин predictions:

$ amplify add predictions
  • Когда будет предложено, выберите категорию «Определить», так как мы собираемся работать с маркировкой изображений.
  • Вам нужно выбрать «Да», чтобы добавить auth в проект. Если вы его не используете, выберите электронную почту в качестве типа аутентификации и выберите «Определить ярлыки».
  • Вы можете выбрать имя ресурса по умолчанию, конфигурацию по умолчанию и, наконец, выбрать «Auth and Guest users», чтобы разрешить неподписанным пользователям использовать плагин predictions. В этой статье мы позволяем гостевым пользователям сосредоточиться на части прогнозирования, а не на аутентификации.

После настройки плагина predictions вы можете запустить следующую команду, чтобы отправить изменения в облако:

$ amplify push

Настройка модулей

После того, как все изменения перенесены в облако, нам нужно добавить CocoaPods в наш проект:

$ pod init

Теперь добавьте в Podfile следующие модули:

Для установки стручков нам нужно запустить:

$ pod install

Теперь, когда мы закончили настройку, мы можем открыть Xcode.

Проверьте файлы конфигурации AWS в Xcode

Если вы используете последнюю версию Amplify CLI на своем терминале, вы должны увидеть папку на изображении ниже при открытии Xcode:

Если вы не видите эту папку, вам нужно перетащить эти файлы в Xcode: awsconfiguration.jsonи amplifyconfiguration.json.

Возможно, нам потребуется обновить конфигурации Amplify. Чтобы сохранить только ссылку на исходные файлы, снимите флажок «Копировать элементы при необходимости» при перетаскивании файлов в проект.

Инициализация Amplify

Чтобы использовать Amplify, нам нужно инициализировать его в нашем App Lifecycle файле. В примере проекта, поскольку я назвал проект «SwiftUIAmplifyRekognitionTutorial», файл называется SwiftUIAmplifyRekognitionTutorialApp.swift. Вы должны изменить содержимое файла, чтобы оно выглядело так:

Поскольку в этом руководстве используется новый жизненный цикл SwiftUI, нам все еще нужно использовать UIApplicationDelegateAdaptor, чтобы инициализировать Amplify в didFinishLaunchingWithOptions. Если вы решили использовать традиционный AppDelegate жизненный цикл, вы можете изменить свой AppDelegate.swift, добавить initializeAWSAmplify метод и вызвать его.

Если вы заметили, мы добавили плагин Auth в initializeAWSAmplify. Несмотря на то, что мы позволим пользователю использовать прогнозы в качестве гостя, нам все равно нужно добавить этот плагин, чтобы успешно инициализировать Amplify.

Если вы видите сообщение «Amplify инициализировано» на консоли Xcode, все работает, как ожидалось.

Создание ImagePicker в SwiftUI

Теперь, когда наш проект полностью настроен, мы можем начать с создания ImagePicker, который позволит нам использовать камеру (при использовании физического устройства) или выбирать изображения из библиотеки.

Создайте новый файл в своем проекте и назовите его ImagePicker.swift. Затем добавьте в него следующий код:

Используя UIViewControllerRepresentable, мы сможем вызывать ImagePicker из наших представлений SwiftUI.

Установка разрешений на Info.plist

Прежде чем мы сможем получить изображения на нашем устройстве, нам нужно спросить у пользователя разрешения на доступ к камере и библиотеке. Для этого откройте свой Info.plist и добавьте ключ NSPhotoLibraryUsageDescription с описанием «Доступ к библиотеке необходим для получения изображения для маркировки» (или что-то еще, что вам подходит) и ключ NSCameraUsageDescription с описанием «Камера необходима для получить изображение для маркировки ».

Ваш Info.plist файл должен выглядеть так:

Маркировка изображений в ContentView

Теперь мы можем, наконец, начать выбирать изображения, а затем получать метки с помощью Amplify. Для этого мы можем создать очень простой пользовательский интерфейс в ContentView:

Как вы можете видеть в коде, мы создали простой VStack, содержащий текст и кнопку, на которой будет отображаться ImagePicker, который мы создали ранее, что позволяет нам сделать снимок с помощью камеры (при использовании физического устройства) или выбрать изображение из библиотека (при использовании симулятора). На том же VStack мы также добавили необязательный chosenImage (показан после нашего выбора) и Список (покажет метки, которые мы получаем с помощью плагина Amplify predictions). Ваше приложение должно выглядеть так:

Когда ImagePicker отклоняется, мы вызываем метод loadImage(), который проверяет, выбрали ли мы изображение, а затем сжимает изображение для более быстрой загрузки. Затем мы получаем URL-адрес изображения, чтобы передать его методу detectLabels(), который отобразит предсказанные метки, когда вызов AWS вернется. Как вы можете видеть на изображении ниже, при выборе изображения хот-дога мы получаем правильную этикетку с достоверностью 99,89%:

Заключение

Если вы хотите взглянуть на проект целиком, загляните в репозиторий GitHub.

Спасибо за прочтение!