Распознавайте нарисованные от руки цифровые формы с помощью мобильного машинного обучения

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

Если вы хотите изучить более подробно, ознакомьтесь с официальной документацией:



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

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

Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.