Машинное обучение и 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-адресе на желаемое имя.
Вот исходный код моего полного проекта. Пожалуйста, оставьте звезду. Я приветствую участие в пользовательском интерфейсе, если хотите!
Это была моя первая статья среднего размера, над которой я много работал, поэтому, пожалуйста, оставьте несколько аплодисментов, если вам понравилась моя работа. Это побудило бы меня писать больше в будущем!