Распознавайте нарисованные от руки цифровые формы с помощью мобильного машинного обучения
В программном пакете машинного обучения Google на устройстве представлен еще один полезный API - распознавание цифровых чернил на устройстве, с помощью которого вы можете распознавать рукописный текст и наброски на цифровой поверхности. API имеет широкую языковую поддержку, более чем на 300 языках. Ознакомьтесь с полным списком поддерживаемых языков здесь. Он также распознает некоторые основные формы и смайлы.
Еще одним преимуществом этого API является то, что он позволяет запускать модель в автономном режиме. Размер модели составляет около 20 МБ, что позволяет ей размещаться и работать на устройствах с ограниченными ресурсами.
В этой статье мы сделаем это на Android с помощью Digital Ink Recognition API Google ML Kit.
Что такое комплект ML?
ML Kit - это кроссплатформенный мобильный SDK (Android и iOS), разработанный Google, который позволяет разработчикам легко получать доступ к моделям мобильного машинного обучения на устройстве.
Все API-интерфейсы ML Kit запускаются на устройстве, что позволяет делать выводы в реальном времени и офлайн.
Чтобы использовать автономный SDK ML Kit на устройстве, мы можем просто реализовать его напрямую - нам не нужно создавать проект в Firebase или сопутствующем google.json
файле.
Если вы используете Firebase Machine Learning, вы можете проверить эту ссылку, чтобы выполнить миграцию.
Что вы построите
В этой статье мы собираемся создать простое приложение для Android, которое покажет вам, как реализовать API распознавания цифровых чертежей ML Kit.
Для целей этого демонстрационного проекта я только что реализовал функции рисования, в которых я нарисовал некоторые формы на цифровой поверхности - затем модель определит, какая это форма.
К концу этого урока вы должны увидеть что-то похожее на снимок экрана ниже:
Шаг 1. Добавьте зависимость
Во-первых, нам нужно добавить mlkit:-digital-ink-recognition
зависимость к нашему проекту Android в app/build.gradle
файле.
dependencies {
implementation 'com.google.mlkit:digital-ink-recognition:17.0.0'
}
Примечание. На момент написания последней
com.google.mlkit:digital-ink-recognition
версией была 17.0.0, но вы можете использовать любой из последних стабильных выпусков из Примечаний к выпуску ML Kit.
Не бойтесь пропустить последние новости машинного обучения. Подпишитесь на еженедельник Deep Learning Weekly, и позвольте нам делиться им с вами и 15 000 другими еженедельно.
Синхронизировать проект
После успешного добавления зависимости просто синхронизируйте проект, как показано на скриншоте ниже:
Шаг 2: Создайте объект чернил:
Прежде чем использовать модель для распознавания того, что рисует пользователь, нам нужно сначала создать Ink Object для цифровой поверхности, чтобы обнаруживать рукописные формы. Для этого воспользуемся Canvas в Android.
Чтобы нарисовать холст, мы должны сначала создать класс и расширить этот класс с помощью класса View.
В методе onDraw
нам нужно сначала нарисовать растровое изображение, используя объект холста, и передать растровое изображение холста и объект Paint холста в метод canvas.drawBitmap()
. Во-вторых, мы должны создать путь для рисования и передать объект Path и объект Stroke Paint.
В методе onTouchEvent
мы должны вызвать функцию addNewTouchEvent
и передать действие события на основе прослушивателя касаний.
Вот класс Drawing.kt
, чтобы увидеть, как эти шаги выглядят на практике:
Шаг 3. Создайте экземпляр DigitalInkRecognizer
Чтобы выполнить распознавание, нам теперь нужно создать экземпляр DigitalInkRecognizer.
Сначала давайте создадим экземпляр, который мы отправим в объект DigitalInkRecognizer.
Кроме того, здесь мы должны загрузить модель DigitalInkRecognizer, которая будет использоваться для распознавания эскизов с использованием класса DigitalInkRecognitionModel
, и передать этот объект в объект DigitalInkRecognizer.
Теперь давайте перейдем к коду, чтобы увидеть, как эти шаги выглядят на практике:
Шаг 4. Обработка объекта Ink
На этом этапе нам нужно обработать объект Ink и выполнить распознавание. Поскольку мы успешно загрузили прогнозируемую модель на предыдущем шаге, давайте теперь обработаем с помощью функции распознавания.
Сначала нам нужно создать Экземпляр (объект) DigitalInkRecognizer
, а затем использовать функцию recognize()
- затем нам нужно передать объект Ink и распознать эскизы, которые мы нарисовали на цифровой поверхности.
Мы также используем onSuccessListener
, чтобы определить, успешно ли сделала прогноз модель. В случае успеха мы можем получить доступ к списку RecognitionCandidate
, а затем получить текст распознавателя.
Мы также добавляем OnFailureListener
, поэтому в случае, если модель не может предсказать, мы сможем показать пользователю сообщение об ошибке.
Теперь давайте перейдем к коду, чтобы увидеть, как эти шаги выглядят на практике:
Результат
Давайте создадим и запустим приложение, чтобы увидеть на практике наше приложение для распознавания цифровых чертежей:
Советы по повышению точности распознавания текста
Прежде чем мы закончим, я хотел бы также рассмотреть несколько способов повышения производительности распознавания текста. Здесь я продемонстрировал распознавание фигур, но советы относятся к распознаванию рукописного текста, которое является частью DigitalInkRecognition API.
- Область письма: установка ширины и высоты распознавателя для лучшего соответствия области письма может повысить точность
- Предварительный контекст: он непосредственно предшествует штрихам в
Ink
, который вы пытаетесь распознать - предоставление распознавателю предварительного контекста также может улучшить прогнозы модели.
Примечание. Вышеупомянутые методы не применимы к классификаторам рисования для смайликов, автоматического рисования и фигур.
Вывод
В этой статье вы узнали, как реализовать API распознавания цифровых чернил ML Kit на устройстве на Android. Для этого мы научились рисовать холст, настраивать объект DigitalInkRecognizer и загружать модель DigitalInkRecognizer. После того, как модель успешно сделала прогноз, мы сможем получить доступ к списку и распознать рисунок на цифровой поверхности.
Некоторые из нижеперечисленных приложений используют ту же технологию и API. Если вы хотите создать для своего приложения Android функции распознавания рукописного ввода или форм, вы можете вдохновиться этими приложениями.
- Приложение Gboard
- Google Быстро, нарисуй
- AutoDraw эксперименты
Если вы хотите изучить более подробно, ознакомьтесь с официальной документацией:
Надеюсь, эта статья была полезной. Если вы думаете, что чего-то не хватает, у вас есть вопросы или вы хотите высказать свои мысли или предложения, оставьте комментарий ниже.
Примечание редактора: Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.
Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.