Как я создал детектор номерных знаков, используя только FirebaseMLVision Framework

Обнаружение номерных знаков транспортных средств (или номерных знаков в некоторых странах) было темой интереса для многих энтузиастов AI / ML, и они использовали версию обнаружения объектов для обнаружения номерного знака на заданном изображении.

Сегодня я собираюсь написать о том, как обнаруживать и распознавать номерные знаки на изображении с помощью onDeviceTextRecognizer, включенного в библиотеку Firebase MLVision в ML Kit в приложении iOS, созданном с использованием Xcode 11.3.1 и Swift4.

Весь этот пост разделен на следующие части:

  1. Создание проекта в Xcode
  2. Настройка элементов пользовательского интерфейса для проекта
  3. Интегрируйте Firebase Vision Framework
  4. Запустите платформу для распознавания и обнаружения номерных знаков на изображении
  5. Альтернативные способы достижения этого

Создание проекта в Xcode

Если на вашем Mac еще не установлен Xcode, загрузите его с сайта developer.apple.com и зарегистрируйтесь для получения идентификатора Apple Id или загрузите его из магазина приложений. После того, как вы откроете Xcode, откройте его и нажмите «Создать новый проект Xcode».

Настройка элементов пользовательского интерфейса для вашего проекта

Не вдаваясь в подробности того, как добавлять элементы пользовательского интерфейса, я использовал ImageView для загрузки и отображения изображения транспортного средства и отображения рамки вокруг обнаруженного номерного знака. Кнопка с именем «Захватить изображение» для загрузки из библиотеки фотографий (в данном случае, поскольку я использую симулятор, вы также можете получить фотографию из источника камеры, если вы используете устройство iOS) с помощью UIImagePickerController. А остальные метки и текстовые поля для отображения деталей.

Интеграция Firebase Vision Framework

Первый шаг - включить в проект библиотеки комплектов машинного обучения, для этого вы можете Какао-стручки включить зависимость в свой проект. Чтобы узнать больше о том, как использовать Cocoa Pods, используйте эту ссылку: CocoaPods

Включите следующие данные в Podfile, сохраните его, запустите $ pod install и откройте yourapp.xcworkspace, чтобы начать работу над своим проектом.

Откройте файл viewcontroller.swift, добавьте import Firebase в начало файла.

Запустите платформу для распознавания и обнаружения номерных знаков на изображении

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

Получите экземпляр VisionTextRecognizer:

Создайте объект VisionImage и передайте изображение, снятое с помощью камеры телефона, с помощью UIImagePickerController.

Передайте созданный выше объект изображения в метод process (_ завершения :)

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

Если операция распознавания текста (метод. process ()) завершается успешно, она вернет объект VisionText, который содержит полный текст, распознанный на изображении, и ноль или более Объекты VisionTextBlock. Вы можете развернуть объект VisionTextBlock (который представляет собой прямоугольный блок текста), чтобы получить распознанный текст и ограничивающие координаты области. Для справки изучите VisionTextLine и VisionTextElement. Здесь я использовал регулярное выражение, чтобы отфильтровать обнаруженный текст, чтобы он соответствовал индийскому формату номерных знаков, вы можете изменить его в соответствии со своими потребностями.

Я также использовал метод drawRectangleOnImage , чтобы нарисовать ограничивающую рамку вокруг распознанного текста.

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

Справочник FirebaseMLVision для распознавания текста

Альтернативные способы достижения этой цели

Чтобы распознать номерные знаки на изображении, вы можете альтернативно:

  1. Обучите модель обнаружения объектов в CreateML, экспортируйте ее в mlModel и используйте в своем приложении ios с помощью CoreML. Это будет отдельный пост, следите за обновлениями
  2. Используйте YOLO V3 для обучения модели обнаружения объектов в пользовательском наборе данных, экспортируйте ее в ONNX, а затем в mlModel для использования в приложении iOS. Это тоже будет отдельный пост.