Что вы можете ожидать от этого блога?

  1. Что такое машинное обучение?
  2. Что такое CoreML?
  3. Что такое структура видения?
  4. Что такое CreateML?
  5. Как обучить модель с помощью CreateML?
  6. Создайте образец приложения для распознавания изображений (логотипов)

Начнем с моей любимой цитаты о машинном обучении:

Если вы будете пытать данные достаточно долго, они признаются.

Что такое машинное обучение?

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

Он рассматривается как часть искусственного интеллекта.

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

Например, Apple использует машинное обучение в приложении для работы с фотографиями, чтобы распознавать лица, и в приложении для клавиатуры, чтобы прогнозировать следующее слово

Что такое CoreML?

import CoreML

Фреймворк от Apple для интеграции моделей машинного обучения в ваше приложение.

Core ML автоматически генерирует класс Swift, который обеспечивает легкий доступ к вашей модели ML. CoreML легко настроить и использовать в iOS, когда у нас есть набор данных модели.

Что такое модель?

Core ML применяет алгоритм машинного обучения к набору обучающих данных для создания модели. Эта модель используется для прогнозирования на основе новых входных данных. Например, вы можете обучить модель классифицировать фотографии или обнаруживать определенные объекты на фотографии непосредственно по ее пикселям.

Что такое структура видения?

import Vision

Структура Vision работает с Core ML для применения моделей классификации к изображениям и для предварительной обработки этих изображений, чтобы сделать задачи машинного обучения проще и надежнее.

Несколько ранее существовавших API-интерфейсов из платформы Vision: обнаружение лица и тела, обнаружение животных, обнаружение текста, обнаружение штрих-кода.

Речь, естественный язык и звуковой анализ

Мы знаем, что Core ML поддерживает Vision для анализа изображений так же, как использует Естественный язык для обработки текста.

Используйте эту структуру для выполнения таких задач, как:

  • Идентификация языка автоматически определяет язык фрагмента текста.
  • Токенизация, разбиение фрагмента текста на лингвистические единицы или токены.
  • Пометка частей речи, пометка отдельных слов их частями речи.
  • Лемматизация, вывод основы слова на основе его морфологического анализа.
  • Распознавание именованных объектов, определяющее токены как имена людей, мест или организаций.

Речь для преобразования аудио в текст и Анализ звука для определения звуков в аудио.

Используйте платформу «Речь», чтобы распознавать произносимые слова в записанном или живом аудио. Поддержка диктовки клавиатуры использует распознавание речи для преобразования аудиоконтента в текст.

Что такое CreateML?

CreateML — это инструмент, предоставляемый Apple (приложение в комплекте с Xcode) для создания моделей машинного обучения (***.mlmodel) для использования в вашем приложении. Модели машинного обучения на других языках также можно легко преобразовать в наше приложение .mlmodel by CreateML.

API

VNCoreMLRequest -- Запрос на анализ изображения, использующий модель Core ML для обработки изображений.

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

VNClassificationObservation -- Классификационная информация, созданная запросом анализа изображения.

VNObservatoinResults -- Коллекция результатов VNObservation, сгенерированных обработкой запроса.

Как обучить модель с помощью CreateML?

Откройте CreateML, перейдя в меню Xcode и нажав Открыть инструмент разработчика → CreateML. Затем создайте новый проект. Перейдите к разделу Model Sources на левой панели. Это наша модель, мы будем ее тренировать, строить и использовать. (есть и другие способы создания MLModel, такие как игровые площадки и терминал, не стесняйтесь их исследовать)

Для создания модели нам нужен набор данных логотипа, такой же можно получить от Kaggle (Kaggle, дочерняя компания Google LLC, представляет собой онлайн-сообщество специалистов по данным и специалистов по машинному обучению). Kaggle имеет тысячи наборов данных, загруженных различные разработчики машинного обучения. После того, как вы загрузили набор данных. Откройте окно CreateML и коснитесь файла LogoDetector в источниках моделей. Это окно имеет два основных столбца: 1. Данные и 2. Параметры. Давайте сосредоточимся на столбце данных, который состоит из:

  1. Данные для обучения:

Первый шаг — предоставить Create ML некоторые обучающие данные. Откройте загруженную папку и перетащите папку поезда в этот столбец.

Дополнительный совет: для распознавания изображений попробуйте добавить к изображению дополнения, такие как размытие и шум, которые повысят точность. Увеличение числа итераций также повысит точность. но оба эти изменения увеличат время обучения.

2. Данные проверки:

Эти проверочные данные используются для проверки его модели: он делает прогноз на основе входных данных, а затем проверяет, насколько этот прогноз отличается от реального значения, полученного из данных. По умолчанию установлено значение «Автоматически» — разделить данные обучения.

3. Данные тестирования:

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

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

Затем он автоматически запускает процесс оценки (тестирования) с предоставленным нами набором данных для тестирования:

