Распознаватель текста с изображения, чтобы найти дату - PullRequest
0 голосов
/ 24 января 2020

В моем приложении мне нужна помощь, чтобы найти дату из изображения с помощью Text Recognizer. Но на изображении дата может быть в любом формате, таком как:

дд / мм / гггг, дд-мм-гггг, дд мм гггг, дд ммм гггг, дд-ммм-гггг, дд / ммм / гггг et c.

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

implementation "com.google.android.gms:play-services-vision:18.0.0"

Код:

TextRecognizer mText = new TextRecognizer.Builder(getApplicationCOntext()).build();
if(mText.isOperational()) {
   readText(bitmap,mtext);
}

private void readText(Bitmap bitmap, TextRecognizer mTextRecognizer) {
   if(bitmap != null) {
      Frame mframe = new Frame.Builder().setBitmap(bitmap).build();
      SparseArray<TextBlock> mTextBlockSparseArray = mTextRecognizer.detect(mframe);
      StringBuilder mStringBuffer = new StringBuilder();


   }
}

Как получить ДАТА с изображения?

1 Ответ

0 голосов
/ 25 января 2020

String.replaceFirst () и java .time через ThreeTenABP

Есть несколько различных способов go об этом. Я представляю своего рода смешанный подход: я использую регулярное выражение для различных возможных разделителей, который проверяет, что оба разделителя (после дня и после месяца) одинаковы. Далее я использую необязательные части в строке шаблона формата для обработки месяца как сокращения (Jan) или числа (01).

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-[MMM][MM]-uuuu", Locale.ENGLISH);

    String[] inputs = { "02/01/2020", "04-01-2020", "07 01 2020",
            "09 Jan 2020", "13-Jan-2020", "17/Jan/2020" };

    for (String input : inputs) {
        String withHyphens = input.replaceFirst("([/ ])(.*)\\1", "-$2-");
        LocalDate date = LocalDate.parse(withHyphens, dateFormatter);
        System.out.format("%11s was parsed into %s%n", input, date);
    }

Выходные данные этого фрагмента:

 02/01/2020 was parsed into 2020-01-02
 04-01-2020 was parsed into 2020-01-04
 07 01 2020 was parsed into 2020-01-07
09 Jan 2020 was parsed into 2020-01-09
13-Jan-2020 was parsed into 2020-01-13
17/Jan/2020 was parsed into 2020-01-17

Если вы предпочитаете, вы также можете использовать дополнительные части в строке шаблона формата для всего. Тогда ваш шаблон формата может выглядеть как dd[/][-][ ][MMM][MM][/][-][ ]uuuu. Это дает более мягкую проверку, но более согласованно и короче.

Я использую бэкпорт java .time, современный Java API даты и времени.

Вопрос: 't java .time требует Android API уровня 26?

java .time прекрасно работает как на старых, так и на новых Android устройствах. Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на более новых Android устройствах (от уровня API 26) современный встроенный API -in.
  • В не- Android Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
  • Вкл. (Старше) Android используйте редакцию ThreeTen Backport Android. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...