Общая информация


В предыдущей статье мы рассказали о том, как с помощью возможности распознавания текста HUAWEI ML Kit создать функцию привязки банковских карт. Пользователям достаточно загрузить фотографию своей карты, и приложение автоматически распознает всю важную информацию. Это значительно облегчает ввод данных банковской карты. Но можно ли сделать то же самое со счетами и скидочными купонами? Конечно, можно! В этой статье мы покажем вам, как с помощью возможности распознавания текста HUAWEI ML Kit создать функцию автоматического ввода номеров счетов и скидочных кодов.


Назначение


Функция распознавания текста может применяться в самых разных ситуациях. Например, если вы сканируете счет ниже, укажите, что номер услуги начинается с «NO.DE SERVICIO», а также введите ограничение длины до 12 символов. Тогда вы быстро получите номер счета «123456789123» с помощью функции распознавания текста.


image

Аналогично, если вы сканируете скидочный купон ниже, настройте начало кода «FAVE-», ограничьте длину до 4 символов, чтобы получить код скидки «8329» и затем завершить платеж.


image

Полезно, правда? Вы также можете самостоятельно настраивать данные, которые сможет распознавать ваше приложение.


Интеграция функции распознавания текста


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


1. Подготовка


Подробную информацию о необходимых подготовительных шагах вы можете найти на платформе HUAWEI Developer. Ниже мы кратко рассмотрим только ключевые моменты.


1.1 Настройте адрес репозитория Maven в файле на уровне проекта build.gradle


buildscript {
    repositories {
     ...
        maven {url 'https://developer.huawei.com/repo/'}
    }
}
 dependencies {
   ...
        classpath 'com.huawei.agconnect:agcp:1.3.1.300'
    }
allprojects {
    repositories {
     ...
        maven {url 'https://developer.huawei.com/repo/'}
    }
}

1.2 Добавьте настройки к заголовку файла


После интеграции SDK добавьте следующие настройки к заголовку файла:


apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'

1.3 Настройте зависимости SDK в файле на уровне приложения build.gradle


dependencies {
    // Import the base SDK.
    implementation 'com.huawei.hms:ml-computer-vision-ocr:2.0.1.300'
    // Import the Latin character recognition model package.
    implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:2.0.1.300'
    // Import the Japanese and Korean character recognition model package.
    implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:2.0.1.300'
    // Import the Chinese and English character recognition model package.
    implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:2.0.1.300'
}

1.4 Добавьте эти выражения в файл AndroidManifest.xml для автоматического обновления модели машинного обучения


<manifest>
    ...
    <meta-data
        android:name="com.huawei.hms.ml.DEPENDENCY"
        android:value="ocr" />
     ...
</manifest>   

1.5 Отправьте заявку на право использования камеры


<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

2. Разработка кода


2.1 Создайте анализатор


MLTextAnalyzer analyzer = new MLTextAnalyzer.Factory(context).setLanguage(type).create();

2.2 Настройте обработку результатов распознавания для привязки анализатора


analyzer.setTransactor(new OcrDetectorProcessor());

2.3 Вызовите синхронный API


С помощью встроенного LensEngine SDK создайте объект, зарегистрируйте анализатор и инициализируйте параметры камеры.


lensEngine = new LensEngine.Creator(context, analyzer)
  .setLensType(LensEngine.BACK_LENS)
  .applyDisplayDimension(width, height)
  .applyFps(30.0f)
  .enableAutomaticFocus(true)
  .create(); 

2.4 Вызовите метод run для запуска камеры и считывания данных камеры при распознавании


try {
    lensEngine.run(holder);
} catch (IOException e) {
    // Exception handling logic.
    Log.e("TAG", "e=" + e.getMessage());
}

2.5 Обработайте результаты распознавания, как показано ниже


public class OcrDetectorProcessor implements MLAnalyzer.MLTransactor<MLText.Block> {
    @Override
    public void transactResult(MLAnalyzer.Result<MLText.Block> results) {
         SparseArray<MLText.Block> items = results.getAnalyseList();
         // Process the recognition result as required. Only the detection results are processed.
        // Other detection-related APIs provided by ML Kit cannot be called.
        …
    }
    @Override
    public void destroy() {
        // Callback method used to release resources when the detection ends.
    }
}

2.6 Остановите анализатор и освободите ресурсы распознавания после завершения распознавания


if (analyzer != null) {
    try {
        analyzer.stop();
    } catch (IOException e) {
        // Exception handling.
    }
}
if (lensEngine != null) {
    lensEngine.release();
}

Демо


Вот и все! Помните, что при необходимости вы можете расширить возможности функции. А теперь давайте посмотрим, как отсканировать транспортные чеки.


image

А также как отсканировать скидочный код, чтобы быстро получить скидку онлайн и совершить платеж.


image

Исходный код Github


> Github
> Для получения подробной информации перейдите на наш официальный веб-сайт: HUAWEI ML Kit — О сервисе.