Машинное обучение и Flutter - две из моих любимых тем, в которых я люблю изучать все больше и больше! В этой статье я объясню, как можно включить машинное обучение в свое приложение flutter, используя возможности плагинов flutter. Итак, приступим!

Я объясню, как создать приложение с несколькими функциями машинного обучения с помощью firebase_ml_vision, tflite и созданного мной API!

Функции, которые мы будем делать:

  • Оптическое распознавание символов с преобразованием распознанного текста в речь.
  • Распознавание лиц.
  • Обнаружение объекта.
  • Маркировка изображений вместе с преобразованием меток изображений в речь.
  • Классифицируйте имена на мужские и женские, используя API, разработанный мной в моем проекте Genderify.

Начало работы:

  • Зависимости:

  • Добавьте Firebase в свой проект:

Используя Firebase Console, добавьте приложение Android в свой проект: следуйте инструкциям помощника, загрузите сгенерированный файл google-services.json и поместите его в android/app. Затем измените файл android/build.gradle и файл android/app/build.gradle, чтобы добавить плагин служб Google, как описано помощником Firebase.

Для большей наглядности можете обратиться к видео. Https://www.youtube.com/watch?v=DqJ_KjFzL9I

  • Убедитесь, что минимальная версия SDkVersion равна по крайней мере 21 в блоке defaultConfig под блоком android в файле android/app/build.gradle. Если нет, поменяйте.

1. Оптическое распознавание символов

  • Выберите изображение с помощью средства выбора изображений

Источник изображения можно изменить на камеру.

Изображение декодируется, потому что это требование OCR для чтения текста.

  • Чтение текста с изображения и передача распознанного текста в библиотеку преобразования текста в речь (TTS).

2. Распознавание лиц

  • Выберите изображение, как показано ранее.
  • Создайте экземпляр детектора лица и вызовите processImage с помощью visionImage.
  • Добавьте координаты лиц в список типа ‹Rect›.
  • Эти координаты будут использоваться Custom Painter для рисования ограничивающих рамок на изображении.

Вызовите класс Custom Painter и передайте ему список ‹Rect› и изображение (я свяжу свой репозиторий на github в конце этой статьи, чтобы вы могли увидеть, как я все реализовал).

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

Добавьте следующее в свой android/app/build.gradle файл.

android {
    dependencies {
        // ...

        api 'com.google.firebase:firebase-ml-vision-image-label-model:17.0.2'
    }
}

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

  • Используйте класс Image Labeler для обнаружения всех меток в выбранном изображении.
  • Подайте текст метки в объект TTS, чтобы преобразовать его в речь.

4. Обнаружение объектов

Это самая нестабильная часть моего проекта, но я над ней работаю. Библиотека обнаружения объектов плохо обнаруживает объекты и в большинстве случаев дает плохие результаты. Я не буду прикреплять github gists к этому, поскольку это сделало бы эту часть немного длинной, так что вы могли бы сослаться на исходный код, который я прикрепил в конце этой статьи.

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

Также вам нужно добавить следующее в блок android/app/build.gradle in android.

aaptOptions {
        noCompress 'tflite'
        noCompress 'lite'
    }

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

  • Загрузите модель tflite внутрь initState().
  • Применить прогнозы к выбранному изображению.
  • Визуализируйте поля, чтобы они были видны на изображении вместе с тегом и уровнем достоверности.

Бонусная часть:

5. Genderify: разделение имен на мужские и женские в зависимости от пола.

Что ж, здесь используется не плагин флаттера, а API, созданный мной в моем проекте:



Он размещен на героку. Вот как вы получаете доступ к API.

Модель обучена на иностранных именах, поэтому она дает меньшую точность для индийских имен.

Измените последний параметр в URL-адресе на желаемое имя.

Вот исходный код моего полного проекта. Пожалуйста, оставьте звезду. Я приветствую участие в пользовательском интерфейсе, если хотите!



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