Теперь наша MLModel готова к добавлению в проект, нажмите на вкладку «Вывод» в центре вверху, нажмите на значок «Получить» и сохраните его.

Создайте образец приложения для распознавания изображений (логотипов)

Создайте новый проект iOS в Xcode (раскадровка, а не SwiftUI) и перетащите MLModel, который мы создали выше. Теперь цель состоит в том, чтобы создать приложение, которое открывает вид с камеры и сканирует любой захваченный логотип (изображение), проверяет его с помощью созданной нами модели ml и отображает результат в метке.

Финальный проект можно скачать здесь

  1. Удалить файл раскадровки, Удалить основной интерфейс иУдалить Main.storyboard из Info.plist.
  2. В этом уроке мы собираемся использовать AVCaptureSession для захвата изображения с камеры и обработки его с помощью платформы CoreML Vision, поэтому нам нужно добавить строку разрешение камеры в info.plist. Щелкните правой кнопкой мыши Info.plist → Открыть как исходный код, добавьте ниже в ‹dict›
<key>NSCameraUsageDescription</key>
<string>Accessing your camera to take photo.</string>

3. Теперь давайте попробуем показать диалог разрешения камеры в viewDidLoad и попробуем получить разрешение пользователя, чтобы начать захват изображений:

4. После предоставления разрешения нам нужно создать AVCaptureSession.

Что такое AVCaptureSession?

Чтобы выполнить захват в реальном времени, вы создаете экземпляр объекта AVCaptureSession и добавляете соответствующие входы и выходы.

После создания экземпляра AVCaptureSession необходимо добавить соответствующие входные и выходные данные для него. Здесь вход → камера устройства по умолчанию, а тип медиа камеры — video.

AVCaptureDevice.default(for: AVMediaType.video) // MediaType
AVCaptureDeviceInput(device: captureDevice)     // Input

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

private let photoOutput = AVCapturePhotoOutput()

После настройки ввода-вывода. Давайте добавим вид с камеры в вид ViewController с помощью `AVCaptureVideoPreviewLayer`, и, наконец, сессия должна быть запущена с помощью

captureSession.startRunning()

Этот вызов запускает поток данных от входа к выходу. Теперь мы настроили AVCaptureSession и добавили представление камеры в представление ViewController.

5. Поскольку сессия готова, мы можем начать захват изображения через камеру.

Здесь мы создали объект `AVCapturePhotoSettings`, что помогло нам настроить параметры перед захватом фотографии. Здесь мы должны вызвать метод `capturePhoto()` с настройками фотографии и делегировать.

6. Подтвердите `AVCapturePhotoCaptureDelegate` в ViewController и добавьте его метод photoOutput().

func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?)

Этот метод помогает нам доставить выходные данные из captureSession, которые представляют собой imageData и правильное изображение из него.

7. Теперь, когда у нас есть изображение, захваченное с устройства, нам нужно обработать его с помощью MLModel, чтобы получить результат:

Здесь мы создали `classificationRequest` с типом VNCoreMLRequest, и ему нужна модель, когда мы переместили MLModel, загруженную из CreateML, в проект, Xcode автоматически создает для нас класс swift LogoDetector. Кроме того, запрос предоставляет обработчик завершения с `VNRequest`, когда запрос получен после обработки с помощью модели.

Теперь заключительная часть — обработка запроса/результата модели при передаче в нее изображения.

Здесь мы получаем массив классификаций в составе результата, фильтруем элемент с максимальной достоверностью,

Что такое доверие?

Уровень уверенности, нормализованный к [0, 1], где 1 означает максимальную уверенность.

Примечание. Уверенность всегда можно вернуть как 1 ☹️, если уверенность не поддерживается или не имеет смысла, поэтому играйте с ней осторожно.

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

8. Всякий раз, когда мы получаем объект изображения из метода `photoOutput` в `AVCapturePhotoCaptureDelegate`, его необходимо передать в `VNImageRequestHandler` для обработки результатов, как показано ниже:

9. давайте запустим наше приложение и посмотрим, как оно работает

Некоторые моменты, которые следует помнить:

***.mlmodel нельзя динамически обновлять на устройстве пользователя после установки приложения, если нам нужно использовать новую модель, мы должны заменить существующую.

***.mlmodel можно использовать с Ресурсами по запросу, чтобы его можно было обновлять кому угодно по воздуху,

Конфиденциальность пользователя строго поддерживается внутри этого процесса сканирования, распознавания, потому что это происходит внутри устройства пользователя, НИКАКИХ API, без сбора данных от третьих лиц,

Скорость обработки результатов является первоклассной на устройствах iOS, а размер создаваемых MLModels намного меньше, чем у других альтернатив CreateML.

Надеюсь, статья вам помогла. Если вам понравилась эта статья, дайте мне знать 👏 И вы можете поймать меня на LinkedIn https://www.linkedin.com/in/muralidharankathiresan/